AGP8+ fullMode 完全模式混淆闪退
打包环境
- AGP:8.7.2
- Gradle:8.9
1、描述
同一个工程
✅ 在 AGP6+ 打包运行正常
✅ 在 AGP7+ 打包运行正常
❌ 在 AGP8+ 打包运行闪退(混淆包闪退、非混淆包正常)
2、混淆前
很正常的代码
public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);androidx.multidex.MultiDex.install(this);DNSDK.applicationAttachBaseContext(this, base);}
}
3、AGP8+ 混淆后
- 这里看着还算正常
- 这就不正常了
- 一个普通类怎么变成了 abstract
- 一个正常的方法最后怎么就直接抛异常了
throw null
【这样运行意料之中绝对闪退】
- 再随便看其他类,很多方法都是直接抛异常,方法体都变了【天崩开局😡】
5、AGP8+ 非混淆
经测试
✅ 关闭混淆打包。运行正常
❌ 开启混淆打包,运行闪退(出现上文所示代码)
buildTypes {debug {isMinifyEnabled = false//关闭混淆isDebuggable = truesigningConfig = signingConfigs["PrimerDebug"]proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro","obs-all-proguard-rules.pro")}release {isMinifyEnabled = true//开启混淆isDebuggable = falsesigningConfig = signingConfigs["PrimerRelease"]proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro","obs-all-proguard-rules.pro")}}
4、AGP8+ 混淆 [关闭完全模式]
看官方 R8 的文档:Google git:D8 dexer and R8 shrinker 好像也没发现什么东西
冥冥中记得 R8 有一个混淆模式:fullMode
完整模式
温故知新,问下 Al
Al 解释的很清楚
总之,时间紧迫,先一把梭哈关闭 R8 fullMode 让项目先运行起来
gradle.properties
文件下配置开关:
android.enableR8.fullMode=false
果不其然,这次运行正常
没有时间研究,也研究不懂,对新手来说升级 AGP 坑不浅啊