将 Gradle 从 8.4 迁移到 8.9 并将 Gradle 插件从 8.3.2 迁移到 8.7.0 后,R8 在构建签名版本 APK 时失败。
Missing class com.my.package.MyClass$Companion (referenced from: void common.my.package.workers.SyncWorker.<init>(android.content.Context, androidx.work.WorkerParameters, com.my.package.Dao))
由于缺少更多类而失败。我确实将
-keep class com.my.package.** { *; }
添加到应用程序模块(在 proguard-rules.txt 中)和其他模块(在consumer-rules.txt 中),但没有任何效果。我还在我的 gradle.properties 中添加了 android.enableR8.fullMode=false
但它没有改变任何东西。 Android Studio 确实生成了带有一堆 -dontwarn
的missing-rules.txt,这使得构建通过,但应用程序立即崩溃,并出现相同的缺失类错误。
知道如何解决这个问题吗?我看到文档说
编译时错误和运行时错误是有区别的。
您看到的编译时错误是由输入中对类的引用引起的,而这些类“不是”输入的一部分。这可能是由于缺少依赖项或库,这些依赖项或库并非仅设计为 Android,并且引用了仅在 OpenJDK 中找到的类。这些编译时错误可通过 -dontwarn
指令消除。
但是,如果它是“相同的缺失类”,则该类在输入中已经缺失,并且任何保留规则都无法将其恢复。如果不是完全相同的类,您可以在
https://issuetracker.google.com/issues/new?component=326788