【proguard混淆】Android Gson混淆打包

一般使用gson如下:

Gson gson = new Gson();

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

问题来了:使用了混淆编译的方式进行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.** { *; }
-keep class com.google.gson.** { *;}
#这句非常重要,主要是滤掉 com.bgb.scan.model包下的所有.class文件不进行混淆编译
-keep class com.bgb.scan.model.** {*;}

经过测试,一切正常。

你可能感兴趣的:(android,gson,ProGuard,混淆)