You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级AGP至8.0.2后执行R8混淆Android应用时出错求助

AGP 8.0.2升级后R8混淆构建错误解决方案

错误原因

AGP 8.x版本的R8混淆器对类继承关系的校验更严格,当测试相关类(android.test包下的类)和JUnit类同时被打包到Release构建中时,就会触发这类"库类继承程序类"的冲突错误——系统的android.test类属于库类,而JUnit类如果被误打包进Release就会被标记为程序类,两者的继承关系违反了R8的校验规则。

解决步骤

1. 检查依赖配置,隔离测试依赖

确保所有测试相关依赖仅声明在testImplementation或androidTestImplementation源集下,不要放在implementation或api中(这些会被打包到Release构建):

// 正确配置
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

// 错误示例(会导致JUnit类被打包进Release)
// implementation 'junit:junit:4.13.2'

2. 排除第三方依赖中的测试类

如果某个第三方依赖意外引入了JUnit或android.test相关类,在依赖声明中手动排除:

implementation('com.example:some-library:1.0.0') {
    exclude group: 'junit', module: 'junit'
    exclude group: 'android.test'
}

3. 添加R8规则临时绕过校验(仅当依赖无法调整时使用)

如果无法彻底移除冲突类,可以在proguard-rules.pro中添加规则让R8忽略这类冲突:

// 忽略android.test和JUnit相关的警告与冲突
-dontwarn android.test.**
-dontwarn junit.framework.**
-dontwarn junit.runner.**
// 允许修改访问权限,解决继承冲突
-allowaccessmodification

4. 检查源码目录配置

确认项目的sourceSets没有误将测试代码目录(如src/test/、src/androidTest/)包含进主源码集:

android {
    sourceSets {
        main {
            java.srcDirs = ['src/main/java']
            // 避免误加测试目录
            // java.srcDirs += ['src/test/java']
        }
    }
}

5. 彻底清理缓存

执行以下操作确保缓存不影响构建:

  • 执行Gradle的clean任务
  • 删除项目根目录下的.gradle文件夹
  • 重新Sync项目并执行Release构建

内容的提问来源于stack exchange,提问作者JBokMan95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:13:19