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

Flutter发布构建时如何解决R8报com.google.android.play.core类缺失问题?

AGP 8.1升级后R8混淆失败的排查与解决

问题背景

AGP从7.4升级到8.1后,执行Task :app:minifyReleaseWithR8时失败,R8提示检测到缺失类,要求添加指定missing_rules.txt中的规则。但在ProGuard规则文件中添加批量及单个类的-keep规则后,仍报相同错误,怀疑规则未生效。

排查与解决步骤

1. 确认规则文件的配置关联

AGP 8.x版本默认使用R8,需确保build.gradle中正确配置规则文件路径:

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

检查路径是否正确,避免因文件位置变更导致规则未加载。

2. 修正规则语法兼容性

AGP 8.x的R8对规则语法要求更严格,旧ProGuard规则可能失效:

  • 替换废弃语法,确保-keep规则格式准确,例如针对缺失类:
-keep class com.yourpackage.missingclass.** { *; }

避免模糊的通配符规则,直接指定目标类或包。

3. 验证规则是否生效

添加测试规则(如保留一个测试类),构建后查看build/outputs/mapping/release/mapping.txt:

  • 若测试类未被混淆,说明规则文件正常加载;
  • 若测试类仍被混淆,需检查文件路径、配置是否有误,或是否存在其他规则文件覆盖当前配置。

4. 适配R8的严格收缩策略

AGP 8.1的R8默认启用更严格的代码收缩,可能误删反射调用的类:

  • 确保missing_rules.txt中的规则全部添加,覆盖所有缺失类;
  • 对于反射调用的类,需补充-keepclassmembers规则保留成员,例如:
-keepclassmembers class com.yourpackage.missingclass.TargetClass {
    public <init>(...);
    public <methods>;
}

5. 清理构建缓存

AGP升级后的缓存可能导致旧规则残留,执行以下命令清理后重新构建:

./gradlew clean assembleRelease

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:24