常见混淆规则总结

4,323 阅读1分钟

1、属性混淆

以keepattrbutes开头,不混淆的各种属性如下:

1.1、异常和内部类

-keepattributes Exceptions,InnerClasses,...

1.2、泛型

-keepattributes Signature

1.3、注解

-keepattributes *Annotation*

1.4、抛出异常时保留代码行号

-keepattributes SourceFile,LineNumberTable

1.5、JS

-keepattributes *JavascriptInterface*

2、单个内部类不混淆规则

使用内部类写法$,例如:

-keep interface some.demo$inner{*;}

3、常见继承不混淆

-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 {*;}

4、保持native方法不被混淆

-keepclasseswithmembernames class * { 
    native <methods>;
}

5、保留枚举enum类不被混淆

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

6、序列化不混淆

-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();
}

7、不混淆资源、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.**

8、自定义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* ();
}

9、回调函数

-keepclassmembers class * {
    void *(**On*Listener);
}

10、第三方引用

# 不混淆第三方引用的库
-dontskipnonpubliclibraryclasses

总结

剩余的还有自身项目的数据模型的类。