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

转载 https://www.jianshu.com/p/76ee7779ce51

 

问题

最近在自己项目中遇到一个崩溃问题,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(实体类)的包不进行混淆编译。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值