#混淆规则参考 https://www.jianshu.com/p/f3455ecaa56e #keep 保留类和类中的成员,防止被混淆或移除 #keepnames 保留类和类中的成员,防止被混淆,成员没有被引用会被移除 #keepclassmembers 只保留类中的成员,防止被混淆或移除 #keepclassmembernames 只保留类中的成员,防止被混淆,成员没有引用会被移除 #keepclasseswithmembers 保留类和类中的成员,防止被混淆或移除,保留指明的成员 #keepclasseswithmembernames 保留类和类中的成员,防止被混淆,保留指明的成员,成员没有引用会被移除 # >>>>>>>>>>>>>>>----------基本不用动区域---------->>>>>>>>>>>>>>> #----------------------基本指令区----------------- #1.基本指令区 # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改 -optimizationpasses 5 # 混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不进行优化,建议使用此选项, -dontoptimize # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify 能够加快混淆速度。 -dontpreverify # 使我们的项目混淆后产生映射文件包含有类名->混淆后类名的映射关系 -verbose # 屏蔽警告 -ignorewarnings # 指定混淆是采用的算法,后面的参数是一个过滤器这个过滤器是谷歌推荐的算法,一般不做更改 -optimizations !code/simplification/cast,!field/*,!class/merging/* # 保留Annotation不混淆 -keepattributes *Annotation* # 避免混淆泛型 -keepattributes Signature # 保持反射不被混淆 -keepattributes EnclosingMethod #避免混淆内部类 -keepattributes InnerClasses ##dump文件列出apk包内所有class的内部结构 #-dump class_files.txt ##seeds.txt文件列出未混淆的类和成员 #-printseeds seeds.txt ##usage.txt文件列出从apk中删除的代码 #-printusage unused.txt # 使用printmapping指定映射文件的名称 -printmapping proguardMapping.txt #忽略警告 #-ignorewarnings #避免混淆Android基本组件,下面是兼容性比较高的规则 -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 * extends android.view.View #不提示V4包下错误警告 -dontwarn android.support.v4.** #保持下面的V4兼容包的类不被混淆 -keep class android.support.v4.**{*;} -keep public class * extends android.support.v4.** -keep public class * extends android.app.Fragment #保持Activity中与View相关方法不被混淆 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } #避免混淆所有native的方法,涉及到C、C++ -keepclasseswithmembernames class * { native ; } #避免混淆自定义控件类的get/set方法和构造函数 -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); } -keepclasseswithmembers class * { public (android.content.Context, android.util.AttributeSet); public (android.content.Context, android.util.AttributeSet, int); } #避免混淆枚举类 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 保留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; !static !transient ; !private ; !private ; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep class **.R$* {*;} #不混淆资源类下static的 -keepclassmembers class **.R$* { public static ; } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } #Webview 相关不混淆 -keepclassmembers class fqcn.of.javascript.interface.for.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, java.lang.String); } #使用GSON、fastjson等框架时,所写的JSON对象类不混淆,否则无法将JSON解析成对应的对象 -keepclassmembers class * { public (org.json.JSONObject); } #避免混淆注解类 -dontwarn android.annotation #(可选)避免Log打印输出 -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); public static *** e(...); } # <<<<<<<<<<<<<<<----------基本不用动区域 end ----------<<<<<<<<<<<<<<< # EventBus -keepclassmembers class ** { @org.greenrobot.eventbus.Subscribe ; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { (java.lang.Throwable); } # Glide -dontwarn com.bumptech.glide.** -keep class 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 *; } # Gson -dontwarn sun.misc.** -keep class sun.misc.Unsafe { *; } -keep class com.google.gson.examples.android.model.** { ; } -keep class * extends com.google.gson.TypeAdapter -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName ; } -keep class com.google.gson.reflect.TypeToken { *; } -keep class * extends com.google.gson.reflect.TypeToken -keepattributes AnnotationDefault,RuntimeVisibleAnnotations # AndroidX混淆 -keep class com.google.android.material.** {*;} -keep class androidx.** {*;} -keep public class * extends androidx.** -keep interface androidx.** {*;} -dontwarn com.google.android.material.** -dontnote com.google.android.material.** -dontwarn androidx.** # OkHttp3 -dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.** { *;} -dontwarn okhttp3.** -dontwarn okio.** # Retrofit -dontnote retrofit2.Platform$IOS$MainThreadExecutor -keepattributes Exceptions -dontwarn retrofit2.** -keep class retrofit2.** { *; } # RxJava RxAndroid -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; } -dontnote rx.internal.util.PlatformDependent # RxJava 类和方法,以及它们的混淆规则 #io.reactivex 包下的类需要保持不被混淆,可以使用以下规则: -keep class io.reactivex.** { *; } #io.reactivex.disposables 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.disposables.** { *; } #io.reactivex.functions 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.functions.** { *; } #io.reactivex.schedulers 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.schedulers.** { *; } #io.reactivex.subjects 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.subjects.** { *; } #io.reactivex.plugins 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.plugins.** { *; } #io.reactivex.internal.util 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.internal.util.** { *; } #io.reactivex.internal.schedulers 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.internal.schedulers.** { *; } #io.reactivex.internal.operators 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.internal.operators.** { *; } #io.reactivex.internal.disposables 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.internal.disposables.** { *; } #io.reactivex.internal.subscribers 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.internal.subscribers.** { *; } #io.reactivex.observables 包下的类需要保持不被混淆: -keep class io.reactivex.rxjava3.observables.** { *; } # -keep class org.joda.time.**{ *; } # ARouter -keep public class com.alibaba.android.arouter.routes.**{*;} -keep public class com.alibaba.android.arouter.facade.**{*;} -keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;} # 如果使用了 byType 的方式获取 Service,需添加下面规则,保护接口 -keep interface * implements com.alibaba.android.arouter.facade.template.IProvider # 如果使用了 单类注入,即不定义接口实现 IProvider,需添加下面规则,保护实现 -keep class * implements com.alibaba.android.arouter.facade.template.IProvider -keep class com.techscan.modulebase.constants.ConstantRouter.** { *; } -keep class com.techscan.modulebase.constants.Constants.** { *; } -keep class com.techscan.modulebase.base.bean.** { *; } -keep class com.techscan.modulebase.printutils.bean.** { *; } -keep class com.techscan.modulebase.ui.widget.** { *; } -keep class * implements com.alibaba.android.arouter.facade.template.IProvider{*;} -keep class * implements com.alibaba.android.arouter.facade.template.IInterceptor{*;} #Fastjson -keepclassmembers @com.alibaba.fastjson2.annotation.JSONCreator class * -keepclassmembers @com.alibaba.fastjson2.annotation.JSONField class * { (...); } -keep class com.alibaba.fastjson2.** { *; } -keep class com.alibaba.fastjson2.** #更新apk框架 -keep class com.xuexiang.xupdate.entity.** { *; } #注意,如果你使用的是自定义Api解析器解析,还需要给你自定义Api实体配上混淆,如下是本demo中配置的自定义Api实体混淆规则: -keep class com.xuexiang.xupdatedemo.entity.** { *; } # 权限请求框架 -keep class com.hjq.permissions.** {*;} #腾讯TBS #-dontwarn dalvik.** #-dontwarn com.tencent.smtt.** #-keep class com.tencent.smtt.** { # *; #} #-keep class com.tencent.tbs.** { # *; #} # DialogX https://github.com/kongzue/DialogX/wiki/ -keep class com.kongzue.dialogx.** { *; } -dontwarn com.kongzue.dialogx.** # 额外的,建议将 android.view 也列入 keep 范围: -keep class android.view.** { *; } # 若启用模糊效果,请增加如下配置: -dontwarn androidx.renderscript.** -keep public class androidx.renderscript.** { *; } -keep class com.luck.picture.lib.** { *; } -keep class com.luck.lib.camerax.** { *; } -dontwarn com.yalantis.ucrop** -keep class com.yalantis.ucrop** { *; } -keep interface com.yalantis.ucrop** { *; } #---------------------------------忽略一些警告------------------------------- # Please add these rules to your existing keep rules in order to suppress warnings. # This is generated automatically by the Android Gradle plugin. -dontwarn android.content.pm.PackageManager$ResolveInfoFlags -dontwarn com.google.android.gms.tasks.OnFailureListener -dontwarn com.google.android.gms.tasks.OnSuccessListener -dontwarn com.google.android.gms.tasks.Task -dontwarn com.google.mlkit.vision.barcode.BarcodeScanner -dontwarn com.google.mlkit.vision.barcode.BarcodeScannerOptions$Builder -dontwarn com.google.mlkit.vision.barcode.BarcodeScannerOptions -dontwarn com.google.mlkit.vision.barcode.BarcodeScanning -dontwarn com.google.mlkit.vision.common.InputImage -dontwarn com.google.auto.service.AutoService -dontwarn javax.lang.model.SourceVersion -dontwarn javax.lang.model.element.Element -dontwarn javax.lang.model.element.Modifier -dontwarn javax.lang.model.type.TypeMirror -dontwarn javax.ws.rs.Consumes -dontwarn javax.ws.rs.Produces -dontwarn javax.ws.rs.core.Response -dontwarn javax.ws.rs.core.StreamingOutput -dontwarn javax.ws.rs.ext.MessageBodyReader -dontwarn javax.ws.rs.ext.MessageBodyWriter -dontwarn javax.ws.rs.ext.Provider -dontwarn javax.ws.rs.ext.Providers -dontwarn org.glassfish.jersey.internal.spi.AutoDiscoverable -dontwarn org.joda.convert.** -dontwarn org.joda.time.** -dontwarn com.alibaba.fastjson2.** -dontwarn com.alibaba.fastjson.**