Android 4.4.4 java.lang.NoClassDefFoundError

版权声明:越努力,越幸运! https://blog.csdn.net/mingtiannihao0522/article/details/85247026

有时候发现当程序运行在4.4.4时候 就会闪退。同时有的时候会报 java.lang.NoClassDefFoundError

那么为什么会出现这样的问题,其实你在程序报错这个错误的时候仔细分析,你就会发现一般在你继承一些比较庞大的第三方的时候就会出现这个问题。

出现这种原因是因为Android规定方法的数量不能超过 65,536,它代表的是单个 Dalvik 字节码文件内的代码可调用的引用总数。

Android 5.0 之前版本的 Dalvik 可执行文件不支持分包

Android 5.0之前的版本使用 Dalvik 来执行应用代码。默认情况下,Dalvik 限制应用的每个 APK 只能使用单个 classes.dex 字节码文件

而Android 5.0 及更高版本的 Dalvik 可执行文件支持分包

Android 5.0及更高版本使用名为 ART 的运行时,后者原生支持从 APK 文件加载多个 DEX 文件。ART 在应用安装时执行预编译,扫描 classesN.dex 文件,并将它们编译成单个 .oat 文件,供 Android 设备执行,(从网上copy过来的)

这里有两种解决方式

1.就是你将minSdkVersion 设置为 21 或更高值

2.(1)首先在build.gradle文件中,将 multiDexEnabled 设置为 true

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 23
        multiDexEnabled true
    }
    ...
}

(2)在你重写Application中 重写attachBaseContext方法

public class MyApplication2 extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

大功告成。。

猜你喜欢

转载自blog.csdn.net/mingtiannihao0522/article/details/85247026