如果使用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配置文件中使用哪个选项来解决这个问题的任何建议?
答案 0 :(得分:14)
我刚使用Proguard遇到了Ektorp依赖性问题。 TypeReference是通用的,-keepattributes Signature
将保留通用信息。
我实际上使用了以下内容,这解决了我的问题。
-keepattributes Signature,*Annotation*,EnclosingMethod
在JDK 5.0及更高版本中进行编译时,需要“Signature”属性才能访问泛型类型。
答案 1 :(得分:0)
听起来像ProGuard以某种方式错误处理泛型类型信息(传递Type参数)。我不知道这是否是一个已知的ProGuard问题;但是如果其他人遇到过这个问题,你可能会查看杰克逊用户的邮此外,你可以尝试不同的杰克逊版本,虽然我不认为班级TypeReference
已经发生了很大变化。