Android Proguard – Jackson的TypeReference类中的IllegalArgumentException

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

Caused by: java.lang.IllegalArgumentException: Internal error: TypeReference constructed without actual type information at abagb<init>(TypeReference.java:35) at acdq<init>(StdCouchDbInstance.java:22) at acdp<clinit>(StdCouchDbInstance.java:22) 

我正在使用EktorpClient库(使用couchdb), StdCouchDbInstance.java引用此文件,而TypeReference.java位于此包中。 任何build议,我应该在Proguardconfiguration文件中使用什么选项来解决这个问题?

Solutions Collecting From Web of "Android Proguard – Jackson的TypeReference类中的IllegalArgumentException"

我只是遇到了这个问题,使用Ektorp依赖的Proguard。 TypeReference是一个通用的,并且-keepattributes Signature会保留通用信息。

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

 -keepattributes Signature,*Annotation*,EnclosingMethod 

从Proguard例子 :

在“JDK 5.0”和更高版本中编译时,“Signature”属性需要能够访问genericstypes。

听起来像ProGuard是不恰当的处理genericstypes信息(传递types参数)。 我不知道这是否是一个已知的ProGuard问题; 但是如果其他人遇到这种情况,你可能会检查jackson用户邮件列表 此外,你可以尝试不同的jackson版本,虽然我不认为类TypeReference已经改变了很多。