# Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in E:\workApp\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 *; #} ######################## 通用配置 ################################### #指定代码的压缩级别 -optimizationpasses 5 #包明不混合大小写 -dontusemixedcaseclassnames #不去忽略非公共的库类 -dontskipnonpubliclibraryclasses #优化 不优化输入的类文件 -dontoptimize #预校验 -dontpreverify #混淆时是否记录日志 -verbose # 混淆时所采用的算法 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 保持哪些类不被混淆 -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 #如果有引用v4包可以添加下面这行 -keep public class * extends androidx.fragment.app.Fragment -ignorewarnings #如果引用了v4或者v7包 -dontwarn android.support.** ####混淆保护自己项目的部分代码以及引用的第三方jar包library-end#### # 视频播放库 com.shuyu: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); } #保持 native 方法不被混淆 -keepclasseswithmembernames class * { native ; } #保持自定义控件类不被混淆 -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } #保持自定义控件类不被混淆 -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } -keep public class * extends android.view.View { public (android.content.Context); public (android.content.Context, android.util.AttributeSet); public (android.content.Context, android.util.AttributeSet, int); public void set*(...); } #保持 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 ; !private ; !private ; 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); } -keepclassmembers class * { public void *ButtonClicked(android.view.View); } #不混淆资源类 -keepclassmembers class **.R$* { public static ; } #避免混淆泛型 如果混淆报错建议关掉 #-keepattributes Signature ####################### 常用第三方模块的混淆选项 ################################### #gson #如果用用到Gson解析包的,直接添加下面这几行就能成功混淆,不然会报错。 #保护注解 -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod # Gson specific classes -keep class sun.misc.Unsafe { *; } # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.** { *; } -keep class com.google.gson.stream.** { *; } #butterknife -keep class butterknife.** { *; } -dontwarn butterknife.internal.** -keep class **$$ViewBinder { *; } -keepclasseswithmembernames class * { @butterknife.* ; } -keepclasseswithmembernames class * { @butterknife.* ; } #Glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } -keep class com.bumptech.glide.** { *; } #-keepresourcexmlelements manifest/application/meta-data@value=GlideModule # 如果使用了Gson之类的工具要使被它解析的JavaBean类即实体类不被混淆。 -keep class net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.** { *; } #rx -keep class rx.** { *; } #retrofit -keep class retrofit2.** { *; } #guava -keep class com.google.common.base.** { *; } #chart -keep class com.github.PhilJay.** { *; } #materialdialogs -keep class com.afollestad.materialdialogs.** { *; } #日历控件 github > material-calendarview -keep class com.prolificinteractive.** { *; } #log4j -keep class org.apache.log4j.** { *; } -dontwarn org.apache.log4j.** #baidu -keep class com.baidu.** {*;} -keep class vi.com.** {*;} -dontwarn com.baidu.** #baidu yuyin -keep class com.baidu.speech.**{*;} -keep class com.baidu.tts.**{*;} -keep class com.baidu.speechsynthesizer.**{*;} ##umeng push -dontwarn com.taobao.** -dontwarn anet.channel.** -dontwarn anetwork.channel.** -dontwarn org.android.** -dontwarn org.apache.thrift.** -dontwarn com.xiaomi.** -dontwarn com.huawei.** -keepattributes *Annotation* -keep class com.taobao.** {*;} -keep class org.android.** {*;} -keep class anet.channel.** {*;} -keep class com.umeng.** {*;} -keep class com.xiaomi.** {*;} -keep class com.huawei.** {*;} -keep class org.apache.thrift.** {*;} -keep class com.alibaba.sdk.android.**{*;} -keep class com.ut.**{*;} -keep class com.ta.**{*;} -keep public class **.R$*{ public static final int *; } #jiguang -dontoptimize -dontpreverify -keepattributes EnclosingMethod,Signature -dontwarn cn.jpush.** -keep class cn.jpush.** { *; } -dontwarn cn.jiguang.** -keep class cn.jiguang.** { *; } -keepclassmembers class ** { public void onEvent*(**); } -keep class sj.qqkeyboard.** { *; } -keep class com.sj.emoji.** { *; } -keep class com.testemticon.** { *; } -keep class jiguang.chat.** { *; } #========================gson================================ -dontwarn com.google.** -keep class com.google.gson.** {*;} -keep class com.google.code.gson.** {*;} #========================protobuf================================ -keep class com.google.protobuf.** {*;} #-optimizationpasses 7 #-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -dontoptimize -dontusemixedcaseclassnames -verbose -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -dontwarn dalvik.** #-overloadaggressively # ------------------ Keep LineNumbers and properties ---------------- # -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod # -------------------------------------------------------------------------- #------------------ 下方是android平台自带的排除项,这里不要动 ---------------- -keep public class * extends android.app.Activity{ public ; public ; } -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 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet, int); } -keepattributes *Annotation* -keepclasseswithmembernames class *{ native ; } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } #------------------ 下方是共性的排除项目 ---------------- # 方法名中含有“JNI”字符的,认定是Java Native Interface方法,自动排除 # 方法名中含有“JRI”字符的,认定是Java Reflection Interface方法,自动排除 -keepclasseswithmembers class * { ... *JNI*(...); } -keepclasseswithmembernames class * { ... *JRI*(...); } -keep class **JNI* {*;} -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; } -keep class net.sourceforge.pinyin4j.** { *; } # 华为push -ignorewarnings -keepattributes *Annotation* -keepattributes Exceptions -keepattributes InnerClasses -keepattributes Signature -keepattributes SourceFile,LineNumberTable -keep class com.huawei.hianalytics.**{*;} -keep class com.huawei.updatesdk.**{*;} -keep class com.huawei.hms.**{*;} # 图片选择器 -keep class com.luck.picture.lib.** { *; } # use Camerax -keep class com.luck.lib.camerax.** { *; } # use uCrop -dontwarn com.yalantis.ucrop** -keep class com.yalantis.ucrop** { *; } -keep interface com.yalantis.ucrop** { *; }