混淆器通過刪除從未用過的代碼和使用晦澀名字重命名類、字段和方法,對代碼進行壓縮,優(yōu)化和混淆。結(jié)果是一個比較小的.apk文件,該文件比較難進行逆向project。因此,當你的應(yīng)用程序?qū)Π踩舾校ㄒ蟾撸?,比如當你授?quán)應(yīng)用程序的時候,混淆器是一種重要的保護手段。
proguard 基本語法
// 保留native方法的方法的方法名和包含native方法的類的類名不變-keepclasseswithmembernames class { native<methods>;}// 保留繼承與View的類中的set*和get*方法-keepclassmembers public class * extends android.view.View { void set*(***); *** get*();}// 保留繼承與Activity的類中以View為參數(shù)的方法-keepclassmembers class * extends android.app.Activity { public void *(android.view.View);}// 保留實現(xiàn)了Parcelable 接口的類的類名以及實現(xiàn)了 Parcelanle$Creator 的內(nèi)部類-keep class * implemenets android.os.Parcelable { public static final android.os.Parcelanle$Creator *;}// 保留 R$*類中靜態(tài)字段的字段名-keep class **.R$* { public static <fields>;}也就是
類名不混淆 用keep
方法名不混淆 用keepclassmembers 或者 keepclasseswithmembernames(后者用于native不混淆)
不混淆的情況:
1 jni 調(diào)用java方法
2 四大組件
3 R文件
4 某些通過反射調(diào)用的類或方法
5 第三jar包(一般情況下不要混淆)
混淆去掉log
-assumenosideeffects class android.util.Log {public static boolean isLoggable(java.lang.String,int);public static int v(...);public static int i(...);public static int w(...);public static int d(...);public static int e(...);}assumenosideeffects,proguard 配置文件里的參數(shù)。assume no side effects;假定無效;該屬性也就是標識無效代碼。我們就是通過這個參數(shù)來讓proguard刪除日志代碼。
新聞熱點
疑難解答
圖片精選