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

关于dalvik.system.BaseDexClassLoader.findClass引发ClassNotFoundException崩溃的求助

偶发ClassNotFoundException:androidx.profileinstaller.ProfileInstallerInitializer 问题排查

我查阅过若干关于dalvik.system.BaseDexClassLoader.findClass的相关帖子,但它们的堆栈跟踪信息差异明显。该崩溃情况十分罕见但仍会偶发,且堆栈跟踪中未出现任何应用自身代码,因此似乎与应用代码无关。本次崩溃发生在Skyworth Metz 2K电视设备上,崩溃详情如下:

Crash details
dalvik.system.BaseDexClassLoader.findClass
java.lang.ClassNotFoundException

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.installProvider (ActivityThread.java:6445)
  at android.app.ActivityThread.installContentProviders (ActivityThread.java:5987)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5902)
  at android.app.ActivityThread.access$1100 (ActivityThread.java:200)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1656)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6718)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by y0.c: java.lang.ClassNotFoundException: androidx.profileinstaller.ProfileInstallerInitializer
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:242)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:206)
  at androidx.startup.InitializationProvider.onCreate (InitializationProvider.java:45)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1920)
  at android.content.ContentProvider.attachInfo (ContentProvider.java:1895)
  at android.app.ActivityThread.installProvider (ActivityThread.java:6440)
Caused by java.lang.ClassNotFoundException: androidx.profileinstaller.ProfileInstallerInitializer
  at java.lang.Class.classForName
  at java.lang.Class.forName (Class.java:453)
  at java.lang.Class.forName (Class.java:378)
  at androidx.startup.AppInitializer.discoverAndInitialize (AppInitializer.java:224)
Caused by java.lang.ClassNotFoundException:
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)

排查方向与解决方案

1. 确认Profile Installer依赖与混淆规则

  • 检查项目中是否引入了androidx.profileinstaller:profileinstaller依赖,确保版本与AndroidX Startup依赖兼容。若依赖缺失,在build.gradle中添加对应版本的依赖:
    implementation "androidx.profileinstaller:profileinstaller:1.3.1" // 使用适配项目的版本
    
  • 若启用了R8/ProGuard,添加规则避免类被混淆或删除:
    -keep class androidx.profileinstaller.ProfileInstallerInitializer { *; }
    -keep class androidx.profileinstaller.** { *; }
    

2. 禁用ProfileInstaller的自动初始化

如果不需要ProfileInstaller的性能分析功能,可直接禁用其自动初始化,绕过类加载步骤:
在AndroidManifest.xml中添加以下配置,移除默认的Initializer注册:

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <meta-data
        android:name="androidx.profileinstaller.ProfileInstallerInitializer"
        tools:node="remove" />
</provider>

3. 排查设备端Dex异常

由于崩溃仅发生在特定电视设备上,可能是设备Dex优化或存储问题:

  • 引导用户清除应用缓存与数据后重新安装,修复可能损坏的Dex文件。
  • 检查设备系统版本,确认是否存在已知的Dex类加载bug,建议用户升级至最新系统版本。

4. 配置MultiDex确保类加载(若启用MultiDex)

若应用开启了MultiDex,需将ProfileInstallerInitializer纳入主Dex,避免启动时无法加载:

  • 在build.gradle中配置multiDexKeepFile:
    android {
        defaultConfig {
            multiDexEnabled true
        }
        buildTypes {
            release {
                multiDexKeepFile file('multidex-config.txt')
            }
        }
    }
    
    创建multidex-config.txt文件,添加内容:
    androidx/profileinstaller/ProfileInstallerInitializer.class
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:52:54