文档章节

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

jemlin
 jemlin
发布于 2016/12/06 09:58
字数 423
阅读 85
收藏 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(实体类)的包不进行混淆编译。

© 著作权归作者所有

共有 人打赏支持
jemlin
粉丝 0
博文 3
码字总数 1029
作品 0
厦门
Android工程师
解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题

解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题 方法一: Gson gson = new Gson(); // 将json格式字符串转化为List<对象> Type listType = new TypeToken<ArrayLi...

归来熙
2013/11/14
0
0
使用Proguard混淆Gson文件

在Android app开发的时候,我们会选择Proguard来混淆我们的代码。如果app中使用了Gson来解析json文件,那么下面这个问题你狠可能会碰到: 如果json文件对应的java bean中包含List成员: publ...

ilxlf
2013/05/17
0
0
Android studio 使用心得(五)---代码混淆和破解apk

版权声明:本文出自veidy的博客,转载必须注明出处 转载请注明出处:http://my.oschina.net/aibenben/blog/371889 这篇文章等是跟大家分享一在Android studio 进行代码混淆配置。之前大家在e...

veidy
2015/01/26
0
4
Json解析速度比较-Android API、Gson、Fastjson

IOS现成的API里的json解析速度非常快,这里就不说了,今天对比一下Android里面json的解析库。 首先第一个是Android API里面自带的json解析,其次是谷歌提供的Gson解析库(开源),其次是在网...

未来程序员
06/29
0
0
使用Android API最佳实践

本文由 伯乐在线 - imesong 翻译自 meetme。欢迎加入Android小组。转载请参见文章末尾处的要求。 写在前面 现在,Android应用程序中集成第三方API已十分流行。应用程序都有自己的网络操作和缓...

mingxun
2014/04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring只

一、IOC(Inversion of Control)或者依赖注入(Dependency Injection) 1、底层实现原理:反射 2、三大核心接口: BeanFactory:简单容器系列,只是实现了容器最基本的功能。 ApplicationC...

狠一点
1分钟前
0
0
缓存架构SpringBoot集成Curator实现zookeeper分布式锁

一、分布式锁简介 1、什么是锁 在单机环境下,当存在多个线程可以同时改变某个共享变量时,就需要同步来实现该功能,使其线程安全。 而同步就是通过锁来实现的。锁保证了同一时刻只有一个线程...

架构师springboot
3分钟前
0
0
11《Java核心技术》之Java提供了哪些IO方式? NIO如何实现多路复用?

一、提出问题 IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某些方面仍有不足,但已经...

飞鱼说编程
10分钟前
0
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

linuxprobe16
10分钟前
0
0
55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

1、Mysql用户管理; 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限; 语法: grant all on *.* to 'user'@'127.0.0.1' identified by 'password'; g...

芬野de博客
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部