1. 用proguard混淆代码
android sdk 自带 proguard 包,因此用proguard混淆 很简单,只需简单配置下就好
1. 在 project.properties里开启 proguard :
sdk.dir=D:\\android\\tool\\android-sdk-windows_4.0
proguard.config=${sdk.dir}\\tools\\proguard\\proguard-android.txt:proguard.cfg
2. 在 proguard.cfg做具体配置
l 一个仅引用于AndroidManifest.xml文件的类。
l 一个通过JNI调用的方法。
l 动态引用的属性和方法。
缺省的proguard.cfg文件试图覆盖普通的情况,但是你可能碰到类似ClassNotFoundException的异常,这个异常出现在当你的程序去访问一个被混淆器移除了的类的时候。
你可以在proguard.cfg文件中添加-keep这一行来修复这些错误。例如:
-keep public class <MyClass>
-Keep设置有很多可选项和注意地方,所以为了获得更多关于配置信息,强烈推荐你阅读混淆器用户手册。特别有用的有Keep选项综述和举例部分。在混淆器手册问题解决方案部分,介绍了代码在混淆过程中你可能碰到的其他常见问题。
如 不混淆 某些jia包 等
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-dontwarn com.unionpay.**
-keep class com.unionpay.** { *; }
3.可能出现的错误 :
missing type parameter at com.google.gson.b.a.a
程序中用到了gson的new typeToken,结果打包成apk发布时,发现抛出异常,解决方法:
在 proguard.cfg中添加
-dontobfuscate
-dontoptimize
xx cannot be resolved to a type
出现这个错误 就是引用的jar包也被混淆了,找到具体的jar包,设置下 keep即可-keep class cn.sharesdk.** { *; }
注意 : 如果因为引用包混淆出现的错误 很有可能 不会直接显示,只有程序调用引用包的时候 才会报错,因此混淆后需要充分测试,特别是针对引包,如
4 已发布应用程序的调试注意事项
保存好每一个已发布给用户的程序的mapping.txt文件。通过保存发布构建版本的mapping.txt文件拷贝,确保当用户碰到bug,并把混淆后的堆栈调试跟踪信息提交给你时,你可以进行调试从而修复问题。程序的mapping.txt文件在每次发布构建时都会被覆盖,所以你一定要注意保存正确的版本。
例如,假设你已经发布了一个应用程序并在继续在新的版本中开发添加新的功能。接着你马上启动混淆器并创建一个新的发布版本。该操作把mapping.txt文件覆盖了。一个用户提交了来自当前发布版本的bug报告,该报告包含了堆栈调试信息。你再也不能对用户的堆栈信息进行调试了,因为这个对应用户本机上版本的mapping.txt文件不存在了。其他覆盖mapping.txt文件的情况还有很多,所以对于每一个可能需要调试的版本,你都要确保有一份拷贝。
如何保存mapping.txt文件由你决定。例如,你可以根据版本和构建号来重命名它们,或者连同你的源代码进行版本控制。
5. 混淆语法:
-include {filename} 从给定的文件中读取配置参数