keepattributes Signature

以前有一个问题非常让人困扰。应用开发测试的时候没有问题,打包apk后,经常莫名其妙的崩溃。检查log,发现抛出的错误如下:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to me.relex.jsonparse.modle.ClassModle

根据log定位是使用jackson的ObjectMapper解析json时类型转换错误,只要一混淆就会崩溃…… 为了能尽快修复索性就不用ObjectMapper,改用Streaming解析。

最近想起来这个问题,趴在地上找找资料,一定是proguard哪里没有设置。终于关键性的就是下面这个

-keepattributes Signature

来自 gson proguard example的解释

Gson uses generic type information stored in a class file when working with fields. Proguard removes such information by default, so configure it to keep all of it.

写一个Demo测试一下,ObjectMapper 在解析 List<T> 时,类型转换出错。加入 -keepattributes Signature 后一切正常。

Author

Relex

Android Developer