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

Marshmallow正常运行的App在KitKat上抛出ClassNotFoundException求助

哈哈,这个问题我太熟了!之前帮好几个同事排查过类似的情况——你的App在Marshmallow能正常跑,到KitKat就炸java.lang.ClassNotFoundException,结合你给的配置来看,百分百是MultiDex在低版本系统上的配置没做全,咱们一步步来解决:

核心原因先理清楚

Android 5.0(API 21)及以上系统用的是ART虚拟机,原生支持从APK的多个dex文件加载类;而KitKat(API 19)这类老系统用的是Dalvik虚拟机,默认只能加载主dex文件(classes.dex)。你已经在Gradle里开了multiDexEnabled true来解决方法数超65536的问题,但低版本系统需要额外的初始化步骤,才能识别那些拆分出来的dex文件,不然就会找不到类。


具体修复步骤

1. 补全MultiDex的初始化配置

这是最关键的一步,有两种方式可选:

方式一:让自定义Application继承MultiDexApplication

如果你有自己的Application类,直接修改继承关系就行:

public class MyApplication extends MultiDexApplication {
    // 你原来的App逻辑保持不变
}

然后在清单文件里指定这个Application类:

<application
    android:name=".MyApplication"
    <!-- 其他原有属性不动 -->
    >
    <!-- ... 你的Activity配置等内容 -->
</application>

方式二:手动安装MultiDex(如果无法继承MultiDexApplication)

要是你的Application已经继承了第三方SDK的类,没法改继承关系,就在attachBaseContext方法里手动初始化MultiDex:

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}

2. 清理重复依赖

看你Gradle依赖里,recyclerview-v7被重复引入了两次,版本还不一样:

compile 'com.android.support:recyclerview-v7:24.2.0'
compile 'com.android.support:recyclerview-v7:24.1.0'

重复依赖很容易导致类加载冲突,低版本系统对这种冲突的容忍度更低,赶紧删掉其中一个,保持版本统一。

3. 清理并重建项目

改完配置别直接跑,先做这几步:

  • 点击Android Studio顶部菜单的Build > Clean Project
  • 再点击Build > Rebuild Project
  • 卸载设备上的旧版本App,重新安装

(缓存有时候会搞事情,清干净再重装能避免很多奇怪的问题)

4. 后续开混淆的注意事项(可选)

你现在minifyEnabled false,暂时不用管,但以后如果开启代码混淆,要在proguard-rules.pro里加两行规则,防止MultiDex和启动页被混淆:

-keep class android.support.multidex.** { *; }
-keep class com.devbhoomimedia.maangal.SplashActivity { *; }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:40