常見混淆規則總結

一、屬性混淆

以keepattrbutes開頭,不混淆的各類屬性以下:java

1.一、異常和內部類

-keepattributes Exceptions,InnerClasses,...
複製代碼

1.二、泛型

-keepattributes Signature
複製代碼

1.三、註解

-keepattributes *Annotation*
複製代碼

1.四、拋出異常時保留代碼行號

-keepattributes SourceFile,LineNumberTable
複製代碼

1.五、JS

-keepattributes *JavascriptInterface*

複製代碼

二、單個內部類不混淆規則

使用內部類寫法$,例如:android

-keep interface some.demo$inner{*;}
複製代碼

三、常見繼承不混淆

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.widget.BaseAdapter {*;}
複製代碼

四、保持native方法不被混淆

-keepclasseswithmembernames class * { 
    native <methods>;
}
複製代碼

五、保留枚舉enum類不被混淆

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
複製代碼

六、序列化不混淆

-keep class * implements android.os.Parcelable{
    public static final android.os.Parcelable$Creator *;
}
複製代碼
-keepclassmembers class * implements java.io.Serializable {
   static final long serialVersionUID;
   private static final java.io.ObjectStreamField[] serialPersistentFields;
   !static !transient <fields>;
   private void writeObject(java.io.ObjectOutputStream);
   private void readObject(java.io.ObjectInputStream);
   java.lang.Object writeReplace();
   java.lang.Object readResolve();
}
複製代碼

七、不混淆資源、support中的v4和v7

-keepclassmembers class **.R$* { *; }
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.WebViewClient {
    public void *(android.webkit.WebView, java.lang.String);
}
# support-v4
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
# support-v7
-dontwarn android.support.v7.**                                             #去掉警告
-keep class android.support.v7.** { *; }                                    #過濾android.support.v7
-keep interface android.support.v7.app.** { *; }
-keep public class * extends android.support.v7.**

複製代碼

八、自定義view

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(***);
    *** get* ();
}
複製代碼

九、回調函數

-keepclassmembers class * {
    void *(**On*Listener);
}
複製代碼

十、第三方引用

# 不混淆第三方引用的庫
-dontskipnonpubliclibraryclasses
複製代碼

總結

剩餘的還有自身項目的數據模型的類。web

相關文章
相關標籤/搜索