proguard 基本語法java
// 保留native方法的方法的方法名和包含native方法的類的類名不變android
-keepclasseswithmembernames class {
native<methods>;
}
// 保留繼承與View的類中的set*和get*方法
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
// 保留繼承與Activity的類中以View爲參數的方法
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
// 保留實現了Parcelable 接口的類的類名以及實現了 Parcelanle$Creator 的內部類
-keep class * implemenets android.os.Parcelable {
public static final android.os.Parcelanle$Creator *;
}
// 保留 R$*類中靜態字段的字段名
-keep class **.R$* {
public static <fields>;
}
也就是
類名不混淆 用keep
方法名不混淆 用keepclassmembers 或者 keepclasseswithmembernames(後者用於native不混淆)
不混淆的狀況:app
1 jni 調用java方法ide
2 四大組件spa
3 R文件日誌
4 某些經過反射調用的類或方法繼承
5 第三jar包(通常狀況下不要混淆)接口
混淆去掉logget
-assumenosideeffects class android.util.Log {it
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 配置文件裏的參數。assume no side effects;假定無效;該屬性也就是標識無效代碼。咱們就是經過這個參數來讓proguard刪除日誌代碼。