从0到1打造一款安卓app之4-为方法数超过64K的应用启用MultiDex

212 阅读1分钟

为方法数超过 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…