赞
踩
proguard-rules.pro文件中配置
- # Add project specific ProGuard rules here.
- # By default, the flags in this file are appended to flags specified
- # in D:\work\Develop_tool\android-sdk/tools/proguard/proguard-android.txt
- # You can edit the include path and order by changing the proguardFiles
- # directive in build.gradle.
- #
- # For more details, see
- # http://developer.android.com/guide/developing/tools/proguard.html
-
- # Add any project specific keep options here:
-
- # If your project uses WebView with JS, uncomment the following
- # and specify the fully qualified class name to the JavaScript interface
- # class:
- #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
- # public *;
- #}
-
- # Uncomment this to preserve the line number information for
- # debugging stack traces.
- #-keepattributes SourceFile,LineNumberTable
-
- # If you keep the line number information, uncomment this to
- # hide the original source file name.
- #-renamesourcefileattribute SourceFile
-
- # Add project specific ProGuard rules here.
- # By default, the flags in this file are appended to flags specified
- # in D:\work\Develop_tool\android-sdk/tools/proguard/proguard-android.txt
- # You can edit the include path and order by changing the proguardFiles
- # directive in build.gradle.
- #
- # For more details, see
- # http://developer.android.com/guide/developing/tools/proguard.html
-
- # Add any project specific keep options here:
-
- # If your project uses WebView with JS, uncomment the following
- # and specify the fully qualified class name to the JavaScript interface
- # class:
- #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
- # public *;
- #}
-
- # Uncomment this to preserve the line number information for
- # debugging stack traces.
- #-keepattributes SourceFile,LineNumberTable
-
- # If you keep the line number information, uncomment this to
- # hide the original source file name.
- -renamesourcefileattribute SourceFile
-
- #忽略警告
- -ignorewarning
-
- #指定代码的压缩级别,在0~7之间,默认为5,一般不下需要修改
- -optimizationpasses 5
-
- #包名不混合大小写,混淆后的类名为小写
- # windows下的同学还是加入这个选项吧(windows大小写不敏感)
- -dontusemixedcaseclassnames
-
- #不去忽略非公共的库类
- # 默认跳过,有些情况下编写的代码与类库中的类在同一个包下,并且持有包中内容的引用,此时就需要加入此条声明
- -dontskipnonpubliclibraryclasses
-
- # 指定不去忽略非公共的库的类的成员
- #-dontskipnonpubliclibraryclassmembers
-
- #不进行压缩,保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码时无用的,
- #从而把所有的代码压缩掉,导出一个空的jar
- #库的aar或者jar必须要加上这个
- #-dontshrink
-
- #优化 不优化输入的类文件
- -dontoptimize
-
- #预校验,不做预检验,preverify是proguard的四个步骤之一
- # Android不需要preverify,去掉这一步可以加快混淆速度
- -dontpreverify
-
- #把混淆类中的方法名也混淆了
- #-useuniqueclassmembernames
-
- #优化时允许访问并修改有修饰符的类和类的成员
- #-allowaccessmodification
-
- #混淆时是否记录日志
- # 有了verbose这句话,混淆后就会生成映射文件
- # 包含有类名->混淆后类名的映射关系
- # 然后使用printmapping指定映射文件的名称
- -verbose
-
- # 混淆时所采用的算法,后面的参数是一个过滤器
- # 这个过滤器是谷歌推荐的算法,一般不改变
- -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-
- #指定受保护的属性
- # 可以直接写在一行
- -keepattributes Exceptions, InnerClasses, Signature, Deprecated,SourceFile, LineNumberTable, *Annotation*, EnclosingMethod,*JavascriptInterface*
-
- #指定受保护的属性
- #保护注解
- # 这在JSON实体映射时非常重要,比如fastJson
- #-keepattributes *Annotation*,InnerClasses
-
- # 抛出异常时保留代码行号
- #-keepattributes SourceFile,LineNumberTable
-
- # 保持哪些类不被混淆
- #因为这些子类有可能被外部调用
- -keep public class * extends android.app.Fragment
- -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
- #如果有引用v4包可以添加下面这行
- -keep public class * extends android.support.v4.app.Fragment
- -keep public class * extends android.support.annotation.**
- -keep public class * extends android.support.v7.**
-
- # 保留Activity中的方法参数是view的方法,
- # 从而我们在layout里面编写onClick就不会影响
- -keepclassmembers class * extends android.app.Activity {
- public void * (android.view.View);
- }
-
- -keep public class * extends android.widget.BaseAdapter {*;}
-
- ##记录生成的日志数据,gradle build时在本项目根目录输出##
- #apk 包内所有 class 的内部结构
- -dump proguard/class_files.txt
- #未混淆的类和成员
- -printseeds proguard/seeds.txt
- #列出从 apk 中删除的代码
- -printusage proguard/unused.txt
- #混淆前后的映射
- -printmapping proguard/mapping.txt
- ########记录生成的日志数据,gradle build时 在本项目根目录输出-end######
-
- #如果引用了v4或者v7包
- -dontwarn android.support.**
-
- ####混淆保护自己项目的部分代码以及引用的第三方jar包library-end####
-
- #保持 native 方法不被混淆
- -keepclasseswithmembernames class * {
- native <methods>;
- }
-
- #保持自定义控件类不被混淆
- -keepclasseswithmembers class * {
- public <init>(android.content.Context, android.util.AttributeSet);
- }
-
- #保持自定义控件类(继承自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* ();
- }
-
- #WebView的处理
- -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);
- }
-
- #保持 Parcelable 不被混淆
- -keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
- }
-
- #保持 Serializable 不被混淆
- -keepnames class * implements java.io.Serializable
-
- #保持 Serializable 不被混淆并且enum 类也不被混淆
- -keepclassmembers class * implements java.io.Serializable {
- static final long serialVersionUID;
- private static final java.io.ObjectStreamField[] serialPersistentFields;
- !static !transient <fields>;
- !private <fields>;
- !private <methods>;
- private void writeObject(java.io.ObjectOutputStream);
- private void readObject(java.io.ObjectInputStream);
- java.lang.Object writeReplace();
- java.lang.Object readResolve();
- }
-
- #保持枚举 enum 类不被混淆
- -keepclassmembers enum * {
- public static **[] values();
- public static ** valueOf(java.lang.String);
- }
-
- #不混淆资源类,对R文件下的所有类及其方法,都不能被混淆
- -keepclassmembers class **.R$* {
- public static <fields>;
- }
-
- # 保持测试相关的代码
- -dontnote junit.framework.**
- -dontnote junit.runner.**
- -dontwarn android.test.**
- -dontwarn android.support.test.**
- -dontwarn org.junit.**
-
- #避免混淆泛型 如果混淆报错建议关掉
- # 这在JSON实体映射时非常重要,比如fastJson
- #-keepattributes Signature
-
- #移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用,另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制
- #-assumenosideeffects class android.util.Log {
- # public static *** v(...);
- # public static *** i(...);
- # public static *** d(...);
- # public static *** w(...);
- # public static *** e(...);
- #}
-
- #############################################################################################
- ######################## 以上通用 ##################################
- #############################################################################################
-
-
- ########>>>>>>>>>>>>>>>>>>> 以下常用第三方模块的混淆选项 <<<<<<<<<<<<<<<<<##############
-
- #############GSON#############
- #https://github.com/google/gson/blob/master/examples/android-proguard-example/proguard.cfg
- #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。
- #gson
- #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。
- -keepattributes Signature
- # Gson specific classes
- -dontwarn sun.misc.**
- -keep class sun.misc.Unsafe { *; }
- # Application classes that will be serialized/deserialized over Gson
- -dontwarn com.google.gson.**
- -keep class com.google.gson.** { *; }
- -keep class com.google.gson.stream.** { *; }
-
- # Prevent proguard from stripping interface information from TypeAdapterFactory,
- # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
- -keep class * implements com.google.gson.TypeAdapterFactory
- -keep class * implements com.google.gson.JsonSerializer
- -keep class * implements com.google.gson.JsonDeserializer
-
- ##---------------End: proguard configuration for Gson ----------
-
- #############mob#############
- -keep class android.net.http.SslError
- -keep class android.webkit.**{*;}
- -keep class cn.sharesdk.**{*;}
- -keep class com.sina.**{*;}
- -keep class m.framework.**{*;}
- -keep class **.R$* {*;}
- -keep class **.R{*;}
- #忽略警告,保持cn.sharesdk.**这个包里面的所有类和所有方法不被混淆。
- -dontwarn cn.sharesdk.**
- -dontwarn com.sina.**
- -dontwarn **.R$*
-
- #############butterknife#############
- #https://github.com/JakeWharton/butterknife/blob/master/butterknife/proguard-rules.txt
- -keep class butterknife.** { *; }
- -dontwarn butterknife.internal.**
- -keep class **$$ViewBinder { *; }
-
- -keepclasseswithmembernames class * {
- @butterknife.* <fields>;
- }
-
- -keepclasseswithmembernames class * {
- @butterknife.* <methods>;
- }
-
- # Retain generated class which implement Unbinder.
- -keep public class * implements butterknife.Unbinder { public <init>(**, android.view.View); }
-
-
- #############OKHTTP3#############
- #https://github.com/square/okhttp
- -dontwarn okhttp3.**
- -dontwarn com.squareup.okhttp3.**
- -keep class com.squareup.okhttp3.** { *;}
- -keep class okhttp3.**{*;}
-
- -dontwarn okio.**
- -keep class okio.**{*;}
- -dontwarn javax.annotation.**
- # A resource is loaded with a relative path so the package of this class must be preserved.
- -keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-
-
- #############AndroidUtilCode#############
- #https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-CN.md
- -keep class com.blankj.utilcode.** { *; }
- -keepclassmembers class com.blankj.utilcode.** { *; }
- -dontwarn com.blankj.utilcode.**
-
-
- #############greenDAO3#############
- #http://greenrobot.org/greendao/documentation/updating-to-greendao-3-and-annotations/
- -dontwarn org.greenrobot.greendao.**
- -keep class org.greenrobot.greendao.**{*;}
- -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
- public static java.lang.String TABLENAME;
- }
- #-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
- #public static void dropTable(org.greenrobot.greendao.database.Database, boolean);
- #public static void createTable(org.greenrobot.greendao.database.Database, boolean);
- #}
-
- -keep class **$Properties
-
- # If you do not use SQLCipher:
- -dontwarn org.greenrobot.greendao.database.**
- # If you do not use Rx:
- -dontwarn rx.**
-
- #############RxJava RxAndroid#############
- -dontwarn sun.misc.**
- -dontwarn rx.internal.util.unsafe.**
- -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
- long producerIndex;
- long consumerIndex;
- }
- -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
- rx.internal.util.atomic.LinkedQueueNode producerNode;
- }
- -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
- rx.internal.util.atomic.LinkedQueueNode consumerNode;
- }
-
- -dontnote rx.internal.util.PlatformDependent
-
-
- #############Glide#############
- #https://github.com/bumptech/glide
- -dontwarn com.bumptech.glide.**
- -keep public class * implements com.bumptech.glide.module.GlideModule
- -keep public class * extends com.bumptech.glide.module.AppGlideModule
- -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
- **[] $VALUES;
- public *;
- }
-
- #############EventBus#############
- #http://greenrobot.org/eventbus/documentation/proguard
- -keepclassmembers class ** {
- @org.greenrobot.eventbus.Subscribe <methods>;
- }
- -keep enum org.greenrobot.eventbus.ThreadMode { *; }
-
- # Only required if you use AsyncExecutor
- -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
- <init>(java.lang.Throwable);
- }
-
- # compile 'org.greenrobot:eventbus:3.0.0'
- -keep class org.greenrobot.eventbus.** { *; }
- -keep interface org.greenrobot.eventbus.** { *; }
- -dontwarn org.greenrobot.eventbus.**
-
-
- #############Retrofit#############
- #https://github.com/square/retrofit
- -dontwarn retrofit2.**
- -keep class retrofit2.** { *; }
- -keepattributes Signature
- -keepattributes Exceptions
- -dontwarn okio.**
- -dontwarn javax.annotation.**
-
- #############################################################################################
- ######################## 以上第三方 ###############################
- #############################################################################################
-
-
- ######引用的其他Module可以直接在app的这个混淆文件里配置
-
-
- #####混淆保护自己项目的部分代码以及引用的第三方jar包library#######
- #如果在当前的application module或者依赖的library module中使用了第三方的库,并不需要显式添加规则
- #-libraryjars xxx
- #添加了反而有可能在打包的时候遭遇同一个jar多次被指定的错误,一般只需要添加忽略警告和保持某些class不被混淆的声明。
- #以libaray的形式引用了开源项目,如果不想混淆 keep 掉,在引入的module的build.gradle中设置minifyEnabled=false
- #-keep class com.nineoldandroids.** { *; }
- #-keep interface com.nineoldandroids.** { *; }
- #-dontwarn com.nineoldandroids.**
- ## 下拉刷新
- #-keep class in.srain.cube.** { *; }
- #-keep interface in.srain.cube.** { *; }
- #-dontwarn in.srain.cube.**
- ## observablescrollview:tab fragment
- #-keep class com.github.ksoichiro.** { *; }
- #-keep interface com.github.ksoichiro.** { *; }
- #-dontwarn com.github.ksoichiro.**
- #保护引用的第三方jar包不被混淆,在使用Eclipse+ADT时需要加入-libraryjars
- #-libraryjars libs/baidumapapi_v3_2_0.jar
-
-
-
- #############################################################################################
- ######################## 以下自己项目 #############################
- #############################################################################################
-
-
- #用到GSON解析的java Bean类不能混淆
- #如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。
- # Application classes that will be serialized/deserialized over Gson
- #例如 -keep class 包名.** { *; }
- #例如 -keep class com.matrix.app.entity.json.** { *; }
- #例如 -keep class com.matrix.appsdk.network.model.** { *; }
- -keep class **.bean.** { *; }
-
- #在不想混淆的方法、成员变量、类上使用@Keep注解
- -keepclasseswithmembers class * {
- @android.support.annotation.Keep <methods>;
- }
-
- -keepclasseswithmembers class * {
- @android.support.annotation.Keep <fields>;
- }
-
- -keepclasseswithmembers class * {
- @android.support.annotation.Keep <init>(...);
- }
build.gradle文件中配置
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。