7

如果使用 proguard 进行混淆,Android 应用程序会崩溃。下面是堆栈跟踪。

Caused by: java.lang.IllegalArgumentException: Internal error: 
  TypeReference constructed without actual type information
    at a.b.a.g.b.<init>(TypeReference.java:35)
    at a.c.d.q.<init>(StdCouchDbInstance.java:22)
    at a.c.d.p.<clinit>(StdCouchDbInstance.java:22)

我正在使用EktorpClient库(与 couchdb 一起工作)并StdCouchDbInstance.java引用文件并TypeReference.java位于包中。关于我应该在 Proguard 配置文件中使用什么选项来克服这个问题的任何建议?

4

2 回答 2

14

我刚刚使用带有 Ektorp 依赖项的 Proguard 遇到了这个问题。TypeReference 是泛型的,-keepattributes Signature将保留泛型信息。

我实际上使用了以下内容,这解决了我的问题。

-keepattributes Signature,*Annotation*,EnclosingMethod

来自Proguard 示例

在 JDK 5.0 及更高版本中编译时,需要“Signature”属性才能访问泛型类型。

于 2013-06-07T21:16:59.223 回答
0

听起来 ProGuard 以某种方式错误地处理了泛型类型信息(传递类型参数)。我不知道这是否是一个已知的 ProGuard 问题;但如果其他人遇到这种情况,您可以查看 Jackson 用户邮件列表。此外,您可以尝试不同的 Jackson 版本,尽管我认为课程没有太大TypeReference变化。

于 2012-02-15T17:17:51.290 回答