R8 和 ProGuard:使用@Keep注释的数据类中缺少类错误

R8 and ProGuard: Missing class error in data class that is using @Keep annotation

提问人:Bitwise DEVS 提问时间:9/20/2023 最后编辑:Bitwise DEVS 更新时间:9/20/2023 访问量:670

问:

出于某种原因,我们的一个数据类模型在构建过程中被混淆或删除,我们不得不向其添加注释才能工作。@Keep

@Keep
data class CommonNotification(
    val title: String,
    val description: String,
    val channel: String,
    val action: String = DEFAULT_VALUE_STRING,
    val actionData: String? = DEFAULT_VALUE_STRING,
    val bigImage: String? = DEFAULT_VALUE_STRING,
    val environment: String = BuildConfig.BUILD_TYPE
)

但是运行失败并出现此错误./gradlew lint

运行 R8 时检测到缺少类。请添加缺少的类或应用在

/Users/user/Desktop/Projects/Mobile/Android/App/app/libs/AndroidCommon/build/outputs/mapping/debug/missing_rules.txt.

ERROR: R8: Missing class java.lang.invoke.StringConcatFactory (referenced from: java.lang.String com.project.android.common.data.remote.responses.notifications.CommonNotification.toString())

知道问题和解决方案是什么吗?

我尝试了这个问题跟踪器的解决方案

在规则文件中添加但获取警告/错误。我正在使用 AGP-dontwarn java.lang.invoke.StringConcatFactoryUnresolved class nameJAVA VERSION_178.1.1

安卓 android-gradle-plugin proguard android-r8

评论

0赞 Michael 9/20/2023
似乎相关:issuetracker.google.com/issues/250197571
0赞 Bitwise DEVS 9/20/2023
@Michael是的,我添加了规则,但我得到了.-dontwarn java.lang.invoke.StringConcatFactoryUnresolved class name

答:

0赞 Bitwise DEVS 9/20/2023 #1

添加此规则后,该问题已修复:

-dontwarn java.lang.invoke.StringConcatFactory

您可能会收到一个红色错误/警告,因为它无法找到包,但这就是实际的作用,从 lint 检查中排除项目构建中不存在的类。Unresolved class namedontwarn

引用:

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

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