“multiDexEnabled true”是啥意思?

Posted

技术标签:

【中文标题】“multiDexEnabled true”是啥意思?【英文标题】:What does "multiDexEnabled true" mean?“multiDexEnabled true”是什么意思? 【发布时间】:2016-08-19 18:12:35 【问题描述】:

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

【问题讨论】:

Android support multidex library implementation的可能重复 【参考方案1】:

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

您应该阅读有关 Building Apps with Over 64K Methods

的官方指南

【讨论】:

为什么默认不启用? @fobbymaster 看看这里***.com/questions/6226290/… 它是错误的一个原因是这个错误:) ***.com/a/29458974/1397821【参考方案2】:

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

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

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

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

如何启用多索引支持

这取决于你的应用的 minSdkVersion

如果 minSdkVersion >= 21 那么你可以通过编写 multidexEnabled = true 来启用它 如果 minSdkVersion Multidex Compatibily library。 查看更多关于enabling multidex support

multiDex的优势

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

关于 .dex 文件的更多信息

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

【讨论】:

每个.dex 仍然有 64k 的限制 - 但顾名思义,它是多 dex(多个 dex 文件)。 建一个方法超过64k的应用有什么问题【参考方案3】:

它允许您使用超过 64k 的方法构建应用程序。更多信息请看这里http://developer.android.com/intl/es/tools/building/multidex.html

【讨论】:

以上是关于“multiDexEnabled true”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

the hash for the file is not present in the specified catalog file,是啥意

Android 修改multiDexEnabled true后友盟显示java.lang.IncompatibleClassChangeError的一种解决方案

java+p+=+new+JPanel(new+GridLayout(5,3,0,15));啥意?

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表啥意

带式输送机td75型,矩形头尾架,b1000mm,v=1.6m/h,q=500t/h,l=18.5m,h=1.95m,啥意

重新捡起flask