android FastJson混淆

在使用FastJson进行JSON解析时,发现在签名和混淆后的APK中,javabean字段无法获取到值。经过排查确定是混淆导致的问题。通过对比Gson的混淆配置,发现为FastJson添加特定的混淆规则可以解决此问题,关键在于保留javabean不被混淆。最终,使用`-keep class com.xx.xx.xx.javebean** { *; }`的混淆规则成功解决了FastJson在混淆环境下的解析问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用fastjson来做json数据的解析,发现APK使用了签名和混淆打包出来之后,解析的javabean的字段是没有值的,于是开始定位问题:
1.没使用打包签名和混淆之前使用fastjson解析的javabean是可以拿到值的;
2.使用签名和混淆之后,使用fastjson解析值就是空了;
3.问题定位出来了:fastjson在混淆之后解析出问题了。
于是开始去fastjson’官方找混淆相关的代码,如下:

-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses
//这句话起不到作用,在android studio生成的javabean中
-keep class * implements java.io.Serializable { *; }
-keepattributes *Annotation
-keepattributes Signature
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *; }

加入这些混淆代码之后,重新编译打包,出来接口还是一样的。这使我很郁闷。但是对于程序猿来说,就喜欢啃硬骨口。然后就google各种答案。然而很多都是跟我这个差不多千篇一律。
突然灵光一闪,我认为可以参考下gson的混淆。既然都是第三方json解析工具。混淆也应该差不多的。
然后就去查看gson解析的

-keepattributes Annotation
-keepattributes EnclosingMethod
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.* { ; }
**//com.xx.xx.xx.bean 解释:需要忽略不混淆的javabean
-keep class com.xx.xx.xx.javebean** { *; }

结果如下:
结果

于是想着,既然是解析javabean出了问题,那应该fastjson和json一样,使用

**//com.xx.xx.xx.bean 解释:需要忽略不混淆的javabean
-keep class com.xx.xx.xx.javebean** { *; }

应该可以的。
然后立马做实验

添加javaben混淆忽略

等到的结果如下:

结果

从结果中看出,加入如下代码可以彻底解决fastjson混淆各种问题

**//com.xx.xx.xx.bean 解释:需要忽略不混淆的javabean
-keep class com.xx.xx.xx.javebean** { *; }

下面贴完整代码,希望能帮助更多的人节约时间

“`
-dontskipnonpubliclibraryclassmembers
-dontskipnonpubliclibraryclasses

-keep class * implements java.io.Serializable { *; }
-keepattributes *Annotation
-keepattributes Signature
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.* { ; }
//需要忽略混淆的javabean的包名或者类
-keep class com.ling.fast.bean** { *; }

其实还有另外一种优雅的javabean忽略混淆方式如下:
http://blog.youkuaiyun.com/dbs1215/article/details/53358406

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值