什么是Android的multidex?

有很多关于multidex的post。 我经历了有时错误解决包括multiDexEnabled true在我的build.gradle的defaultConfig部分。

但是,这个function究竟是什么? 哪些是使用它的场景?

引用文档 :

Android应用程序(APK)文件包含Dalvik Executable(DEX)文件forms的可执行字节码文件,其中包含用于运行应用程序的编译代码。 Dalvik Executable规范将单个DEX文件中可引用的方法总数限制为65,536个,包括您自己代码中的Android框架方法,库方法和方法。 超越此限制要求您configuration您的应用程序生成过程以生成多个DEX文件(称为multidexconfiguration)。

所以,这个function是:它允许您复杂的应用程序进行编译。 使用它的场景是当您的应用程序由于命中64K DEX方法引用限制而无法编译时。 这显示为构build错误,如:

 Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 

这很简单

一个.dex文件可以有65,536个方法(引用),所以如果引用的数量超过了65,536,你可以使用multidex。

更多解释!

一个android应用程序被编译成一个.dex文件,然后压缩成一个.apk文件。
DVM(Dalvik虚拟机)使用.dex文件/文件来执行字节码。

什么原因导致超过65,536限制?
您所写的方法+ Android框架方法+第三方库(例如Volley,Retrofit,Facebook SDK等)方法。
我读过“某处”
App Compat 24.2.1包含16.5k方法
Google Play Services GCM 9.6.1包含16.7k个方法
所以,如果你已经创build了一个简单的具有App Compat 24.2.1的Hello World应用程序,那么你已经是1/4的方法来跨越单个dex方法的限制