android代码混淆后gson无法解析问题
博客专区 > jemlin 的博客 > 博客详情
android代码混淆后gson无法解析问题
jemlin 发表于1年前
android代码混淆后gson无法解析问题
  • 发表于 1年前
  • 阅读 59
  • 收藏 0
  • 点赞 0
  • 评论 0

最近在自己项目中遇到一个问题,定义了多个model用于gson解析服务端返回的json格式数据。在release版本混淆了这些model导致在运行后直接崩溃,后面网上查了一些资料发现是因为model被混下了,导致gson解析无法找到对应的model里面的字段。

分析如下:

  1. -proguard-project.txt  
  2. ##---------------Begin: proguard configuration for Gson  ----------  
  3. # Gson uses generic type information stored in a class file when working with fields. Proguard  
  4. # removes such information by default, so configure it to keep all of it.  
  5. -keepattributes Signature  
  6.   
  7.   
  8. # Gson specific classes  
  9. -keep class com.google.gson.stream.** { *; }  
  10.   
  11. # Application classes that will be serialized/deserialized over Gson  
  12. -keep class com.google.gson.examples.android.model.** { *; }  
  13. #这段话的意思是说,将com.google.gson.examples.android.model这个包下面的所有类
  14. #不进行混淆。很关键!!!!其实,只要将
  15. #java bean即android客户端的需要用gson进行解析的类给注释掉,不进行混淆编译既可以。  
  16.   
  17. ##---------------End: proguard configuration for Gson  ----------  

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

共有 人打赏支持
粉丝 0
博文 3
码字总数 1029
×
jemlin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: