方法数量太多引起的打包故障

  • 在Android中一个Dex文件最多存储65536个方法,当方法数量突破65536时,打包时就会抛出异常。
  • 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex。打包时,把一个应用分成多个dex,例:classes.dex、classes2.dex、classes3.dex…,加载的时候把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制。
  • Andorid 5.0之后,ART虚拟机天然支持MultiDex。
  • Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载。

一.minSdkVersion 为 21 或更高值

设置为multiDexEnabled true

android {
    defaultConfig {
        multiDexEnabled true
    }

二.minSdkVersion 为 20 或更低值

使用 Dalvik 可执行文件分包支持库

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

在Application中添加MultiDex.install(this);

// 继承 MultiDexApplication
public class MyApplication extends MultiDexApplication { ... }


// 或者 在Application中添加 MultiDex.install(this);
public class MyApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

注意:

  1. SDK版本,如果已经支持了multidex,而又把android-support-multidex.jar放在了项目的libs文件下,就会报错。
  2. Android的Gradle插件在Android Build Tool 21.1开始支持使用multidex。

扩展:
Android的类加载机制

参考:
https://blog.csdn.net/xiaxl/article/details/83089944
https://www.cnblogs.com/tonny-li/p/7839306.html
https://www.cnblogs.com/chenxibobo/p/6076459.html

你可能感兴趣的:(方法数量太多引起的打包故障)