Retrofit混淆后数据反序列化失败或数据解析失败问题

前言

有时候明明混淆规则配置好了(Retrofit+Rxjava+Gson+Okhttp组合),还是出现数据反序列化失败问题,本次介绍一种特殊情况,就是主app目录和module目录下各有一个bean,app的bean关联module的bean,即在子模块里尽量只放和子模块相关的混淆规则,一些公有的混淆方式请放在app或者公有的模块中。

问题复现

  1. app目录
    app目录
    混淆规则:
    bean混淆
  2. modlue目录
    module目录
    混淆规则:
    在这里插入图片描述
  3. 复现
    Observable<ResponseDto<UpdateInfoDto>> checkUpdate(@Query("appId") String appId, @Query("versionCode") int versionCode);

这样调用得到的ResponseDto<UpdateInfoDto>的UpdateInfoDto字段都是默认值,即反序列化失败。
结果返回如下:

ResponseDto{resultCode=0, resultMsg='检查更新成功', resultObject=UpdateInfoDto{hasUpdate=false, versionCode=0, versionName='null', updateContent='null', url='null', md5='null', size=0, silent=false, force=false, autoInstall=false, ignorable=false}}

解决方法

百度一番说泛型类ResponseDto没有实现implements Serializable,其实与这没关系, 混淆配置Serializable只是为了保证实现了Serializable的类的字段不被混淆,当反序列化时能够还原原来的对象。我怀疑是模块间混淆优先级问题,解决办法如下:
在这里插入图片描述
上面在app目录下配置module bean的混淆规则,即覆盖module bean的混淆规则,这样就能成功反序列化了,如果知道问题根本原因的朋友告知一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值