# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # 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 -keepclassmembers class fqcn.of.javascript.interface.for.webview { public *; } #webView js调用不混淆,否则取不到数据 -keepclassmembers class com.zyp.ui.WebActivity$* { ; } #shrink,测试后发现会将一些无效代码给移除,即没有被显示调用的代码,该选项 表示 不启用 shrink。 #-dontshrink #指定重新打包,所有包重命名,这个选项会进一步模糊包名,将包里的类混淆成n个再重新打包到一个个的package中 #-flattenpackagehierarchy #优化时允许访问并修改有修饰符的类和类的成员 -allowaccessmodification #不跳过(混淆) jars中的 非public classes 默认选项 -dontskipnonpubliclibraryclassmembers #忽略警告 -ignorewarnings #指定代码的压缩级别 -optimizationpasses 5 #不使用大小写混合类名 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #不启用优化 不优化输入的类文件 -dontoptimize #不预校验 -dontpreverify #混淆时是否记录日志 -verbose #混淆时所采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* #保护注解 -renamesourcefileattribute SourceFile #保持源文件和行号的信息,用于混淆后定位错误位置 -keepattributes SourceFile,LineNumberTable #保持含有Annotation字符串的 attributes -keepattributes *Annotation* #过滤泛型 -keepattributes Signature -keepattributes Exceptions,InnerClasses -dontwarn org.apache.** -dontwarn android.support.** #基础配置 # 保持哪些类不被混淆 # 系统组件 -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 #自定义View -keep public class * extends android.view.View # V4,V7 -keep class android.support.constraint.**{ *; } #-keep class android.support.v4.**{ *; } -keep class android.support.v7.**{ *; } -keep class android.webkit.**{*;} -keep interface android.support.v4.app.** { *; } #保持 本化方法及其类声明 -keepclasseswithmembers class * { native ; } #保持view的子类成员: getter setter -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } #保持Activity的子类成员:参数为一个View类型的方法 如setContentView(View v) -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } #保持枚举类的成员:values方法和valueOf (每个enum 类都默认有这两个方法) -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #保持Parcelable的实现类和它的成员:类型为android.os.Parcelable$Creator 名字任意的 属性 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #保持 任意包名.R类的类成员属性。 即保护R文件中的属性名不变 -keepclassmembers class **.R$* { public static ; } # 记录生成的日志数据,在 proguard 目录下 -dump class_files.txt -printseeds seeds.txt -printusage unused.txt -printmapping mapping.txt -keepclasseswithmembernames class * { native ; } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; } -dontwarn java.util.** -keep class java.util.** {*; } -dontwarn org.apache.http.** -keep class org.apache.http.** {*; } -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(); } -keep public class * implements java.io.Serializable {*;} -keepclassmembers class **.R$* { public static ; } # GreenDao -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { public static java.lang.String TABLENAME; } -keep class **$Properties # If you do not use SQLCipher: -dontwarn org.greenrobot.greendao.database.** # If you do not use Rx: -dontwarn rx.** # Picasso -dontwarn com.squareup.okhttp.** # okHttp -dontwarn okhttp3.** -dontwarn 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 # 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.ImageHeaderParser$** { **[] $VALUES; public *; } # ======================= activation.jar ============================= -dontwarn javax.activation.** -keep class javax.activation.**{*;} -dontwarn com.sun.activation.registries.** -keep class com.sun.activation.registries.**{*;} # ======================= additionnal.jar ============================ -dontwarn myjava.awt.datatransfer.** -keep class myjava.awt.datatransfer.**{*;} -dontwarn org.apache.harmony.** -keep class org.apache.harmony.**{*;} # ======================= RxAndroid,RxJava =========================== -dontwarn sun.misc.** -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; } # ======================= arxlib ===================================== -dontwarn com.github.xy02.arxlib.** -keep class com.github.xy02.arxlib.**{*;} # ======================= mail.jar =================================== -keep class com.sun.mail.**{*;} -keep class javax.mail.**{*;} # ======================= TaxiApp Keep ================================ -keep class net.sysolution.taxiapp.localserver.**{*;} -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); } # ======================= GSYVideoPlayer ================================ -keep class com.shuyu.gsyvideoplayer.video.** { *; } -dontwarn com.shuyu.gsyvideoplayer.video.** -keep class com.shuyu.gsyvideoplayer.video.base.** { *; } -dontwarn com.shuyu.gsyvideoplayer.video.base.** -keep class com.shuyu.gsyvideoplayer.utils.** { *; } -dontwarn com.shuyu.gsyvideoplayer.utils.** -keep class tv.danmaku.ijk.** { *; } -dontwarn tv.danmaku.ijk.** -keep public class * extends android.view.View{ *** get*(); void set*(***); public (android.content.Context); public (android.content.Context, android.util.AttributeSet); public (android.content.Context, android.util.AttributeSet, int); }