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

Gradle升级后R8误删类导致签名APK构建失败求助

Gradle升级后R8缺失类报错的解决方案

问题场景

将Gradle从8.4版本升级至8.9、Gradle插件从8.3.2升级至8.7.0后,构建签名发布APK时R8工具抛出大量缺失类错误,示例错误信息如下:

Missing class com.my.package.MyClass$Companion (referenced from: void common.my.package.workers.SyncWorker.<init>(android.content.Context, androidx.work.WorkerParameters, com.my.package.Dao))

已尝试以下操作但未解决问题:

  • 在应用模块proguard-rules.txt及其他模块consumer-rules.txt中添加-keep class com.my.package.** { *; }规则
  • 在gradle.properties中设置android.enableR8.fullMode=false
  • 使用Android Studio生成的missing-rules.txt中的-dontwarn规则,虽能通过构建,但应用运行时因缺失类直接崩溃

解决步骤

1. 确认混淆规则的作用范围

  • 如果com.my.package所在模块是库模块,仅在consumer-rules.txt添加规则无效,需在库模块自身的proguard-rules.pro中也添加-keep规则——R8处理库模块时会优先应用自身混淆规则,再合并consumer规则。
  • 若该模块是动态特性模块,需在特性模块的build.gradle中显式配置consumer规则传递:
    android {
        buildTypes {
            release {
                consumerProguardFiles 'consumer-rules.txt'
            }
        }
    }
    

2. 修正R8规则的准确性

  • 替换宽泛的通配符规则为更明确的配置,确保包含内部类、伴生对象等结构:
    -keep class com.my.package.** {
        *;
        inner class *;
        companion object;
    }
    
    也可以针对缺失的类精准添加规则:
    -keep class com.my.package.MyClass$Companion { *; }
    -keep class com.my.package.Dao { *; }
    
  • 导出最终生效的R8规则排查冲突:执行./gradlew app:printReleaseR8Rules命令,搜索com.my.package相关条目,确认自定义规则是否被正确应用,是否被第三方库的规则覆盖。

3. 适配Gradle插件升级后的R8行为

  • Gradle插件8.7.0的R8代码收缩逻辑有调整,检查是否开启minifyEnabled true但未正确配置资源收缩:若不需要资源收缩,需显式设置shrinkResources false。
  • 检查gradle.properties中的R8相关配置,确保启用脱糖(避免Kotlin语法无法被R8识别):
    android.enableDesugar=true
    
    避免配置android.r8.enable.desugaring=false之类的冲突项。

4. 检查Kotlin编译配置

  • 确认kotlinOptions的JVM目标版本与项目兼容,避免字节码版本问题导致R8误判:
    android {
        kotlinOptions {
            jvmTarget = "1.8" // 或项目使用的更高版本
        }
    }
    
  • 排查freeCompilerArgs中的参数,避免-Xno-param-assertions等可能改变字节码结构的配置影响R8分析。

5. 清理缓存后重新构建

  • 执行./gradlew clean清除旧构建缓存,再执行./gradlew assembleRelease重新构建。
  • 关闭Android Studio的Build Cache(路径:File > Settings > Build, Execution, Deployment > Build Tools > Gradle),避免缓存干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:12