android代码混淆后gson无法解析问题

问题

最近在自己项目中遇到一个崩溃问题,debug版本不会,release版本会!!
一开始有点蒙,还是老老实实根据操作步骤以及崩溃log,先定位导致崩溃的代码位置。原来是某个JavaBeanGson解析json格式数据后,继续把这个对象给后面的业务逻辑使用然后崩溃了。根据打印log分析json字符串是正常啊?尴尬...

于是开始google,功夫不负有心人,有人遇到类似问题提到是混淆后JavaBean类的字段名称会变成a、b、c等之类的字符串,与json字符串中的key不一致了。

ok,原来是混淆问题,那就修改proguard-rules.pro文件!

解决

来看下混淆文件proguard-rules.pro文件,修改如下:

-keep class com.google.gson.examples.models.** { *; }
-keep interface com.google.gson.examples.models.** { *; }
-keep class com.google.gson.examples.upgrade.internal.VersionInfo {*;}

改好之后,重新打一个release包测试问题解决。反编译apk包发现这些JavaBean类没有被混淆,正是我们想要的。

总结

问题主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常),因为JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。
所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。

你可能感兴趣的:(android代码混淆后gson无法解析问题)