使用混淆编译方式打包apk

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

 

方法一:

      Gson gson = new Gson();
      // 将json格式字符串转化为List<对象>
      Type listType = new TypeToken<ArrayList<PersonMsgMini>>(){}.getType();
      personMsgList = gson.fromJson(jsonObject.getString("list"), listType);

 

方法二:

     public class AttendanceMsgGson
{
 //字段名要跟json字符串中的key一致
 private ArrayList<AttendanceMsg> list;

 public ArrayList<AttendanceMsg> getList()
 {
  return list;
 }

 public void setList(ArrayList<AttendanceMsg> list)
 {
  this.list = list;
 }
 
}

 

Gson gson = new Gson();

AttendanceMsgGson attGson = gson.fromJson(result, AttendanceMsgGson.class);

 

下面是重点:

说明:

其中两种gson解析json字符串的方法都没有问题,问题主要是使用了混淆编译的方式进行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.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

 

//这句非常重要,主要是滤掉 com.bgb.scan.model包下的所有.class文件不进行混淆编译

-keep class com.bgb.scan.model.** {*;}

 

二、-libraryjars libs/gson-1.7.1.jar,其中libs/其实省略了项目A的根目录,

如果是通过Is Library引用的项目,、-libraryjars libs/xxx.jar是不行的,因为引用进来的项目其jar路径如下:

xxxx\bgb_ws\Util_Universal_ImageLoader\bin\util_universal_imageloader.jar,

是在Util_Universal_ImageLoader项目的bin目录下。Util_Universal_ImageLoader与A项目同一文件夹,则在A中使用过滤是:-libraryjars ../Util_Universal_ImageLoader/bin/util_universal_imageloader.jar

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值