gpt4 book ai didi

android - multidex - 启用 multidex 的 NoClassDefFoundError

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:39 24 4
gpt4 key购买 nike

我的应用程序在 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 文件以在主 DEX 文件中包含 app.module.**:

-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 错误。

我还尝试了清理缓存、在不同的机器上运行(仅在没有 Android Studio 的情况下使用 cli 构建)、禁用即时运行、指定 javaMaxHeapSize、仅扩展 MultiDexApplication 等等。

接下来我可以尝试什么?

最佳答案

我们在这里对此进行了更深入的研究:

https://issuetracker.google.com/issues/131100011

在 21 之前的设备上的某些 Dalvik VM 中存在一个不幸的错误,其中包私有(private)方法有时会被另一个包中的公共(public)方法错误地覆盖。如果包的私有(private)方法是最终的,那将导致以下形式的错误:

E/dalvikvm:方法 Lcom/mycompany/MyViewModel;.clear 覆盖最终的 Landroidx/lifecycle/ViewModel;.clear

看起来这可能是您在这里遇到的问题。不幸的是,该特定问题的唯一解决方法是将您的“清除”方法重命名为其他名称,这样您就不会遇到这个不幸的 VM 错误。

关于android - multidex - 启用 multidex 的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com