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

适配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崩溃。

疑问

  1. 适配Android 13场景下,如何解决该ClassNotFoundException问题?
  2. 更新应用适配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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:14:56