0
点赞
收藏
分享

微信扫一扫

Android为方法数超过 64K 的应用启用 MultiDex


为什么Android对应用的总方法数(包括应用自身及其引用的库包含的方法数)会有64K的限制呢?在计算机科学领域内,术语千(简称 K)表示 1024(即 2^10)。由于 65536 等于 64 X 1024,因此这一限制称为“64K 引用限制”。

其实,这限制与Android手机运行apk的方式有关。Android 5.0(API 21)之前,运行时环境是Dalvik虚拟机。而在Android 5.0及之后,运行时环境改成了ART。那么我们来看看这两种情况下,如下配置MultiDex。

1.Android 5.0之前

Android 5.0之前应用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,这些文件包含用来运行应用的已编译代码。Dalvik Executable 规范将可在单个 DEX 文件内引用的方法总数限制为 65536,其中包括 Android 框架方法、库方法以及应用自己的代码中的方法。默认情况下,Dalvik 将应用限制为每个 APK 只能使用一个 ​​classes.dex​​​ 字节码文件。所以要突破这个限制,修改模块级 ​​build.gradle​​ 文件以启用 MultiDex :

如果应用的 ​​minSdkVersion​​​ 设为 20 或更低的值,则必须使用MultiDex 支持库。如果 ​​minSdkVersion​​ 设为 21 或更高的值,则默认情况下会启用 MultiDex,并且不需要 MultiDex 支持库。

android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}

dependencies {
implementation 'com.android.support:multidex:1.0.3'
}

注意 :
在项目中添加 MultiDex 支持库时,是用AndroidX,则使用以下依赖:

dependencies {
def multidex_version = "2.0.1"
implementation 'androidx.multidex:multidex:$multidex_version'
}

2.Android 5.0及之后

Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本身支持从 APK 文件加载多个 DEX 文件。ART 在应用安装时执行预编译,扫描 ​​classesN.dex​​​ 文件,并将它们编译成单个 ​​.oat​​​ 文件,以供 Android 设备执行。因此,如果您的 ​​minSdkVersion​​ 为 21 或更高的值,则默认情况下会启用 MultiDex,并且不需要 MultiDex 支持库。


举报

相关推荐

0 条评论