Multidex Support

【转载】Android 5.0(API 21)之前的平台Dalvik支持文件分包。
默认情况下,Dalvik仅支持apk单classes.dex。要想绕过这一限制,可使用Multidex。它会成为主dex文件的一部分,并访问其他dex文件。
Android系统安装apk时,有一个步骤是dex优化,这个工具是DexOpt。该工具会在第一次加载Dex时优化dex,生成ODex文件,即Optimised Dex(索引优化)。
但是,早起的dex有一个问题,就是把所有类方法的id检索起来,形成一个链表。这个链表是用short保存的,所以方法的数量不能超过65536个。该问题在高版本进行了修复,但我们依然要对低版本进行适配。
所以需要multidex将dex分包成多个dex文件,Android提供了multidex解决这一问题。
Android 5.0更高版本支持文件分包
Android 5.0以上使用ART运行时,支持apk加载多个dex。在安装时预编译多个classesN.dex文件,生成单个oat文件。因此如果您的minSdkVersion>=21,则不需要做multidex支持。
声明主dex文件主要的类
如果您在启动时主dex未找到任何类,就会提示java.lang.NoClassDefFoundError。
如果出现java.lang.NoClassDefFoundError,您需要在构建工具中设置multiDexKeepFile或multiDexKeepProguard,则该类会添加至主dex。
multiDexKeepFile属性
您可以指定类为形式com/example/MyClass.java,如您创建一个multidex-config.txt文件:

com/example/MyClass.java

然后您在构建工具中使用该文件:

android {
  buildTypes {
    release {
      multiDexKeepFile file 'multidex-config.txt'
    }
  }
}

请注意Gradle会读取build.gradle文件的路径,所以上面的multidex-config文件路径要和build.gradle文件同一个文件夹。

你可能感兴趣的:(Multidex Support)