常见混淆规则总结

一、属性混淆

以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

相关文章
相关标签/搜索