什么是Android MultiDex?


111

关于MultiDex的文章很多。有时,我遇到了一些错误已解决,包括multiDexEnabled truedefaultConfig我的build.gradle部分中。

但是,此功能到底是什么?有什么使用场景?

Answers:


166

引用文档

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

因此,该功能是:它允许您复杂的应用程序进行编译。使用它的情况是您的应用由于达到64K DEX方法参考限制而无法编译时。这显示为构建错误,例如:

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

2
知道这会有多大的代码库(LOC或屏幕粗略)吗?您是要在一个简单的5-6屏幕应用程序上达到此限制,还是真的很可能要达到此极限(即:10-20屏幕)
Marchy

20
@Marchy:通常,它来自添加过多的库。没有图书馆的项目很难达到这个极限。
CommonsWare

3
我有一个小型应用程序,它使用约5个Google支持库以及Fabric.io和2个或3个其他第三方库,我必须使用multi-dex。
c.dunlap

1
启用multidex有什么缺点吗?为什么不让它为默认值呢?
拉斐尔·利马

1
@RafaelLima:对于Android 5.0之前的设备,multidex的准反向移植存在安全问题。IIRC,如果您尝试使用尚未加载的DEX文件中的类,它也会导致您的应用程序出现一些问题。
CommonsWare

43

就这么简单

一个.dex文件可以有65,536个方法(引用),因此,如果引用数超过65,536,则应使用multidex。

更多说明!

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

是什么导致引用数量超过65,536个限制?
您编写的方法+ Android Framework方法+第三方库(例如Volley,Retrofit,Facebook SDK等)方法。
我已阅读“某处”
App Compat 24.2.1包含16.5k方法
Google Play Services GCM 9.6.1包含16.7k方法
因此,如果您创建了一个具有App Compat 24.2.1的简单Hello world应用程序,则您已经是1/4方式穿越单一DEX方法限制


7

什么是Android中的MultiDex?

Dex代表Dalvik Executable,它是Google的虚拟机处理器(Dalvik)用于处理Android应用程序的工具。Android的构建考虑到了小型和简单的应用程序,并且对单个Dalvik Executable的约束将代码引用的屋顶固定为65,536种方法。由于这个问题以及Dalvik机器处理代码执行的方式,因此存在一些编译和调用问题,直到Monkey Patch或MultiDex集成为止。Android Studio中的MultiDex集成使Android开发人员能够使用65,536种以上的方法来编译和执行代码库!


1

正在吸引Android开发人员的官方网站。

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
感谢你的回答。这是2015年以来的一个问题,此后发生了许多变化。
罗伯托·泰勒斯·伊瓦拉

-2

它也允许Google(和其他公司)在一段代码中应用DRM,例如Widevine,这会给大多数非开发人员带来麻烦。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.