升级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
相关产品推荐
相关产品推荐

