为方法数超过 64K 的应用启用 MultiDex
解决安卓项目编译失败问题: Cannot fit requested classes in a single dex file (# methods: 65825 > 65536)
在项目 minSdkVersion > 21 时,默认开启用MultiDex的,但是 如果您的 minSdkVersion 设为 20 或更低版本,您必须使用 MultiDex 库
添加依赖
dependencies {
val multidex_version = "2.0.1"
implementation("androidx.multidex:multidex:$multidex_version")
}
针对 MultiDex 配置应用
1.在app模块的build.gradle里添加 multiDexEnabled = true
android {
defaultConfig {
minSdk = 15
targetSdk = 28
multiDexEnabled = true
}
}
dependencies {
implementation("androidx.multidex:multidex:2.0.1")
}
2.继承 MultiDexApplication或者调用MultiDex.install(this)
class MyApplication : MultiDexApplication() {}
class MyApplication : SomeOtherApplication() {
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
}
注意:在 MultiDex.install() 完成之前,不要通过反射或 JNI 执行 MultiDex.install() 或其他任何代码。MultiDex 跟踪功能不会追踪这些调用,从而导致出现 ClassNotFoundException,或因 DEX 文件之间的类分区错误而导致验证错误。
如果应用启动时,抛出java.lang.NoClassDefFoundError异常
添加指定类到主Dex
新建文件multidex-config.pro
指定要放到主Dex里的类
-keep class com.example.** { *; } // All classes in the com.example package
getByName("release") {
...
multiDexKeepProguard = file('multidex-config.pro')
}
getByName("debug") {
...
multiDexKeepProguard = file('multidex-config.pro')
}
详情请查看官方说明 developer.android.google.cn/studio/buil…