Mutidex 和 Kotlin

Mutidex and Kotlin

我正在做一个项目,我们使用 multidex 来构建我们的应用程序。我开始在我们的构建中看到很多这样的错误:

java.lang.NoClassDefFoundError: kotlin.reflect.jvm.internal.pcollections.MapEntry

许多 类 与 kotlin.reflect 相关的开始在构建中找不到。它只发生在 API 19 及以下。

有谁知道可能导致此问题的原因以及如何解决此问题?

https://developer.android.com/studio/build/multidex.html中所述

如果你这样做 multiDexEnabled true

那么您还必须提供一个自定义应用程序 class extends MultiDexApplication

或者在attachBaseContext()方法中调用MultiDex.install(this)

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="com.acme.MyApplication" >

尝试使用 multiDexKeepFile api

android {
    buildTypes {
        debug {
            ...
            multiDexEnabled true
            multiDexKeepFile file('multidex_keep_file.txt')
        }
    }
}

其中 multidex_keep_file.txt 是每行单个 class 的文件,需要显式添加到主 dex

 kotlin/reflect/MyClass.class

您也可以使用multiDexKeepProguard来保留整个包裹

-keep class kotlin.reflect.** { *; }