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

升级AGP 8.4.0后遇R8缺失类及运行时ClassNotFound问题求助

解决AGP 8.4.0升级后R8缺失类引发的运行时ClassNotFound问题

问题本质

直接把missing_rules.txt里的规则全抄进ProGuard,本质是让R8跳过缺失类的检查,但这些类大概率是你运行时实际需要的——要么是依赖没正确引入,要么是R8误判了类的使用场景(比如反射、动态加载),只靠-dontwarn根本解决不了运行时找不到类的问题。

分步解决

1. 先搞清楚缺失类来自哪

打开missing_rules.txt,把里面的类名拎出来查:

  • 如果是第三方库的类,比如com.google.gson.Gson,先去模块的build.gradle里确认有没有加对应的依赖,版本是否兼容AGP 8.4.0。
  • 如果是自己项目里的类,检查是不是被误删、或者模块依赖没配置对(比如library模块没被app模块引用)。

2. 区分两种情况处理

情况一:真的没加依赖

直接把缺失类对应的依赖加到build.gradle(模块级)里,然后删掉之前从missing_rules.txt抄的规则,重新构建。比如缺OkHttp的类就加:

implementation 'com.squareup.okhttp3:okhttp:4.12.0'

情况二:R8误判(反射/动态加载的类)

这种情况不能只加-dontwarn,必须加-keep规则保护这些类不被R8移除混淆。比如你用反射调用com.example.MyDynamicClass,就加:

-keep class com.example.MyDynamicClass {
    public <init>();
    public void myMethod();
}

别偷懒全加*,只保留实际用到的构造方法和方法,避免包体积变大。

3. 临时关闭R8严格模式排查

AGP 8.4.0的R8严格模式更严,可能误报一些隐式依赖。可以在模块build.gradle里临时关闭,排查出问题后再改回来:

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

4. 清缓存重来

缓存搞鬼的情况不少,直接:

  • 点Android Studio顶部File -> Invalidate Caches... -> Invalidate and Restart
  • 手动删项目根目录的.gradle和模块的build文件夹,再重新构建

重要提醒

missing_rules.txt只是R8给的临时检查规避提示,不是解决方案!直接全抄进去只会掩盖真实问题,导致运行时崩给你看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:47:09