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.**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ProGuard 是一个可以帮助我们混淆、缩减和优化 Android 应用程序的工具。在使用 ProGuard 时,我们需要配置一个 proguard-rules.pro 文件,告诉 ProGuard 应该如何处理我们的代码。下面是一个简单的 ProGuard 配置文件示例: ``` # 优化选项 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose # 混淆选项 -keepattributes Signature -keepattributes SourceFile,LineNumberTable -renamesourcefileattribute SourceFile -keepattributes *Annotation*,EnclosingMethod # 忽略不需要混淆的类或方法 -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 org.apache.commons.logging.LogFactory { public static ** getLog(java.lang.String); } # 忽略不需要混淆的库 -dontwarn android.support.** -dontwarn com.google.android.gms.** -dontwarn org.apache.commons.logging.** # 压缩选项 -optimizations !code/simplification/cast,!field/*,!class/merging/* -dontoptimize ``` 这个配置文件包含了优化选项、混淆选项、忽略不需要混淆的类或方法、忽略不需要混淆的库和压缩选项。我们可以根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值