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的混淆規則,這樣就能成功反序列化了,如果知道問題根本原因的朋友告知一下。

發佈了23 篇原創文章 · 獲贊 49 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章