Android 混淆之proguard

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刪除日誌代碼。

相關文章
相關標籤/搜索