Android ProGuard实例教程
来源:互联网 发布:win10如何忘记网络 编辑:程序博客网 时间:2024/05/19 17:50
ProGuard工具通过移除不用的代码,用语义上混淆的名字来重命名类、字段和方法等手段来压缩、优化和混淆你的代码。结果是更小的.apk文件,并且更难于被反编译。由于ProGuard能够让你的程序难于被反编译,因此,当你的程序使用了一些机密的信息的时,使用它就显得更加重要。
ProGuard已经集成到Android的编译环境中,因此,用不着手动来触发它。ProGuard只在release模式下编译应用程序才会运行,所以,在debug模式下编译,你就不必处理混淆的代码。是否运行ProGuard是完全可选的,但强烈推荐使用。
启用ProGuard
当你创建Android工程时,proguard.cfg文件会在工程的根目录自动创建。这个文件定义了ProGuard如何优化和混淆代码,因此,理解如何定制它是非常重要的。默认的配置文件只是覆盖了一些通用的情况,所以,基本上你需要编辑它来满足你的需求。参考后面的“配置ProGuard”章节来了解如何定制ProGuard的相关信息。
启用ProGuard让它跟随Ant或Eclipse编译时一起运行,你需要在<project_root>/default.properties文件中设置proguard.config属性。路径可以是绝对路径或是工程根目录的相对路径。 如果你把proguard.cfg文件放在默认的位置(工程的根目录),你可以像这样来指定它的位置: proguard.config=proguard.cfg
你还可以把该文件移到任何你想放的位置,然后指定绝对路径:proguard.config=/path/to/proguard.cfg
当你在release模式下编译你的程序,不管是用ant release还是用Eclipse的导出向导,编译系统都会自动检查proguard.config属性是否设置。如果设置了,ProGuard就会在打包成.apk文件之前,自动处理应用程序的字节码。Debug模式编译,不会触发ProGuard,因为它会使得调试更加复杂累赘。
ProGuard运行结束后,输出以下文件: dump.txt
描述.apk文件中所有类文件间的内部结构
mapping.txt
列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。
seeds.txt
列出了未被混淆的类和成员
usage.txt
列出了从.apk中删除的代码
这些文件放在以下文件夹中:
Ant:<project_root>/bin/proguard
Eclipse: <project_root>/proguard
注意:每当你在release模式下编译时,这些文件都会被覆盖重写,当然,是被ProGuard工具生成的最新的文件所覆盖。每次你发布你的程序时,都应该保存一份,为了将来能够解码bug报告。
配置 ProGuard
一些情况下,proguard.cfg文件中的默认配置就足够了。然而,有些情况ProGuard也很难正确分析,它可能会删除它认为不用的代码,但实际上正是你的程序所需要的。例如:
只在AndroidManifest.xml文件中引用的类
由JNI调用的方法
动态引用的字段和方法
默认的proguard.cfg文件努力去覆盖通用的情况,但有可能你会遇到如ClassNotFoundException这样的异常,而这正好是由于ProGuard移除了整个类造成的。
你可以修正由于ProGuard移除代码造成的错误,只需要在proguard.cfg文件中添加一行“-keep”。例如:
-keep public class <MyClass>
使用-keep选项时,有一些选项和建议,因此,强烈建议你阅读ProGuard手册来了解更多关于定制配置文件的信息。“Overview of Keep options”和“Examples section”将非常有用。
0 0
- Android ProGuard实例教程
- Android ProGuard实例教程
- Android 实例教程
- Android & proguard
- android proguard
- android proguard
- android proguard
- Android ProGuard
- Android Proguard
- android proguard
- android proguard
- 【Proguard】android 中 Proguard 使用
- Android SAX解析实例教程
- Android图像处理实例教程
- [译]Android Protobuf实例教程
- proguard-android.txt proguard-rules.pro
- android 代码混淆proguard
- Android Java混淆(ProGuard)
- Collection 和 Collections的区别
- Unity3D研究院之Assetbundle的实战(六十三)
- Lua 项目分析、创建新场景
- PJSIP开发手册之总体设计(一)
- CAGradientLayer(简用)
- Android ProGuard实例教程
- iphone开发中的一些小技巧
- Linux ALSA声卡驱动之三:PCM设备的创建
- Android 开发------------------ 修改 Actionbar 的样式
- JAVA5新特性
- viewpage 实现左右循环滑动
- UIBezierPath+CAShapeLayer 绘制自定义图形
- 你的 App 无人问津的原因?
- spark - k-mean