##一、环境配置
buildTypes {
release {
// 混淆
minifyEnabled true
// Zipalign优化
zipAlignEnabled true
// 移除无用的resource文件
shrinkResources true
// 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
复制代码
productFlavors {
dev {
minSdkVersion 16
}
prod {
minSdkVersion 16
}
}
复制代码
####2 生成proguard-rules.pro混淆文件
混淆配置可以用混淆的插件生成,记得加上一句:
-ignorewarnings
复制代码
##二、混淆调试
混淆之后,会给我们输出一些文件,android studio 在目录app/build/outputs/mapping下有以下文件:
1 dump.txt 描述apk文件中所有类文件间的内部结构。
2 mapping.txt 列出了原始的类,方法,和字段名与混淆后代码之间的映射,常用。
3 seeds.txt 列出了未被混淆的类和成员
4 usage.txt 列出了从apk中删除的代码
可以通过mapping.txt,通过映射关系找到对应的类,方法,字段来修复bug。这里需要利用sdk给我们提供的retrace脚本,可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息,window下时retrace.bat,linux和mac是retrace.sh,该脚本的位置在*/sdk/tools/proguard/bin/下。语法为:
例如:
./retrace.sh -verbose mapping.txt a.txt
复制代码
##三、注意事项
1 使用gson,fastjsoon时,bean类不需要混淆,否则会出错,为此还特意请教了大神,哈哈。
2 如果混淆的时候会失败,检查下是否加入了freeline,这个库好像会影响到混淆
3 -ignorewarnings ,这句话是去除apk运行时产生的警告导致程序异常终止,这是代码混淆造成的。