Android Proguard - Jackson的TypeReference类中的IllegalArgumentException

时间:2012-02-14 19:10:48

标签: android jackson proguard illegalargumentexception

如果使用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引用this文件,TypeReference.java引用this包。关于我应该在Proguard配置文件中使用哪个选项来解决这个问题的任何建议?

2 个答案:

答案 0 :(得分:14)

我刚使用Proguard遇到了Ektorp依赖性问题。 TypeReference是通用的,-keepattributes Signature将保留通用信息。

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

-keepattributes Signature,*Annotation*,EnclosingMethod

来自Proguard Examples

  

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

答案 1 :(得分:0)

听起来像ProGuard以某种方式错误处理泛型类型信息(传递Type参数)。我不知道这是否是一个已知的ProGuard问题;但是如果其他人遇到过这个问题,你可能会查看杰克逊用户的邮此外,你可以尝试不同的杰克逊版本,虽然我不认为班级TypeReference已经发生了很大变化。