反编译神器:jadx
防止反编译
Android ProGuard
- 启用ProGuard
在Android专案根目录下,有个「project.properties」档案,找到以下字串,并移除掉前面的「#」,即可启用ProGuard。
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
这行文字的意思是告诉Eclipse在编译Android的时候使用proguard对程式码进行混淆,并指定混淆的参数设定档。预设的Android专案会在开头加上「#」,表示此行文字为注解,也就是没有开启ProGuard。
- 使用ProGuard
启用ProGuard之后,往后使用Android的Export工具来输出专案,都会自动把程式码给混淆。无须再进行而外的动作。
- 启用ProGuard可能会遭遇的问题
由于有些程式是不可以被混淆的,例如有使用到「Class.forName」这类方法来呼叫的套件。可以藉由修改Android专案目录下的ProGuard设定档「proguard-project.txt」,加入-keep参数来保留指定的程式码不被混淆。通常-dontwarn参数也会跟-keep合用,目的是要让ProGuard不要去检查指定Class下程式码的错误(当然若有出现错误再加也不迟)。
有许多程式用了ProGuard之后会出现型别转换错误,可以加上「-keepattributes Signature」参数,保留程式的签名。
以下是proguard-project.txt的设定参考:
-keep class com.google.** { ; } -dontwarn com.google.*
-keep class com.facebook.** { ; } -dontwarn com.facebook.*
-keep class org.apache.** { ; } -dontwarn org.apache.*
-keepattributes Signature
Proguard代码混淆时Unsupported class version number [52.0] (maximum 51.0, Java 1.7)