解决 Android 5.0以下出现 java.lang.NoClassDefFoundError

来源:互联网 发布:淘宝店铺0信誉的多少钱 编辑:程序博客网 时间:2024/05/20 02:29


Android 的坑记录,找到了解决方法


问题:Android 项目在5.0以上系统没有问题,在5.0以下系统闪退

出现 java.lang.NoClassDefFoundError


这个错误是Android应用的方法总数限制造成的。Android平台的Java虚拟机Dalvik在执行DEX格式的Java应用程序时,使用原生类型short来索引DEX文件中的方法。这意味着单个DEX文件可被引用的方法总数被限制为65536。通常APK包含一个classes.dex文件,因此Android应用的方法总数不能超过这个数量,这包括Android框架、类库和你自己开发的代码。而Android 5.0和更高版本使用名为ART的运行时,它原生支持从APK文件加载多个DEX文件。在应用安装时,它会执行预编译,扫描classes(..N).dex文件然后将其编译成单个.oat文件用于执行. 通熟的讲,就是分包。



一、配置build.gradle (app)

android {

        compileSdkVersion 22

         buildToolsVersion "23.3.0"

defaultConfig {

          minSdkVersion 15

          targetSdkVersion 22

          // Enabling multidex support. 开关

              multiDexEnabled true

}


       // 添加依赖

          compile 'com.android.support:multidex:1.0.0'




二、使用自定义的Application继承MultiDexApplication这个类,或者重写Application的方法attachBaseContext(),并调用MultiDex.install();

@Override

protected voidattachBaseContext(Context base) {

super.attachBaseContext(base);

MultiDex.install(base);

}



作者:泡在简书的日子_Knight
链接:http://www.jianshu.com/p/8b4f711da0bb
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

阅读全文
0 0