为什么Android对应用的总方法数(包括应用自身及其引用的库包含的方法数)会有64K的限制呢?在计算机科学领域内,术语千(简称 K)表示 1024(即 2^10)。由于 65536 等于 64 X 1024,因此这一限制称为“64K 引用限制”。
其实,这限制与Android手机运行apk的方式有关。Android 5.0(API 21)之前,运行时环境是Dalvik虚拟机。而在Android 5.0及之后,运行时环境改成了ART。那么我们来看看这两种情况下,如下配置MultiDex。
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'
}
Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,它本身支持从 APK 文件加载多个 DEX 文件。ART 在应用安装时执行预编译,扫描 classesN.dex
文件,并将它们编译成单个 .oat
文件,以供 Android 设备执行。因此,如果您的 minSdkVersion
为 21 或更高的值,则默认情况下会启用 MultiDex,并且不需要 MultiDex 支持库。
本文地址:https://blog.csdn.net/weixin_40763897/article/details/107183542
如对本文有疑问, 点击进行留言回复!!
unity的错误解决办法:NullReferenceException: Object reference not set to an instance of an object;tiny proje
Hadoop 之 HDFS (HDFS 数据流的 读写 流程)
听说你一读Spring源码就懵逼?我帮你把架子搭好了,你填就行!
首席架构师推荐:金融保险领域数字化转型实践--如何优雅地修改业务中台中分层应用Maven多模块的版本号?(命令导入式)
[JVM学习之路]一、初识JVM,了解其结构、模型及生命周期
网友评论