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

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

由于某种原因,我们的一个数据类模型在构建过程中被混淆或删除,我们必须向其添加

@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())

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

我尝试了这个问题跟踪器

的解决方案

添加

-dontwarn java.lang.invoke.StringConcatFactory
但在规则文件中出现
Unresolved class name
警告/错误。我正在使用
JAVA VERSION_17
和 AGP
8.1.1

android android-gradle-plugin proguard android-r8
2个回答
5
投票

添加此规则后问题已解决:

-dontwarn java.lang.invoke.StringConcatFactory

您可能会收到红色错误/警告,如

Unresolved class name
,因为它无法找到包,但这就是
dontwarn
实际所做的,从 lint 检查中排除项目构建中不存在的类。

参考资料:

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

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


0
投票

对于那些仍然面临这个问题的人:

1- 在gradle.properties中,添加以下配置:

android.disableMinifyLocalDependenciesForLibraries=false

与 hte 文档相关(gradle > 8.4)文档链接

2- 在你的 gradle.build.kts 文件中 ->

android {
    kotlinOptions {
        jvmTarget = "11"
        freeCompilerArgs = listOf( // <---- add this line
            "-Xstring-concat=inline"
        )
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.