由于某种原因,我们的一个数据类模型在构建过程中被混淆或删除,我们必须向其添加
@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
添加此规则后问题已解决:
-dontwarn java.lang.invoke.StringConcatFactory
您可能会收到红色错误/警告,如
Unresolved class name
,因为它无法找到包,但这就是 dontwarn
实际所做的,从 lint 检查中排除项目构建中不存在的类。
参考资料:
对于那些仍然面临这个问题的人:
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"
)
}
}