升级Android构建插件与Gradle版本后ProGuard/R8出现缺失类报错
嗨,我之前升级Android构建工具链的时候也碰到过类似的R8缺失类问题,先帮你理清楚你做的版本变更,再给你几个实用的排查方向:
你完成的版本升级内容
- Android应用插件:
com.android.application从 8.1.1 升级到 8.8.0 - Kotlin Android插件:
org.jetbrains.kotlin.android从 1.9.10 升级到 2.1.0 - KSP插件:
com.google.devtools.ksp从 1.9.10-1.0.13 升级到 2.1.0-1.0.29 - Gradle分发版本:从
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip升级到distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
遇到的错误信息
Missing classes detected while running R8. Please add the missing cla...(注:你提供的报错内容有截断,建议先补全完整的缺失类名称)
排查与解决方向
补全R8/ProGuard的Keep规则
先把报错里的完整缺失类名找出来,然后在项目的proguard-rules.pro文件中添加对应的保留规则。比如如果缺失的是com.example.MissingClass,就添加:-keep class com.example.MissingClass { *; }如果是整个包下的类都出现缺失,也可以用通配符批量处理:
-keep class com.example.** { *; }校验第三方依赖的兼容性
高版本的构建插件和Gradle对依赖的兼容性要求更严格,你可以逐个检查项目中的第三方依赖,看看有没有未适配Kotlin 2.1.0、Gradle 8.10.2的旧库。优先把这些依赖更新到官方最新版本,很多时候兼容性问题会随着依赖升级解决。临时关闭R8严格模式(仅用于排查)
如果只是想先绕过这个问题验证其他功能,可以在项目根目录的gradle.properties中添加以下配置:android.enableR8.fullMode=false注意:这个只是临时排查方案,不建议长期使用,因为R8的fullMode能有效优化包体积和运行性能。
检查KSP生成代码的编译路径
你同步升级了KSP版本,要确认KSP生成的代码是否被正确纳入编译扫描范围。部分版本升级可能会导致KSP的生成目录配置变化,你可以在模块的build.gradle.kts(或build.gradle)文件中检查KSP相关配置,确保生成的类能被R8正确识别。
备注:内容来源于stack exchange,提问作者Pavlo Kravchenko

