解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
2016-06-07 19:14
1201 查看
使用gson解析服务器端接受的json字符串,然后用数据线连接手机和电脑,在eclipse里直接run as application 安装app 。这种情景下解析json数据是没有问题的。
然而我用混淆机制保护app,然后export app后解析json数据就抛异常,app崩溃。
最后查找log,才发现是混淆机制打包app时没有对gson jar进行处理。
解决办法:
1、 是不要混淆Google Gson jar包中的类
2、 实现 实体类中所有的属性名称也不能被混淆
原因主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常),因为客户端代码中的
JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编
译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。经过测试,一切正常。
在proguard.cfg文件中添加:
然而我用混淆机制保护app,然后export app后解析json数据就抛异常,app崩溃。
最后查找log,才发现是混淆机制打包app时没有对gson jar进行处理。
解决办法:
1、 是不要混淆Google Gson jar包中的类
2、 实现 实体类中所有的属性名称也不能被混淆
原因主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常),因为客户端代码中的
JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编
译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。经过测试,一切正常。
在proguard.cfg文件中添加:
# removes such information by default, so configure it to keep all of it. -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.** { *; } # Application classes that will be serialized/deserialized over Gson #-keep class com.google.gson.examples.android.model.** { *; } -keep class XXXX.domain.** {*;} #这句非常重要,主要是滤掉XXXX.entity包下的所有.class文件不进行混淆编译 #不要混淆xUtils中的注解类型,添加混淆配置: -keep class * extends java.lang.annotation.Annotation { *; }
相关文章推荐
- listview中EditText,焦点问题
- Android Studio导入Vitamio多媒体开发框架 1
- Android 布局之TableLayout
- Android 加载 SO 库 UnsatisfiedLinkError 错误的原因及解决方案
- 如何分析、定位Android Native Crash
- Android 消息机制学习
- Android布局中实现圆角边框
- 67.Android中的数据存储总结
- Android事件分发机制完全解析(终极版二)
- Android 内存溢出(OOM)解决方案
- Android 水波纹点击效果(Ripple Effect)
- Android的SurfaceView测试代码
- Android内核解读-应用的安装过程
- android bitmap的放大缩小
- android5.0 按键调节音量详解
- Android 编程下 shape 绘制图形
- Android Design Support Library(一):FloatingActionButton、TextInputLayout、TextInputEditText简单用法
- 搞了将近一个月的AS400,现在又转回Android~
- [android]中getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用,getfilesdir
- Android Arm Inline Hook