Android Studio 程式碼混淆注意問題

一葉飄舟發表於2016-08-01

Java 是一種跨平臺的、解釋型語言,Java 原始碼編譯成中間”位元組碼”儲存於 class 檔案中。由於跨平臺的需要,Java 位元組碼中包括了很多原始碼資訊,如變數名、方法名,並且通過這些名稱來訪問變數和方法,這些符號帶有許多語義資訊,很容易被反編譯成 Java 原始碼。為了防止這種現象,我們可以使用 Java 混淆器對 Java 位元組碼進行混淆。

語法

不能混淆的程式碼

顧名思義,不能混淆程式碼如果被混淆了,就會出現錯誤。

  1. 需要反射的程式碼
  2. 系統介面
  3. Jni介面
  4. 需要序列號和反序列化的程式碼(即實現Serializable介面的JavaBean)
  5. 與服務端進行後設資料互動的JavaBean(JSON、XML中對應的類)

常見錯誤

1) Proguard returned with error code 1. See console

更新proguard版本
android-support-v4 不進行混淆
新增缺少相應的庫

2) 使用gson包解析資料時,出現 missing type parameter 異常

在 proguard-project.txt 中新增
-dontobfuscate
-dontoptimize
在 proguard-project.txt 中新增
# 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) 型別轉換錯誤

在 proguard-project.txt 中新增
-keepattributes Signature

4) 空指標異常

混淆過濾掉相關類與方法

5) java.lang.reflect.UndeclaredThrowableException

-keep interface com.dev.impl.**

6) Error: Unable to access jarfile ..libproguard.jar

路徑問題

7) java.lang.NoSuchMethodError

這也是最常見的問題,因為找不到相關方法,方法被混淆了,混淆過濾掉相關方法便可。



下面是我實際專案中的混淆配置:

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

Android Studio 程式碼混淆注意問題 Android Studio 程式碼混淆注意問題

相關文章