# 代码混淆压缩比,在0~7之间,默认为5,一般不做修改 -optimizationpasses 5 # 混合时不使用大小写混合,混合后的类名为小写 -dontusemixedcaseclassnames # 指定不去忽略非公共库的类 -dontskipnonpubliclibraryclasses # 这句话能够使我们的项目混淆后产生映射文件 # 包含有类名->混淆后类名的映射关系 -verbose # 指定不去忽略非公共库的类成员 -dontskipnonpubliclibraryclassmembers # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。 -dontpreverify # 保留Annotation不混淆 -keepattributes *Annotation*,InnerClasses # 避免混淆泛型 -keepattributes Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法,一般不做更改 -optimizations !code/simplification/cast,!field/*,!class/merging/* ############################################# # # Android开发中一些需要保留的公共部分 # ############################################# # 保留我们使用的四大组件,自定义的Application等等这些类不被混淆 # 因为这些子类都有可能被外部调用 -keep public class * extends android.app.Activity -keep public class * extends android.app.Appliction -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 -keep public class com.android.vending.licensing.ILicensingService # 保留support下的所有类及其内部类 -keep class android.support.** {*;} #kotlin -keep class kotlin.** { *; } -keep class kotlin.Metadata { *; } -dontwarn kotlin.** -keepclassmembers class **$WhenMappings { ; } -keepclassmembers class kotlin.Metadata { public ; } -assumenosideeffects class kotlin.jvm.internal.Intrinsics { static void checkParameterIsNotNull(java.lang.Object, java.lang.String); } # 保留继承的 -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.support.annotation.** -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.** # 保留R下面的资源 -keep class **.R$* {*;} # 保留本地native方法不被混淆 -keepclasseswithmembernames class * { native ; } # 保留binding方法不被混淆 -keepclassmembers class ** implements androidx.viewbinding.ViewBinding { public static ** bind(***); public static ** inflate(***); } # 保留在Activity中的方法参数是view的方法, # 这样以来我们在layout中写的onClick就不会被影响 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } # 保留我们自定义控件(继承自View)不被混淆 -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); } # 保留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 public class * implements java.io.Serializable {*;} # 不混淆实体类 -keep class com.cheng.bole.bean.** { *; } -keep class com.cheng.bole.bean.db.** { *; } -keep class com.cheng.bole.net.model.** { *; } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } # 移除Log类打印各个等级日志的代码,打正式包的时候可以做为禁log使用,这里可以作为禁止log打印的功能使用 # 记得proguard-android.txt中一定不要加-dontoptimize才起作用 # 另外的一种实现方案是通过BuildConfig.DEBUG的变量来控制 -assumenosideeffects class android.util.Log { public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); } # fastJson -dontwarn com.alibaba.fastjson.** -keep class com.alibaba.fastjson.** { *; } -keepattributes *Annotation* # gson -keep class com.google.gson.reflect.TypeToken { *; } -keep class * extends com.google.gson.reflect.TypeToken -keepattributes AnnotationDefault,RuntimeVisibleAnnotations # 保留Gson核心类和方法,防止它们被混淆 -dontwarn sun.misc.** -keep class com.google.gson.** { *; } -keep class com.google.gson.examples.android.model.** { ; } -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer # 保持Gson序列化和反序列化所需的注解不被混淆 -keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault -keepclassmembernames class * { @com.google.gson.annotations.SerializedName ; } # 保持枚举类型的序列化兼容性 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 防止R8或ProGuard移除未使用的元素(如果这些元素是通过反射访问的,比如Gson) -keep class * { @com.google.gson.annotations.SerializedName *; } -keepclassmembers class com.example.base.extensions.GsonExtensionsKt { ; } -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName ; } # Glide -keep public class * implements com.bumptech.glide.module.GlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } # OkHttp3 -dontwarn com.squareup.okhttp3.** -keep class com.squareup.okhttp3.** { *;} -dontwarn okio.** # Okio -dontwarn com.squareup.** -dontwarn okio.** -keep public class org.codehaus.* { *; } -keep public class java.nio.* { *; } # Retrofit -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions # liveDataBus -dontwarn com.jeremyliao.liveeventbus.** -keep class com.jeremyliao.liveeventbus.** { *; } -keep class androidx.lifecycle.** { *; } -keep class androidx.arch.core.** { *; } # 微信 -keep class com.tencent.mm.opensdk.** { *; } -keep class com.tencent.wxop.** { *; } -keep class com.tencent.mm.sdk.** { *; } # 支付宝 -libraryjars libs/alipaysdk-15.8.03.210428205839.aar -keep class com.alipay.android.app.IAlixPay{*;} -keep class com.alipay.android.app.IAlixPay$Stub{*;} -keep class com.alipay.android.app.IRemoteServiceCallback{*;} -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;} -keep class com.alipay.sdk.app.PayTask{ public *;} -keep class com.alipay.sdk.app.AuthTask{ public *;} # 友盟 -keep class com.umeng.** {*;} -keep class org.repackage.** {*;} -keepclassmembers class * { public (org.json.JSONObject); } -keep public class com.chat.assistant.ai.R$*{ public static final int *; } #加载动画 -keep class com.wang.avi.** { *; } -keep class com.wang.avi.indicators.** { *; } #oss -keep class com.alibaba.sdk.android.oss.** { *; } -dontwarn okio.** -dontwarn org.apache.commons.codec.binary.** -keep class com.alibaba.idst.nui.*{*;} ##高德 #定位 -keep class com.amap.api.location.**{*;} -keep class com.amap.api.fence.**{*;} -keep class com.loc.**{*;} -keep class com.autonavi.aps.amapapi.model.**{*;} #地图 -keep class com.amap.api.maps.**{*;} -keep class com.autonavi.**{*;} -keep class com.amap.api.trace.**{*;} #2D地图 -keep class com.amap.api.maps2d.**{*;} -keep class com.amap.api.mapcore2d.**{*;} #搜索 -keep class com.amap.api.services.**{*;} #room -keep class androidx.room.** { *; } -keepclassmembers class * { @androidx.room.* ; @androidx.room.* ; } -keep interface com.cheng.bole.manager.db.* { *; } -keepclassmembers class * extends androidx.room.RoomDatabase { public (...); } -keep class com.hjq.permissions.** {*;} -keep class org.libpag.** {*;} -keep class androidx.exifinterface.** {*;} -dontwarn io.microshow.rxffmpeg.** -keep class io.microshow.rxffmpeg.**{*;} # 华为推送 -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.**{*;} #腾讯语音识别 -keepclasseswithmembernames class * { native ; } -keep public class com.tencent.cloud.qcloudasrsdk.* -dontwarn com.bun.miitmdid.interfaces.IIdentifierListener -dontwarn com.download.library.DownloadTask$DownloadTaskStatus -dontwarn com.google.j2objc.annotations.Weak -dontwarn com.oracle.svm.core.annotate.Delete -dontwarn com.oracle.svm.core.annotate.TargetClass -dontwarn com.sun.tools.javac.code.Attribute$UnresolvedClass -dontwarn com.sun.tools.javac.code.Type$ClassType -dontwarn javax.lang.model.SourceVersion -dontwarn javax.lang.model.element.AnnotationMirror -dontwarn javax.lang.model.element.AnnotationValue -dontwarn javax.lang.model.element.AnnotationValueVisitor -dontwarn javax.lang.model.element.Element -dontwarn javax.lang.model.element.ElementKind -dontwarn javax.lang.model.element.ExecutableElement -dontwarn javax.lang.model.element.Modifier -dontwarn javax.lang.model.element.Name -dontwarn javax.lang.model.element.NestingKind -dontwarn javax.lang.model.element.PackageElement -dontwarn javax.lang.model.element.TypeElement -dontwarn javax.lang.model.element.TypeParameterElement -dontwarn javax.lang.model.element.VariableElement -dontwarn javax.lang.model.type.DeclaredType -dontwarn javax.lang.model.type.TypeKind -dontwarn javax.lang.model.type.TypeMirror -dontwarn javax.lang.model.type.TypeVariable -dontwarn javax.lang.model.type.TypeVisitor -dontwarn javax.lang.model.util.Elements -dontwarn javax.lang.model.util.SimpleAnnotationValueVisitor7 -dontwarn javax.lang.model.util.SimpleTypeVisitor7 -dontwarn javax.lang.model.util.Types -dontwarn org.bouncycastle.asn1.gm.GMNamedCurves -dontwarn org.bouncycastle.asn1.x9.X9ECParameters -dontwarn org.bouncycastle.crypto.digests.SM3Digest -dontwarn org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey -dontwarn org.bouncycastle.jce.provider.BouncyCastleProvider -dontwarn org.bouncycastle.jce.spec.ECParameterSpec -dontwarn org.bouncycastle.jce.spec.ECPublicKeySpec -dontwarn org.bouncycastle.jsse.BCSSLParameters -dontwarn org.bouncycastle.jsse.BCSSLSocket -dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider -dontwarn org.bouncycastle.math.ec.ECCurve -dontwarn org.bouncycastle.math.ec.ECPoint -dontwarn org.bouncycastle.util.encoders.Hex -dontwarn org.conscrypt.Conscrypt$Version -dontwarn org.conscrypt.Conscrypt -dontwarn org.openjsse.javax.net.ssl.SSLParameters -dontwarn org.openjsse.javax.net.ssl.SSLSocket -dontwarn org.openjsse.net.ssl.OpenJSSE -dontwarn com.efs.sdk.base.core.config.GlobalInfo -dontwarn com.efs.sdk.base.core.config.GlobalInfoManager -dontwarn coil.compose.EqualityDelegate -dontwarn coil.compose.SingletonAsyncImageKt -dontwarn android.os.SystemProperties