混淆——Proguard工具的使用

因为项目的要求,需要对Eclipse中生成的 Jar包(Java 源码 Export输出)进行混淆,Google官方提供的 Proguard工具 因为其免费性、可视性、可选择性,成为了我的选择。

只是个人总结,不想那么多废话——码字码的手累)

使用 Proguard工具 过程中,最重要的又3个步骤,分别是压缩、混淆、优化。个人认为,我的主要目的是混淆代码,自然混淆这一步是我最为关心的。


一、关键步骤解析

压缩


Java 源代码(.java文件)编译后形成字节码文件(.class文件),
字节码比 Java源文件更简洁,但是它仍然包含大量的无用代码。

ProGuard工具 能分析字节码,并删除无用的类、字段和方法,程序只保留功能上的等价,包括异常堆栈描述所需要的信息,从而减小生成的自己码文件的体积。


混淆

编译后的字节码包含了大量的调试信息:源文件名,行号,字段名,方法名,参数名,变量名等等。这些信息使得它很容易被反编译和通过逆向工程获得完整的程序。

ProGuard混淆器能删除这些调试信息,并用无意义的字符序列来替换所有名字,使得它很难进行逆向工程,它进一步免费的精简代码。除了异常堆栈信息所需要的类名,方法名和行号外,程序只会保留功能上的等价。



优化

压缩阶段删除了无用类,字段和方法外,ProGuard在字节码级也提供了性能优化,内部方法有: 
不必要的字段存取 


删除不必要的方法调用 


删除不必要的分支 

删除不必要的比较和instanceof验证 

删除未使用的代码 

只写字段 

删除未使用的方法参数 

像push/pop简化一样的各种各样的peephole优化 

在可能的情况下为类添加static和final修饰符 

在可能的情况下为方法添加private, static和final修饰符 

在可能的情况下使get/set方法成为内联的 

当接口只有一个实现类的时候,就取代它 

选择性的删除日志代码 

实际的优化效果是依赖于代码执行代码的虚拟机。简单的虚拟机比有复杂JIT编译器的高级虚拟机更有效。无论如何,你的字节码会变得更小。


二、Proguard 混淆步骤

(声明:该步骤主体转载自 http://www.cnblogs.com/rayray/p/3421028.html ,

在自己理解的基础上做了相应的修改)

1、拷贝Android项目中“proguard.cfg”文件到你指定的位置,并改名为“proguard.pro

(新版本的 ADT 中已经没有了 “proguard.cfg”文件,只需要将其中的内容拷贝到proguard-project.txt 中即可

 

2、在 Android SDK 的安装路径下双击 Proguard-gui,以启动 Proguard混淆器。

(如: Android/adt-bundle-mac/sdk/tools/proguard/bin 目录下 )



3、加载“1”中的"proguard.pro"配置文件


 


4、配置需要混淆的jar包:

Add Input”:添加要被混淆的 Jar包;

Add Output”:输出 混淆后 Jar包 的包名;


下半部分是 要混淆的Jar包 所依赖的包——最好是将 Jar包 的 Java 源码中的所依赖的 包都添加进去;


 


5、压缩

“Keep” 表示压缩时候需要保留的内容——原作者保留了“Library”、"Enumeration" 2部分——这个看自己的需求,选择哪些部分不压缩。


 


6、混淆

这一步是“混淆”,是本次混淆行为的最核心内容,具体选择混淆什么、不混淆什么,要仔细的在这个界面上选择。


注意红框的选项,勾选后混淆出来的jar包有时导致在主项目中使用时报错:“conversion to dalvik format failedwith error 1”。


 


7、优化

具体怎么选择,自己根据项目需要、选择相应的界面。


 


8、Informaition——混淆的一些软、硬件信息


红框1,正确选择target下拉框对应的jdk版本,否则可能出现异常错误。

红框2,编译时如果遇到未找到定义的警告,那么在这里添加需要忽略的内容。


 


9、

点击“View configuration”,出现自己对 Proguard混淆工具的 配置信息(此时可以保存);

保存后的文件为.pro后缀,可以使用编辑软件进行对其作修改(必须按照proguard规范进行),再按照上述步骤进行重新加载。


点击“Process”开始混淆吧!(遇到警告或错误停止混淆,请使用“-dontwarn”进行屏蔽处理)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值