适配Android 13后遭遇ClassNotFoundException问题求助
Android 13适配+移除OneSignal后出现ClassNotFoundException崩溃问题
崩溃日志
BaseDexClassLoader.findClass Caused by java.lang.ClassNotFoundException Did not find class "com.abupdate.iot_libs.receiver.UpgradeReceiver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/base.apk", zip file "/data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/split_config.arm64_v8a.apk", zip file "/data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/split_config.xhdpi.apk"],nativeLibraryDirectories=[/data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/lib/arm64, /data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/base.apk!/lib/arm64-v8a, /data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/split_config.arm64_v8a.apk!/lib/arm64-v8a, /data/app/com.packagename.app-UI3cN5rd405Zw-SeQbCPTQ==/split_config.xhdpi.apk!/lib/arm64-v8a, /system/lib64]] dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:171) java.lang.ClassLoader.loadClass (ClassLoader.java:379) java.lang.ClassLoader.loadClass (ClassLoader.java:312) android.app.AppComponentFactory.instantiateReceiver (AppComponentFactory.java:84) androidx.core.app.CoreComponentFactory.instantiateReceiver (CoreComponentFactory.java:60) android.app.ActivityThread.handleReceiver (ActivityThread.java:3429) android.app.ActivityThread.access$1300 (ActivityThread.java:201) android.app.ActivityThread$H.handleMessage (ActivityThread.java:1690) android.os.Handler.dispatchMessage (Handler.java:106) android.os.Looper.loop (Looper.java:201) android.app.ActivityThread.main (ActivityThread.java:6861) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:547) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:873) ...
背景信息
- 依赖处理:已移除OneSignal依赖。
- Android版本:崩溃发生在适配Android 13之后。
- Multidex配置:已引入依赖
androidx.multidex:multidex:2.0.1,并在Gradle中设置multiDexEnabled true。
问题
移除OneSignal依赖并配置Multidex后,仍出现com.abupdate.iot_libs.receiver.UpgradeReceiver相关的ClassNotFoundException崩溃。
疑问
- 适配Android 13场景下,如何解决该
ClassNotFoundException问题? - 更新应用适配Android 13时,是否有遗漏的步骤或注意事项?
补充信息
- 崩溃上报:使用Crashlytics上报崩溃,移除OneSignal后问题仍存在。
- Gradle配置片段:
// 其他依赖... implementation 'androidx.multidex:multidex:2.0.1' // 其他配置...
解决思路
1. 定位缺失类的来源
- 执行
./gradlew 模块名:dependencies(替换为你的App模块名),搜索abupdate相关依赖,确认该类是否由其他依赖间接引入。若是,通过Gradle排除该依赖:implementation('目标依赖') { exclude group: 'com.abupdate', module: 'iot_libs' } - 检查
AndroidManifest.xml,确认是否静态注册了UpgradeReceiver,找到后删除对应的<receiver>标签(可能是依赖自动注入或手动添加的)。
2. 完善Multidex配置
- 若自定义Application未继承
MultiDexApplication,需在attachBaseContext中手动初始化Multidex(minSdk<21时必须执行):@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } - 确保Gradle中
compileSdkVersion设置为33,同时验证minSdk版本与Multidex的兼容性。
3. 补充Android 13适配要点
- 广播接收器规则:Android 13收紧了静态广播限制,若该Receiver用于应用更新,建议改用
Context.registerReceiver()动态注册,同时声明必要的权限(如POST_NOTIFICATIONS若涉及通知)。 - 依赖兼容性:检查所有第三方依赖是否适配Android 13,避免因依赖未兼容导致类加载异常。
- 清理构建缓存:执行
./gradlew clean build,清除旧的构建产物,避免缓存中的残留类干扰。
4. 排查崩溃触发场景
- 崩溃发生在
ActivityThread.handleReceiver,说明系统尝试启动该Receiver,需确认触发源:是应用内更新逻辑、系统广播还是遗留的推送相关代码?结合移除OneSignal的操作,检查是否有未清理的推送回调触发了更新广播。
内容的提问来源于stack exchange,提问作者Shashank Pednekar
相关产品推荐
相关产品推荐

