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.** { *; }
我正在做一个项目,我们使用 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.** { *; }