69

Android gradle 中的“multiDexEnabled true”是什么意思。我们为什么要使用这个?如果启用有什么效果?

4

3 回答 3

67

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

您应该阅读有关使用超过 64K 方法构建应用程序的官方指南

于 2016-04-26T05:40:18.550 回答
37

默认情况下,Android 应用程序支持 SingleDex,这将您的应用程序限制为只有 65536 个方法(参考)。所以 multidexEnabled = true 仅仅意味着现在你可以在你的应用程序中编写超过 65536 个方法(引用)。

但是我永远不会写65536个方法!

当我们说方法的数量时,它的意思是

您编写的方法 + Android 框架方法 + 第三方库(例如 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 应用程序,那么您的应用程序已经有16.7k方法。

如何启用多索引支持

这取决于您的应用程序的 minSdkVersion

如果 minSdkVersion >= 21,那么您可以通过编写 multidexEnabled = true
如果 minSdkVersion <21 来启用它,那么您必须在您的 gradle 中包含Multidex Compatibily 库
查看有关启用多索引支持的更多信息

multiDex的优势

multidex 允许您的应用程序拥有更多的第三方库。

更多关于 .dex 文件

Android 应用程序被编译成一个 .dex 文件/文件,这些文件又被压缩成一个 .apk 文件。.dex 文件具有 Dalvik 虚拟机 (DVM) 使用的字节码。
你可以阅读更多关于.dex 和 DVM

于 2017-10-26T05:43:40.990 回答
2

它允许您使用超过 64k 的方法构建应用程序。有关更多信息,请参见此处http://developer.android.com/intl/es/tools/building/multidex.html

于 2016-04-26T05:38:09.223 回答