9

假设我有这门课

data class Person(val name: String?)

当我 proguard 并运行应用程序时,我收到以下异常

kotlin.reflect.jvm.internal.KotlinReflectionInternalError: No accessors or field is found for property val com.whatever.packagee.Person.name: kotlin.String?

我还发现这个反射代码库引发了这个问题。任何帮助,将不胜感激

4

2 回答 2

2

请确保不要使用太宽泛的 -keep 选项,这将阻止 ProGuard 正确优化和缩小代码。

保留您希望序列化的类的字段很重要。根据您看到的异常,我希望类似于以下选项的 -keep 选项可以解决问题;

-keep class com.whatever.packagee.Person {
    <fields>;
}

您可以通过 ProGuard Playground 试验这些 -keep 选项,这对于查看哪些代码部分受您的 -keep 规则影响非常有用。通过这种方式,您可以检查是否处理了所有序列化案例。我为这种特殊情况创建了一个游乐场:游乐场链接

于 2021-02-02T13:56:52.310 回答
1

这为我解决了这个问题。

将以下内容添加到 proguard 规则

-保留类 kotlin.reflect.jvm.internal.**

-keep class kotlin.Metadata { *; }

于 2021-01-27T18:20:50.520 回答