問題
最近在自己項目中遇到一個崩潰問題,debug版本不會,release版本會??!
一開始有點蒙,還是老老實實根據操作步驟以及崩潰log,先定位導致崩潰的代碼位置。原來是某個JavaBean
在Gson
解析json
格式數據后,繼續把這個對象給后面的業務邏輯使用然后崩潰了。根據打印log分析json
字符串是正常?。繉擂?..
于是開始google,功夫不負有心人,有人遇到類似問題提到是混淆后JavaBean
類的字段名稱會變成a、b、c等之類的字符串,與json
字符串中的key
不一致了。
ok,原來是混淆問題,那就修改proguard-rules.pro
文件!
解決
來看下混淆文件proguard-rules.pro
文件,修改如下:
-keep class com.google.gson.examples.models.** { *; }
-keep interface com.google.gson.examples.models.** { *; }
-keep class com.google.gson.examples.upgrade.internal.VersionInfo {*;}
改好之后,重新打一個release包測試問題解決。反編譯apk包發現這些JavaBean
類沒有被混淆,正是我們想要的。
總結
問題主要是使用了混淆編譯的方式進行apk打包(其中不混淆編譯進行apk打包則一切正常),因為JavaBean
(實體類)的字段名稱必須與服務端返回json
字符串中的key
要一致,才能進行解析,而混淆編譯之后,客戶端代碼中的JavaBean
(實體類)的類名與其字段名稱全部變成了a、b、c、d等等字符串,這與服務端返回的json
字符串中的key
不一致,導致解析失敗。
所以,解決的辦法是:在進行混淆編譯進行打包apk的時候,過濾掉存放所有JavaBean
(實體類)的包不進行混淆編譯。