【发布时间】:2019-04-23 01:44:48
【问题描述】:
我的应用在 pre-21 崩溃,出现 java.lang.NoClassDefFoundError app.module.SomeClass 错误。
我已经启用了 Multidex:
build.gradle:
android {
defaultConfig {
...
multiDexEnabled true
}
}
dependencies {
...
implementation "androidx.multidex:multidex:2.0.1"
}
我的应用程序类:
class App : DaggerApplication() {
...
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
在阅读了Declaring classes required in the primary DEX file 之后,我创建了multidex-config.pro 文件以将app.module.** 包含在主DEX 文件中:
-keep class app.module.** { *; }
并在 build.gradle 中注册:
android {
buildTypes {
debug {
...
multiDexKeepProguard file('multidex-config.pro')
}
}
我通过检查build/intermediates/legacy_multidex_main_dex_list/debug/mainDexList.txt 并分析调试apk 确认了这一点(检查classes.dex 是否包含app.module.SomeClass)。
但我仍然收到java.lang.NoClassDefFoundError app.module.SomeClass 错误。
我还尝试清理缓存,在不同的机器上运行(cli build 仅没有 Android Studio),禁用即时运行,指定 javaMaxHeapSize,只是扩展 MultiDexApplication 等等。
接下来我可以尝试什么?
【问题讨论】:
-
使用这个 -keep public class app.module.** { *; }
-
@MahabubKarim 我试过了,没有效果。
-
为什么
multiDexKeepProguard file('multidex-config.pro')在调试配置中? -
@ArchieG.Quiñones,因为该应用在调试和发布版本中都崩溃了。
-
如果我错了,请纠正我,但是您检查在 multidex 之后是否存在
app.module.SomeClass并且它在那里?这听起来不像一个produard问题。您是否尝试过删除 proguard 优化?
标签: android kotlin android-multidex