1、project.properties文件中
取消這行註釋
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
2、proguard-project.txt中
-libraryjars libs/ + 引用的jar包全名
例如:-libraryjars libs/android-support-v4.jar
- -dontwarn com.baidu.**
- -keep class com.baidu.** { *;}
- -dontwarn com.lakala.**
- -keep class com.lakala.** { *;}
- -dontwarn com.lingtu.**
- -keep class com.lingtu.** { *;}
- -dontwarn com.autonavi.**
- -keep class com.autonavi.** { *;}
混淆以後,出現錯誤,每次看報錯信息,連方法都難找到。雖說有屬性對應的txt,但是有些混淆的方法名是一模一樣,所以找起來相當麻煩。
下面就把我遇見的問題分享出來吧。
第一個,類型轉換錯誤,因爲我用的泛型,所以在調用某些方法的時候,會出現這種錯誤,後面在混淆配置文件加了一個過濾泛型的語句,如下。
-keepattributes Signature
過後,就沒有出現類似的類型轉換錯誤。
第二個,空指針異常,這個錯誤是我對比前面的錯誤來說,所用的時間比較短,開始是找不到方法到底是哪個(原因是上面提到的混淆後方法名相同),所以就把這個類裏面的所有方法都過濾掉,這樣我沒用多少時間,也就找到了具體的方法,可還是不明白原因,後面發現了其中的一個if判斷,我利用反射篩選方法,關鍵字是“get”,突然我就震精了,大叫一聲——soga,原來我 model的 set/get方法名全部都被混淆了,所以篩選不到方法,返回的也就是null值,自然下面用到這個方法的返回值就會拋出空指針異常。
解決方法:把 model包下面的所有類,全部過濾掉。
總結:如要用到反射,反射一般就會利用到泛型,所以必須要把泛型的全部過濾掉,如果有根據變量名或者方法名判斷的,記得所在的類需過濾掉,之中還有用到 annotation的地方,要加入一行代碼,如下:
-keepattributes *Annotation*
這樣就能過濾掉所有的annotation,否則也會拋出空指針異常。