Android 开发中 Proguard 主要作用是对 Java 代码进行如下操作 :
最常用的是混淆操作 ;
上述执行顺序 : 压缩 Shrink -> 优化 Optimize -> 混淆 Obfuscate -> 预检 Preveirfy ;
Proguard 官网 : https://www.guardsquare.com/en/products/proguard
Proguard 官方指导手册 : https://www.guardsquare.com/en/products/proguard/manual
Proguard 用法 : https://www.guardsquare.com/en/products/proguard/manual/usage
Proguard 混淆相关文档 : https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions
Proguard 混淆相关文档 : https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions
Proguard 混淆配置 :
-keep 指定 类 , 类成员 , 不被混淆 ; ( 类成员指的是类的成员方法 和 成员属性 )
-keepclassmembers 指定 类成员 不被混淆 , 类 和 类 方法 可以混淆 ;
-keepclasseswithmembers 指定 类 和 类成员 , 不被混淆 , 前提是 指定的类成员存在 ;
开启 Proguard : 在 Module 下的 build.gradle 中进行如下配置 , 其中 release 标签是进行发布版本的混淆设置 , debug 标签是测试版本的混淆设置 ;
android {
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled true
// 打印 proguard-android-optimize.txt 路径
print("proguardPath = ${getDefaultProguardFile('proguard-android-optimize.txt')}")
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
上述 proguard-rules.pro 是开发者自己手动配置的 ,
上述 proguard-android-optimize.txt 混淆配置文件是系统自动生成的 ,
该 proguard-android-optimize.txt 文件生成的依据是根据开发者的 proguard-rules.pro 混淆配置生成的 ;
编译时打印变量 : 上述使用了 print(“proguardPath = ${getDefaultProguardFile(‘proguard-android-optimize.txt’)}”) 语句 , 打印了混淆脚本 proguard-android-optimize.txt 的路径 , 其打印结果如下 , 该混淆脚本在 应用的 \build\intermediates\proguard-files\ 目录下 ;
proguardPath = Y:\002_WorkSpace\001_AS\Handler\app\build\intermediates\proguard-files\proguard-android-optimize.txt-3.6.1
生成混淆配置脚本 proguard-android-optimize.txt : 如果没有上述脚本 , 即删除了 build 目录 , 进入 Gradle 界面 , 执行 app -> Tasks -> other -> extractProguardFiles 任务 , 即可重新生成混淆配置脚本 ;