2015-11-07 216 views
48

有很多关于multidex的文章。我经历了有时错误解决包括multiDexEnabled true在我的build.gradle defaultConfig部分。什么是android multidex?

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

回答

83

报价the documentation

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 
+1

任何想法这将是一个代码库有多大(LOC,或粗糙的屏幕)?你会在一个简单的5-6屏幕应用上达到这个极限吗?或者它真的比线路更远(即:10-20个屏幕),你可能会打到它 – Marchy

+13

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

+0

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

10

很简单,因为这

单个.DEX文件可以有65536层的方法(参考),所以如果引用的数量超过65536,你去multidex。

更多解释!

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

是什么原因导致超过65,536个限制?
你写的方法+ Android框架方法+第三方库(如Volley,Retrofit,Facebook SDK等)方法。
我已阅读“的地方”
应用程序兼容性24.2.1包含16.5k方法
谷歌播放服务GCM 9.6.1包含16.7k方法
所以,如果你已经创建了具有应用程序兼容性24.2简单的Hello World应用程序。 1,你已经1/4路跨越单一DEX方法限制

0

What is MultiDex in Android?

敏捷代表的Dalvik可执行文件,这是谷歌的虚拟机处理器(Dalvik的)用来处理Android应用程序。 Android是以小而简单的应用程序为基础构建的,对一个Dalvik Executable的约束固定在65,536个方法的代码引用的顶端。由于这个问题以及Dalvik机器处理代码执行的方式,存在一些编译和调用问题,直到Monkey Patch或集成为止。 Android Studio中的MultiDex集成允许Android开发人员使用超过65,536个方法编译和执行代码库!