Gradle Cheat Sheet (19): Multidex Support

  在Android的Java虚拟机上运行的是Dalvik字节码,而不是Java字节码。在Java编译完成后,Java字节码会被转换为Dalvik字节码,称为Dexing。在这个过程中,会生成一张包含了应用中的所有方法的表,每个方法用两个字节进行索引,也就是说,最多能有65k个方法。如果方法数量过多,将无法完成编译。

  以这里的工程为例,总共有100个类,每个类有700个方法,尝试编译将给出错误:

trouble writing output: Too many method references: 70936; max is 65536.

  对于这种情况,可以让Gradle一次生成多个dex文件,来解除65k个方法数量的限制。只需打开multiDexEnabled即可:

apply plugin: 'com.android.application'

android {
    ...

    defaultConfig {
        ...
        multiDexEnabled true
    }

}

  Android 5.0之前的版本使用Dalvik Runtime,Dalvik限制每个APK只能有一个classes.dex文件,这时就需要使用Multidex Support Library来管理额外的dex文件。Android 5.0和之后的版本使用ART,原生支持从APK中载入多个dex文件。