ProGuard配置模版(七)

##########################
#####    常规配置        #####

##########################

# 忽略警告,避免打包时某些警告出现
-ignorewarnings

#指定代码混淆压缩级别,在0~7之间,默认为5,一般不做修改
-optimizationpasses 5

#是否使用大小写混合,混合后的类名为小写
-dontusemixedcaseclassnames

#是否混淆第三方jar
-dontskipnonpubliclibraryclasses

#混淆时是否记录日志
-verbose

#指定不去忽略非公共库的类
-dontskipnonpubliclibraryclassmembers

#不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
-dontpreverify

#保留Annotation不混淆
-keepattributes *Annotation*,InnerClasses

#避免混淆泛型(保持签名)
-keepattributes Signature

#抛出异常时保留代码行号
-keepattributes SourceFile,LineNumberTable

#指定混淆是采用的算法,后面的参数是一个过滤器
#这个过滤器是谷歌推荐的算法,一般不做更改
-optimizations !code/simplification/cast,!field/*,!class/merging/*


#不混淆的jar配置
#针对android-support-v4.jar的解决方案
-libraryjars libs/android-support-v4.jar
-injars       myapplication.jar
-outjars      myapplication_out.jar
-libraryjars  <java.home>/lib/rt.jar
-printmapping myapplication.map


##########################
#####    Keep配置        #####
##########################

#不混淆资源文件
-keep class **.R
-keep class **.R$*{
      <fields>;
    }
    
-keepparameternames

#不混淆继承某个类的所有子类
-keep public class com.niubashaoye.ndk.jni.BaseJNI{}

#不混淆某个类
-keep public class com.niubashaoye.ndk.jni.JNITools{*;}

#不混淆某个包内所有的类
-keep public class com.niubashaoye.ndk.jni.**{*;}

#不混淆某个类的子类
-keep public class * extends com.niubashaoye.ndk.jni.BaseJNI{*;}

#不混淆所有类名中包含了“ndk”的类及类成员
-keep public class.ndk. {*;}

#不混淆某个接口的实现
-keep class * implements com.niubashaoye.ndk.jni.BaseInterface{*;}


#不混淆某个类的构造函数
-keepclassmembers class com.niubashaoye.ndk.jni.JNITools{
       public();
     }
 
#不混淆某个类的特定函数
-keepclassmembers class com.niubashaoye.ndk.jni.JNITools{
        public void addNum(int,int,android.view.View);
    }


#不混淆某个类的公共类成员
#JNITools类的public、native的类成员不混淆
-keep class com.niubashaoye.ndk.jni.JNITools{
    public;native;
  };


#如果类名需要混淆,类的public、native修饰的成员不混淆
-keepclassmembers class com.niubashaoye.ndk.jni.JNITools{
        public;native;
  };


#不混淆某个类的方法
-keepclasseswithmembers class com.niubashaoye.ndk.jni.BaseJNI$ChildClass {
     <methods>;
}


#不混淆某个类的字段和方法
-keep public class com.niubashaoye.ndk.jni.JNITools {
    public <fields>;
    public <methods>;
}


# onEvent**方法不混淆
-keepclassmembers class ** {
    public void onEvent*(**);
    public void onEventMainThread*(**);
}


#保留枚举类不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


#泛型,解决出现类型转换错误的问题
-keepattributes Signature


#保留Parcelable序列化类不被混淆
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}


#保留Serializable序列化类不混淆
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}


#对于带有回调函数的onXXEvent的,不能被混淆
-keepclassmembers class * {
    void *(**On*Event);
}


#注解
-keepattributes *Annotation*


#实体类不混淆
-keep public class com.niubashaoye.ndk.entities.** {
    public void set*(***);
    public *** get*();
    public *** is*();
}


#webView需要进行特殊处理
-keepclassmembers class com.niubashaoye.ndk.webview {
   public *;
}
-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, jav.lang.String);
}


#HTML5的JavaScript的交互进行特殊处理 
-keepclassmembers class com.niubashaoye.ndk.JSInterface {
    <methods>;
}


#对含有反射类的类不混淆
-keep class com.niubashaoye.ndk.jni.**{*;}


#处理回调函数
-keep class com.niubashaoye.ndk.MyCallbackClass {
    void myCallbackMethod(java.lang.String);
}


##########################
#####    优化配置        #####
##########################


#不混淆log(测试时设置,发布版本去掉)
-assumenosideeffects class android.util.Log {
    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(...);
}

#不打印com.niubashaoye.ndk.lib包下的所有信息
-dontwarn com.niubashaoye.ndk.lib.**

猜你喜欢

转载自blog.csdn.net/niuba123456/article/details/81025208