MultiDex介绍与使用
MultiDex
Class文件与Dex文件
Dex(Dalvik-executable) class文件处理后的产物,专门为安卓上的虚拟机设计的一种压缩格式
in JAVA: *.java *.kt => *.class => JVM
in Android: *.java *.kt => *.class =>(去冗余) *.dex => Dalvik VM or ART VM
使用MultiDex的原由
当 Android 应用程序包含太多的方法数时,会出现 "方法数超过 65536" 的编译错误。这是由于 Android 操作系统对单个 Dex 文件(Dalvik Executable)的方法数有限制所致。为了解决这个问题,Android 提供了 Multidex 支持。
如何使用
- Android 5.0及更高版本
//in Build.gradle
android {
defaultConfig {
...
minSdkVersion 21// Android 5.0
multiDexEnabled true// 启用MultiDex,Android 5.0及更高版本默认启用,实际无需配置
}
}
- Android 5.0之前版本
//in Build.gradle
android {
defaultConfig {
...
minSdkVersion 14// Android 4.0
multiDexEnabled true// 启用MultiDex
}
}
dependencies {
def multidex_version = "2.0.1"
implementation "androidx.multidex:multidex:$multidex_version"
}
如果没有自定义Application
<!-- in AndroidManifest.xml -->
<application
android:name="androidx.multidex.MultiDexApplication" >
...
</application>
如果自定义了Application
// in your custom Application
public class MyApplication extends MultiDexApplication { ... }
如果您替换 Application 类,但无法更改基类,可以这么做以开启MultiDex
// in your custom Application
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}