1. 程式人生 > >ProGuard混淆常見錯誤

ProGuard混淆常見錯誤

1、Proguard returned with error code 1. See console  更新proguard版本  android-support-v4 不進行混淆  新增缺少相應的庫2、使用gson包解析資料時,出現missing type parameter異常在 proguard.cfg中新增-dontobfuscate-dontoptimize在 proguard.cfg中新增# 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.** { *; }3、型別轉換錯誤-keepattributes Signature4、空指標異常混淆過濾掉相關類與方法5、安卓程式碼混淆與反射衝突,地圖無法顯示等問題解決及反編譯方法,安卓反編譯此前的程式碼混淆,因為並沒有用到反射,所以常規的程式碼混淆方式一遍就能通過,而此專案中某些類利用到了反射機制(本人的這個專案中有即時通訊功能,所以有表情類資源,因此需要通過反射由檔名找到表情資源id),當由檔名去尋找資源id時就報空指標異常了,期初我並不知道什麼原因,通過反編譯已經混淆的apk,一步一步尋找到出錯的地方,才恍然大悟,正是反射那一步出現了問題:Field field = R.drawable.class.getDeclaredField(name);走到這一步就掛了,程式直接崩潰。解決辦法:在proguard.cfg檔案中,將反射用到的類中的變數不被混淆:如:-keep public class com.byl.bean.Expressions { *; },表示Expressions 這個類及類中的所有變數及方法不被混淆,注意要寫全路徑;過濾泛型:-keepattributes Signature最重要的一點:保持R檔案不被混淆,否則,你的反射是獲取不到資源id的-keep class **.R$* {*;}補充一下:上個問題解決後,接下來又遇到了一個問題就是混淆後,地圖無法正常使用了,博主使用的是百度地圖,在proguard.cfg也已經寫明瞭:-keep class com.baidu.** {*;}-keep class vi.com.** {*;}6、android.provider.Settings$Global# Project target.target=android-197、java.lang.reflect.UndeclaredThrowableException-keep interface com.dev.impl.**8、記憶體溢位和無法寫入堆疊javaOptions in proguard := Seq(...)orjavaOptions in (Proguard, proguard) := Seq(...)9、Error: Unable to access jarfile ..libproguard.jar路徑問題10、java.lang.NoSuchMethodError沒有相關方法,方法被混淆了,混淆過濾掉相關方法便可.