为 dataClass 指定的未知类 - ProGuard

问题描述

我需要一些帮助,我已经激活了代码混淆的 proguard,但是当我启动应用程序时,崩溃并 logcat 打印:

java.lang.RuntimeException: Unable to create application eu.reply.lea.mobile.core.showcase.ShowcaseApplication: java.lang.IllegalArgumentException: UnkNown class specified for dataClass: eu.reply.lea.mobile.core.oldies.entity.User

...

Caused by: java.lang.IllegalArgumentException: UnkNown class specified for dataClass: eu.reply.lea.mobile.core.oldies.entity.User

在 proguard 文件中,我添加了这一行,但没有任何改变。

-keepclassmembernames class eu.reply.lea.mobile.core.oldies.entity.User {
    public *;
}

-keepclassmembernames class eu.reply.lea.mobile.core.showcase.ShowcaseApplication {
    public *;
}

尝试在用户添加 @keep 和 @keepnames 注释,但没有任何改变。

我该如何解决这个问题?

谢谢大家!

解决方法

出现这些错误的原因可能有两个:

  1. 这个类因为缩小而被移除
  2. 这个类依赖反射

我建议将以下规则添加到您的 proguard 配置文件中:

-keep class eu.reply.lea.mobile.core.oldies.entity.User

可以在 here 中找到一个有用的工具,您可以用来检查在定义此保持规则时代码的哪些部分会受到影响。