【意义】混淆代码,可以加大别人反编译的难度,从而最大化的保护自己的代码安全。

【场景】我写了一个发短信的程序,回调给游戏一个发短信是否成功的参数,如果成功,游戏就给用户加道具。本意:只想暴露给游戏 doPay()接口,但不想让别人知道我内部的代码及发送短信的内容,所以我就要混淆我的代码,只保留doPay()接口不被混淆~

工程目录结构:

1 分析:

PaymentForSms.java  中,有 doPay方法

public static void doPay(Context context,String uid,String productName,String productPrice,SmsResultCallback callback)

2

具体实现:

准备: Eclipse ,Ant包(网上随便一搜,一大堆,类似java jdk安装方法),android sdk自身带的 proguard.jar工具 + build.xml + progard.cfg

实现:

接下来,重点就是 build.xml 和 progard.cfg的编写了。。。代码中,有详细注释。如果不明白的,可以 百度一下,就非常清晰了...

build.xml

build.xml<?xml version="1.0"?>
<!-- 默认启动执行targetB -->
<projectname="targetPro"default="targetB" ><!-- 全局变量 --><!-- android-sdk 的路径 --><propertyname="android-sdk"value="D:\android-sdk-4.2" /><!-- android-版本 2.2 --><propertyname="android-jar"value="${android-sdk}/platforms/android-8/android.jar" /><!-- 任务组1 打印了一句话,没作用--><target name="targetA" ><echo message="Java Version: ${parent.version}" /></target><!-- 任务组 2 先检查targetA执行与否,如果没执行,则先执行targetA--><targetname="targetB"depends="targetA"unless="philander" ><echo message="The base dir is: ${basedir}" /><!--  建立路径,放.class --><mkdir dir="E:/SDK_Test/build/classes" /><!--  <mkdir dir="E:/SDK_SMS/build/gen" /> --><!-- 用到的Android编译库  android.jar --><path id="project.libs" ><fileset dir="${android-sdk}/tools/support" ><include name="*.jar" /></fileset><!-- 可以写多个库 --></path><!-- 编译,用到了 android.jar --><javacbootclasspath="${android-jar}"destdir="E:/SDK_Test/build/classes"encoding="GBK"includeantruntime="on" ><!-- 需要编译的.java文件路径 --><src path=".\src" /><!-- 用到的编译jar包  如android.jar --><classpath refid="project.libs" /></javac><!-- 打jar包  source_sdk.jar是未混淆的代码 --><jarbasedir="E:/SDK_Test/build/classes"destfile="source_sdk.jar" ></jar><echo>混淆代码 ... </echo><jar basedir="E:/SDK_Test/build/classes" destfile="temp.jar" /> <!-- temp.jar 为在根目录下 生成的,没混淆 jar包 --><java jar="D:\android-sdk-4.2\tools\proguard\lib\proguard.jar" fork="true" failonerror="true"><jvmarg value="-Dmaximum.inlined.code.length=32" />    <arg value="@proguard.cfg"></arg></java><!-- 删除多余的 .class 和 jar包 --><delete dir="E:/SDK_SMS/build/classes"/> <delete dir="E:/SDK_Test"/><delete file="temp.jar" /><!-- 后续自己定义操作 --><!--    <delete file="temp.jar" /><delete dir="E:/SDK_SMS/build/classes"/> <mkdir dir="E:/SDK_SMS/build/classes"/><unzip src="http://m.cnblogs.com/160574/optimized.jar" rel="nofollow"/>        <delete file="optimized.jar" /><jarbasedir="E:/SDK_SMS/build/classes"destfile="SDK.jar" ></jar><delete dir="E:\SDK_SMS\build" /> --></target></project>

proguard.cfg
#jar包所在地址
-injars temp.jar
#jar包输出地址
-outjars proguard_sdk.jar
#引用的库的jar,用于解析injars所指定的jar类
-libraryjars D:/android-sdk-4.2/tools/support/annotations.jar
-libraryjars libs/android-support-v4.jar
-libraryjars D:/android-sdk-4.2/platforms/android-8/android.jar-optimizationpasses 7
#混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames
#指定不去忽略非公共的库类
-dontskipnonpubliclibraryclasses-verbose
-dontoptimize
#不预校验
-dontpreverify
#优化
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#检查引用是否正确,如果在-libraryjars中定义了,无需在次声明
-dontwarn android.net.http.**#取消打印日志
-assumenosideeffects class android.util.Log {public static *** d(...);public static *** v(...);public static *** i(...);
}#不需要混淆的类  1、暴露的接口     2、自定义的Callback  3、用到第三方库的时候 -keep public class com.rekoo.listener.SmsResultCallback {*;}
-keep public class com.rekoo.single.sms.PaymentForSms {*;}-printmapping  proguard.map

