R8 删除了不应该删除的整个类

问题描述 投票:0回答:1

将 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 gradle android-r8
1个回答
0
投票

编译时错误和运行时错误是有区别的。

您看到的编译时错误是由输入中对类的引用引起的,而这些类“不是”输入的一部分。这可能是由于缺少依赖项或库,这些依赖项或库并非仅设计为 Android,并且引用了仅在 OpenJDK 中找到的类。这些编译时错误可通过 -dontwarn 指令消除。

运行时错误是运行时缺少类,通常是 R8 删除的类。这里额外的保留规则通常就是答案。

但是,如果它是“相同的缺失类”,则该类在输入中已经缺失,并且任何保留规则都无法将其恢复。如果不是完全相同的类,您可以在

https://issuetracker.google.com/issues/new?component=326788

上提交问题,参考此问题以及升级 Android 时其他更改的信息Gradle 插件从 8.3.2 到 8.7.0。

© www.soinside.com 2019 - 2024. All rights reserved.