代码混淆 - Gson解析bug
2016-04-11 14:48
218 查看
项目中使用Gson解析json数据,未做混淆处理时,网络访问及解析json数据正常。作代码混淆时,依据官方demo,配置Gson的混淆。混淆后,网络访问出现了问题,数据不能正常加载。Debug跟踪发现,网络访问获取数据正常,在Gson解析时出现了问题。很撸google发现了问题所在。
<span style="font-size:14px;">
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
<em><strong><span style="color:#FF6666;">-keep class com.google.gson.examples.android.model.** { *; }</span></strong></em>
##---------------End: proguard configuration for Gson ----------</span>
请注意倒数第二行,红色特别标注的那一行,这是google官方的proguard的文档,,class 后方到**签名的是google的包名,而实际上应改成所有应用Gson的java bean定义的目录,如此bug解除了.
<span style="font-size:14px;">## ----------------------------------
## ########## Gson混淆 ##########
## ----------------------------------
-libraryjars libs/gson-2.2.4.jar
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.**{*;}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
<em><strong><span style="color:#CC0000;"># 需</span></strong></em></span><pre name="code" class="java"><em><strong><span style="font-size:14px;color:#CC0000;"># XXX.XX.XXX</span></strong></em># 改成所有Java bean 存放的包名-keep class XXX.XX.XXX.** { *; }-keep class org.json.** {*;}
Bug记录在案,以备后查!
<span style="font-size:14px;">
##---------------Begin: proguard configuration for Gson ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
<em><strong><span style="color:#FF6666;">-keep class com.google.gson.examples.android.model.** { *; }</span></strong></em>
##---------------End: proguard configuration for Gson ----------</span>
请注意倒数第二行,红色特别标注的那一行,这是google官方的proguard的文档,,class 后方到**签名的是google的包名,而实际上应改成所有应用Gson的java bean定义的目录,如此bug解除了.
<span style="font-size:14px;">## ----------------------------------
## ########## Gson混淆 ##########
## ----------------------------------
-libraryjars libs/gson-2.2.4.jar
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.google.**{*;}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
<em><strong><span style="color:#CC0000;"># 需</span></strong></em></span><pre name="code" class="java"><em><strong><span style="font-size:14px;color:#CC0000;"># XXX.XX.XXX</span></strong></em># 改成所有Java bean 存放的包名-keep class XXX.XX.XXX.** { *; }-keep class org.json.** {*;}
Bug记录在案,以备后查!
相关文章推荐
- java在线支付---13.java在线支付所有源码
- C++ std::pair
- java在线支付---13.java在线支付所有源码
- Asp.net使用SignalR实现聊天室的功能
- JAVA 多线程随笔 (三) 多线程用到的并发容器 (ConcurrentHashMap,CopyOnWriteArrayList, CopyOnWriteArraySet)
- pat1002
- 作业4:结对编程项目四则运算
- github添加远程仓库报错:fatal: remote origin already exists.
- [C++日常小题] 三角螺旋数组
- 将一个数组编程0,1序列
- /data/src/dragon/bidder_mod//src/proto_adapters/dragon_wax_adapter.h:11:对‘vtable for DragonWaxAdapter’未定义的引用
- 从零开始学github-1、github历史由来
- C++ 栈的应用
- Eclipse+Struts2+Hibernate4+Spring4的整合
- java 关键字 volatile初识
- java 多线程
- JAXB将XML序列化为对象与将对象序列化为XML(日常记录)
- JSTL(c标签)与Struts2(s标签)标签的常用功能对比
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
- asp.net 获取汉字字符串的拼音首字母,含多音字