大家在做些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哦

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

更多相关文章

  1. Android读取excel文件小结(读取大数据量的excel文件)
  2. android不生成R文件
  3. Android中Notification的framework层讲解
  4. App基于html/css/js的开发
  5. XML解析和生成之--pull(android内置)
  6. Android(安卓)Launcher研究--手把手教你在Windows环境下下载Andr
  7. Android多渠道打包之Python打包
  8. android中对sd卡文件的管理
  9. Mac OSX Android源码编译-环境搭建、源码下载、源码编译、导入An

随机推荐

  1. Android原生(Native)C开发之二:framebuffe
  2. Android(安卓)Low Memory Killer
  3. android输入法02:openwnn源码解析01—输入
  4. Android[初级教程]第一篇 Button控件和Te
  5. Android(安卓)HIDL学习(2) ---- HelloWorld
  6. 在Android里完美实现基站和WIFI定位
  7. Android(安卓)工具之hierarchyviewer
  8. Android(安卓)UI 优化 使用和 标签
  9. 百度的Android招聘面试题
  10. Android(安卓)xmlns 的作用及其自定义