在这里插入图片描述

打包环境

  • AGP:8.7.2
  • Gradle:8.9

1、描述

同一个工程

✅ 在 AGP6+ 打包运行正常

✅ 在 AGP7+ 打包运行正常

❌ 在 AGP8+ 打包运行闪退(混淆包闪退、非混淆包正常)

2、混淆前

很正常的代码

public class MyApplication extends Application {
    @Override
    protected 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 = true
            signingConfig = signingConfigs["PrimerDebug"]
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro",
                "obs-all-proguard-rules.pro"
            )
        }
        release {
            isMinifyEnabled = true//开启混淆
            isDebuggable = false
            signingConfig = 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 坑不浅啊

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