Android 程序以及在4.4.4以上报错但是在4.4.4以上不报错

大家在做些App的时候,有没有遇见过这样一个问题,程序运行之后再4.4.4系统以上不报错,但是当程序运行在4.4.4系统一下是程序就会闪退。同时有的时候会报java.lang.VerifyError.

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

出现这种原因是因为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 或更高值
这种方法非常简单就是将在build.gradle文件中将 multiDexEnabled 设置为 true

说估计你们有点模糊,直接上代码

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

2.就是你将minSdkVersion 设置为 21以下
首先在build.gradle文件中将 multiDexEnabled 设置为 true

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

其次重写一个类继承Application然后重写attachBaseContext方法
直接上代码

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

最后别忘了在manifest文件里面使用我们自己的Application哦

这只是我踩过很多个坑中的一个,这里写出来一个是做一下记录,另一个是希望大家别在这个坑里面呆的时间过长

猜你喜欢

转载自blog.csdn.net/liao5214/article/details/76222997