使用gson导致不能混淆的解决办法
2014-01-09 08:59
302 查看
由于使用了gson解析json字符串生成对象,导致混淆后的jar包不能正确使用。经过上网查阅资料,找到了正确的混淆方式。
原理:解压开混淆后的jar后发现,使用gson.from或者其他方法生成对象时,由于找不到正确的对应类,所以报错了,
我们只要把实现Serialized接口的类不混淆就可以了(因为gson转化过的类必须实现这个接口)。代码如下:
-keep class com.google.** {
<fields>;
<methods>;
}
-keepclassmembers class * extends 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();
}
# Gson specific classes
-keep class sun.misc.Unsafe {
<fields>;
<methods>;
}
# -keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.myapp.po.** {
<fields>;
<methods>;
}
红色部分替换为自己的po包,也就是实现了Serialized接口的类所在的包。代表这些类不进行混淆。
关于android项目混淆打包注意事项,下面的文章总结也比较全面。
http://my.eoe.cn/smile_it/archive/3820.html
原理:解压开混淆后的jar后发现,使用gson.from或者其他方法生成对象时,由于找不到正确的对应类,所以报错了,
我们只要把实现Serialized接口的类不混淆就可以了(因为gson转化过的类必须实现这个接口)。代码如下:
-keep class com.google.** {
<fields>;
<methods>;
}
-keepclassmembers class * extends 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();
}
# Gson specific classes
-keep class sun.misc.Unsafe {
<fields>;
<methods>;
}
# -keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.myapp.po.** {
<fields>;
<methods>;
}
红色部分替换为自己的po包,也就是实现了Serialized接口的类所在的包。代表这些类不进行混淆。
关于android项目混淆打包注意事项,下面的文章总结也比较全面。
http://my.eoe.cn/smile_it/archive/3820.html
相关文章推荐
- 浏览器安全问题导致activex不能使用的终极解决办法_悄悄俏俏
- VB使用Bitblt等函数,源图片不完全显示导致不能实现功能的解决办法
- ida postive-value sp导致不能使用hexray f5转c语言的解决办法
- 关于透明状态栏的使用以及与软键盘冲突(导致SrollView不能滑动)的解决办法
- Eclipse SVN插件冲突导致不能使用解决办法
- python3下使用map()函数返回<map object at 0x00000000038327F0>导致不能直接使用的解决办法
- MyEclipse SVN插件冲突导致不能使用解决办法
- 使用360杀毒后,360将MySQL的注册表当作病毒给kill掉了,导致不能上到mysql服务器连接127.0.0.1问题的解决办法
- linux中修改环境变量之后导致系统崩溃(用户所有命令不能使用)的解决办法
- MyEclipse SVN插件冲突导致不能使用解决办法
- libz.so.1文件丢失,同时导致yum和rpm命令不能使用的解决办法?
- 换系统后win7自带的截图工具不能使用的解决办法
- 抛开cookie使用session-PHP中SESSION不能跨页传递问题的解决办法
- Xshell5评估过期,需要采购,不能使用----解决办法
- windows下nginx的安装、使用及80端口被占用导致nginx不能启动问题的解决
- 【Linux】编辑文件时,箭头按键还有BACKSPACE按键不能正常使用的解决办法
- iOS9 & iOS10 HTTP 不能正常使用的解决办法
- Android使用Unity导致Activity被销毁的解决办法
- DedeCMS使用channelartlist循环,不能获取外部链接的解决办法
- USB接口键盘不能使用故障解决办法