什么是Android MultiDex?

Rob*_*rra 96 android android-multidex

有很多关于MultiDex的帖子.我有时遇到过错误,包括multiDexEnabled truedefaultConfig我的build.gradle部分.

但是,这个功能到底是什么?使用它的场景是什么?

Com*_*are 146

引用文档:

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

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

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
Run Code Online (Sandbox Code Playgroud)

  • @Marchy:通常,它来自添加太多库.无库项目难以达到此限制. (19认同)
  • 我有一个小应用程序,使用大约5个谷歌支持库以及Fabric.io和2或3个其他第三方库,我必须使用multi-dex. (3认同)
  • @RafaelLima:Android 5.0 之前设备的 multidex 准反向移植存在安全问题。IIRC,如果您尝试使用尚未加载的 DEX 文件中的类,它也会导致您的应用出现一些问题。 (3认同)
  • 知道这会有多大的代码库(LOC或屏幕粗略)吗?您是要在简单的5到6个屏幕的应用程序上达到此限制吗,还是真的很远(例如10到20个屏幕)呢? (2认同)

Roh*_*ngh 35

就这么简单

单个.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服务GCM 9.6.1包含16.7k方法
因此,如果您创建了一个具有App Compat 24.2.1的简单Hello world应用程序,那么您已经是1/4方式穿越单一DEX方法限制


Mas*_*sum 7

来自 Android 开发者官方网站。

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Run Code Online (Sandbox Code Playgroud)

  • 感谢你的回答。这是2015年的问题,自那以后很多事情都发生了变化。 (2认同)