文档章节

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

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

© 著作权归作者所有

共有 人打赏支持
jemlin
粉丝 0
博文 3
码字总数 1029
作品 0
厦门
Android工程师
Android Studio中代码做混淆方法

在bulid.gradle文件中: 设置如下 buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 在proguard-rule......

鹭明 ⋅ 2016/12/22 ⋅ 0

解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题

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

归来熙 ⋅ 2013/11/14 ⋅ 0

Android Studio ProGuard基础语法和打包配置

这是对Android打包混淆所需配置所做的总结. ProGuard常用语法 下面列出一些常用的语法 -libraryjars class_path 应用的依赖包,如android-support-v4 -keep [,modifier,...] class_specific...

Erichkko ⋅ 2015/11/23 ⋅ 1

android代码混淆

android代码混淆 ProGuard是一个java代码混合工具,能够压缩、优化、混淆、预先审核(preverify) java class文件。压缩是指删除没用的类、变量、方法和属性,优化是指分析优化字节码,混淆是...

neumeng ⋅ 2015/03/31 ⋅ 0

混淆代码app打包

一般自己打包的jar包需要屏蔽混淆的代码: -dontwarn com.nostra13.universalimageloader.** 这是需要防止需要被打包 -keep class com.nostra13.universalimageloader.** {*;} -keep interf...

钓伯乐 ⋅ 2014/03/13 ⋅ 0

使用Android Studio混淆打包(ProGuard基础语法和打包配置)

前言:前一段时间被领导叫去使用ProGuard对项目进行混淆,折腾了两天才弄好,在学习的过程中发现了这篇文章,对自己的帮助很大,特意摘抄下来分享给大家。 ProGuard常用语法 下面列出一些常用...

天鬼 ⋅ 2017/11/18 ⋅ 0

bulid.gradle 解析

外层的bulid.gradle文件 两处的repositories的闭包中都声明了jcenter() 这行配置。 jcenter是一个代码托管仓库,很多Androdi开源项目都会选择将代码托管到jcenter上,声明了这个配置之后,可...

Jerry_0221 ⋅ 06/12 ⋅ 0

ProGuard混淆常见错误

1、Proguard returned with error code 1. See console 更新proguard版本 android-support-v4 不进行混淆 添加缺少相应的库 2、使用gson包解析数据时,出现missing type parameter异常 在 pr...

恰同学少年 ⋅ 2015/07/08 ⋅ 0

使用Proguard混淆Gson文件

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

ilxlf ⋅ 2013/05/17 ⋅ 0

Android自带Json库使用引发的问题

在Andriod系统应用层开发通常json协议解析使用Gson、jackson当然还公司的fastjson库等,Andriod其实也自带json解析库,集成的是apache的,在一些特定的场景用自带库解析也很方便。 但是,不得...

Mr_zebra ⋅ 06/14 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL主从复制原理、半同步操作步骤及原理

1.1 企业Linux运维场景数据同步方案 1.1.1 文件级别的异机同步方案 1、scp/sftp/nc 命令可以实现远程数据同步。 2、搭建ftp/http/svn/nfs 服务器,然后在客户端上也可以把数据同步到服务器。...

xiaomin0322 ⋅ 14分钟前 ⋅ 0

Oracle10g 数据及文件迁移过程[原]

QL*Plus: Release 10.2.0.1.0 - Production on 星期三 5月 11 10:22:35 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Re......

harrypotter ⋅ 20分钟前 ⋅ 0

nginx安装

1:安装工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下载nginx安装包 wget http://nginx.org/download/nginx-1......

壹丶贰 ⋅ 23分钟前 ⋅ 0

ideaVim安装及配置

1.安装插件 File-Settings-Plugins,Browse Repositories,输入ideavim,安装。 重启后,在Tools-Vim Emulator启用。 2.快捷键设置 ideaViim键与idea快捷键有冲突,可以在Settings-Other Se...

Funcy1122 ⋅ 27分钟前 ⋅ 0

MySQL中B+Tree索引原理

B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B...

浮躁的码农 ⋅ 41分钟前 ⋅ 0

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 45分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 56分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 今天 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部