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

Android 5以下版本使用Fabric崩溃收集遇ClassNotFoundException求助

我太懂这个坑了!Android 5.0以下的Dalvik虚拟机对多DEX的支持有局限,导致Crashlytics的初始化类没被放进主DEX里,系统启动时就找不到它了。给你一套稳的解决步骤:

解决Android 5及以下Fabric Crashlytics初始化类找不到的问题

1. 先确认启用MultiDex支持

你的项目方法数大概率已经超过65536了,必须开启MultiDex才能让Dalvik加载多个DEX文件。在模块级的build.gradle里做这些配置:

  • 在defaultConfig块中添加:
multiDexEnabled true
  • 在dependencies中引入MultiDex依赖(根据你是否用AndroidX选择):
// AndroidX版本
implementation 'androidx.multidex:multidex:2.0.1'
// 若还在用support库
// implementation 'com.android.support:multidex:1.0.3'

2. 强制把Crashlytics核心类放进主DEX

Dalvik只会优先加载主DEX里的类,所以必须把Crashlytics的初始化相关类强制打包进主DEX,有两种方式可选:

方式一:用multiDexKeepFile配置

在app/src/main目录下新建multidex-config.txt文件,写入需要放入主DEX的类全路径:

com/crashlytics/android/CrashlyticsInitProvider.class
com/crashlytics/android/Crashlytics.class
com/crashlytics/core/CrashlyticsCore.class
io/fabric/sdk/android/Fabric.class

然后在build.gradle的android块里关联这个文件:

android {
    buildTypes {
        release {
            multiDexKeepFile file('src/main/multidex-config.txt')
        }
        debug {
            // 调试模式也加上,避免调试时踩同样的坑
            multiDexKeepFile file('src/main/multidex-config.txt')
        }
    }
}

方式二:用ProGuard规则配置(更推荐)

如果你项目用了ProGuard混淆,直接在proguard-rules.pro里添加:

-keep class com.crashlytics.android.CrashlyticsInitProvider { *; }
-keep class com.crashlytics.android.** { *; }
-keep class io.fabric.sdk.android.** { *; }

然后在build.gradle里指定用这个ProGuard文件来筛选主DEX类:

android {
    buildTypes {
        release {
            multiDexKeepProguard file('proguard-rules.pro')
        }
        debug {
            multiDexKeepProguard file('proguard-rules.pro')
        }
    }
}

3. 配置Application类支持MultiDex

如果你的项目没有自定义Application类,就新建一个继承MultiDexApplication;如果已经有自定义Application,就重写attachBaseContext方法:

情况1:无自定义Application

新建MyApplication.java:

public class MyApplication extends MultiDexApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        // 如果之前没开启自动初始化,在这里手动初始化Fabric
        // Fabric.with(this, new Crashlytics());
    }
}

然后在AndroidManifest.xml的application标签里指定这个类:

<application
    android:name=".MyApplication"
    <!-- 其他属性 -->
>

情况2:已有自定义Application

修改你的Application类,添加MultiDex初始化逻辑:

public class MyApplication extends YourBaseApplication {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        // 必须在super之后调用,确保MultiDex正确初始化
        MultiDex.install(this);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        // 按需初始化Fabric
        // Fabric.with(this, new Crashlytics());
    }
}

4. 清理缓存重新构建

最后一定要执行清缓存+重构建操作,避免旧的编译产物干扰:

  • Android Studio里点击Build -> Clean Project,再点Build -> Rebuild Project
  • 或者用命令行:./gradlew clean assembleDebug(Windows用gradlew clean assembleDebug)

另外提一句:现在Fabric已经整合到Firebase Crashlytics了,如果是旧版本的Fabric依赖,建议升级到最新的Firebase版本;如果坚持用旧Fabric,确保依赖版本正确:

implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
implementation 'io.fabric.sdk.android:fabric:1.4.0'

测试的时候一定要用Android 5.0以下的真机或模拟器验证,确保问题彻底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:07:56