1. 程式人生 > >EventBus,Gson打包混淆問題

EventBus,Gson打包混淆問題

今天在打包應用的過程中遇到了EventBus混淆的問題:

我在這裡主要是想記錄一下自己碰到的問題:

我在用android studio打包混淆後,eventbus應用總是報錯找不到方法,在網上查了很多都是說沒有加上註解@Subscribe,然而我檢查了很多次,所有的應用都是對的,並且在沒有打包的情況下執行也是正常的,苦苦思索查找了良久,發現罪魁禍首是因為打包混淆找不到eventbus類了。只需在proguard-rules.pro檔案中加上這幾句混淆程式碼就行了:

#eventbus打包混淆
-keepattributes *Annotation*
-keepclassmembers 
class ** { @org.greenrobot.eventbus.Subscribe <methods>; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # Only required if you use AsyncExecutor -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { <init>(java.lang.Throwable); }

今天在打包應用的過程中遇到了Gson混淆的問題:Gson打包混淆出現Null指標異常

其中兩種gson解析json字串的方法都沒有問題,問題主要是使用了混淆編譯的方式進行apk打包(其中不混淆編譯進行apk打包則一切正常),因為客戶端程式碼中的 JavaBean(實體類)的欄位名稱必須與服務端返回json字串中的key要一致,才能進行解析,而混淆編 譯之後,客戶端程式碼中的JavaBean(實體類)的類名與其欄位名稱全部變成了a、b、c、d等等字串,這與服務端返回的json字串中的key不一致,導致解析失敗。所以,解決的辦法是:在進行混淆編譯進行打包apk的時候,過濾掉存放所有JavaBean(實體類)的包不進行混淆編譯。經過測試,一切正常。
#Gson混淆
# removes such information by default, so configure it to keep all of it. -keepattributes Signature # Gson specific classes -keep class sun.misc.Unsafe { *; } #-keep class com.google.gson.stream.** { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { *; } -keep class com.**.**.model.** {*;}
最後一行很重要要換成自己的包名