混淆代码,就比较简单了~ build.xml右键-Run as - Ant build

刷新工程,工程目录下面,就生成了 proguard_sdk.jar 混淆jar包了。。打开看一下,就ok了。。。如有问题,请留言

转载于:https://www.cnblogs.com/codeAnimal/p/4104321.html

Proguard混淆代码(1)相关推荐

  1. ProGuard混淆代码

    关于ProGuard ProGuard是一款开源的代码混淆工具,不仅能够混淆代码,而且可以进行代码的压缩和优化等,这里只关注其混淆的功能. 代码混淆的原理就是,删除无用代码,使用难懂的类名,方法名,和 ...

  2. java proguard_java防止反编译之proguard混淆代码

    从eclipse中导出工程的jar包(这个就不详细说了) 安装proguard后打开bin目录下的proguardgui.bat启动proguard如下图所示: 点击Input/Output,设置输入 ...

  3. ProGuard混淆Java项目的核心代码

    开发需求 众所周知,class文件可以进行反编译从而泄露核心代码,为了保护知识产权,需要对代码进行混淆再进行打包.现阶段采用proguard去做一个基本的混淆,使代码的可读性降低. 操作步骤 [模块目 ...

  4. android 代码签名apk,[Android]混淆代码后生成带签名的apk

    Android从2.3的SDK开始,将ProGuard混淆代码的功能加入了进来. 我们可以从android sdk的tools目录下看到有一个proguard目录.说明具有了代码混淆的功能. 至于如何 ...

  5. Android开发实践:利用ProGuard进行代码混淆

    由于Android的代码大都是Java代码,所以挺容易被反编译的,好在Android ADT为我们集成了混淆代码的工具,一来可以混淆我们的代码,让程序被反编译后基本看不懂,另外还能起到代码优化的作用. ...

  6. java proguard 使用_使用proguard混淆java9代码

    序 本文主要研究一下如何使用proguard混淆java9代码 maven com.github.wvengen proguard-maven-plugin package proguard 6.0. ...

  7. java源代码加密+使用proguard混淆java web项目代码+自定义Classloader

    如何保护我们的源代码,实际上,应该有几种方法可以使用:1.使用代码混淆器 2.重载应用服务器的classloader 使用代码混淆器proguard进行代码混淆 1.首先下载proGuard.zip到 ...

  8. java proguard_使用proguard混淆java9代码

    序 本文主要研究一下如何使用proguard混淆java9代码 maven com.github.wvengen proguard-maven-plugin package proguard 6.0. ...

  9. 最新版SpringBoot结合ProGuard实现代码混淆

    SpringBoot结合ProGuard实现代码混淆 参考案例 前言 ProGuard集成 1.maven的配置 2.相关异常解决 注意事项 参考案例 1.Springboot+proguard+ma ...

最新文章

  1. C语言12变21,【C语言】21-结构体
  2. php array_diff_key,php中array_diff_key函数具有什么功能呢?
  3. fuel6.0安装部署
  4. java 自己抛空指针异常_java Timetask 访问service 抛空指针异常解决方案
  5. 应用计算机测定线性电阻伏安特性实验器材,线性电阻与非线性电阻伏安特性实验的Origin处理...
  6. K-means Algorithm 聚类算法
  7. mongodb数据库中插入数据
  8. 西北大学计算机科学排名,西北大学计算机科学与信息系统Computer Science and Information Systems世界排名2020年最新排名第151-200位(QS世界排名)...
  9. Java_基础—try...catch的方式处理异常1
  10. iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
  11. 数据科学 IPython 笔记本 9.3 理解 Python 中的数据类型
  12. 一个简单的DDraw应用程序2
  13. leetcode讲解--513. Find Bottom Left Tree Value
  14. 什么是UPS电源系统
  15. 春运来了,你的火车票备好了么?
  16. InnoDB存储引擎概念与原理解析
  17. android 照片拼接长图_图文长截图(长图拼接制作)
  18. 动态规划算法——2020美团校招合并金币算法
  19. Elasticsearch 运行时类型 Runtime fields 深入详解
  20. 计算机上机日志如何查找,如何查看金蝶KIS记账王上机日志

热门文章

  1. SpringBoot ElasticSearch 全文搜索
  2. android 入门
  3. 判断是否是电脑访问网站 1号店页面判断脚本
  4. Matplotlib for Python Developers
  5. 黄聪:VirtualBox 安装ghost版windows XP
  6. 太阳能控制器原理图_太阳能人体感应壁灯的电路设计
  7. DOS命令-创建删除文件和文件夹
  8. 数据库索引的实现原理?
  9. 图解TCP/IP(第5版)PDF
  10. java基础进阶一:String源码和String常量池