2012-02-14 50 views
7

如果使用proguard進行混淆,Android應用程序會崩潰。以下是堆棧跟蹤。Android Proguard - Jackson的TypeReference類中的IllegalArgumentException

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.javathis文件和TypeReference.javathis包。任何建議我應該在Proguard配置文件中使用哪個選項來解決這個問題?

+0

你有沒有找到解決方案? – 2012-08-07 20:05:05

+0

沒有。還沒。需要看看我可以跳過傑克遜。 – 500865 2012-08-13 12:22:40

回答

14

我剛剛遇到了使用Proguard和Ektorp依賴項的問題。類型引用是通用的,並且-keepattributes Signature將保留通用信息。

我實際上使用了以下內容,這解決了我的問題。

-keepattributes Signature,*Annotation*,EnclosingMethod 

Proguard Examples

「簽名」屬性是必需的JDK 5.0和更高的編譯時能夠訪問泛型類型。

+0

謝謝大衛它解決了我的問題:) – Bojan 2014-05-27 11:08:38

+0

謝謝,它也解決了我的問題:D – cn123h 2015-05-16 10:31:50

0

聽起來像ProGuard以某種方式處理泛型類型信息(傳遞類型參數)。我不知道這是否是已知的ProGuard問題;但如果其他人遇到這種情況,你可能會檢查傑克遜用戶郵件列表此外,你可以嘗試不同的傑克遜版本,雖然我不認爲類TypeReference已經改變了很多。