# 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 # #-------------------------------------------基本不用动区域---------------------------------------------- # # # -----------------------------基本 ----------------------------- # 指定代码的压缩级别 0 - 7(指定代码进行迭代优化的次数,在Android里面默认是5,这条指令也只有在可以优化时起作用。) -optimizationpasses 5 # 混淆时不会产生形形色色的类名(混淆时不使用大小写混合类名) -dontusemixedcaseclassnames # 指定不去忽略非公共的库类(不跳过library中的非public的类) -dontskipnonpubliclibraryclasses # 指定不去忽略包可见的库类的成员 -dontskipnonpubliclibraryclassmembers #不对 class 进行优化,默认是开启优化的。由于优化会进行类合并、内联等,使用热修复的应用,建议关闭优化 #-dontoptimize # 不进行预校验,Android不需要,可加快混淆速度。 -dontpreverify # 屏蔽警告,暂不开启。用于抛出异常 #-ignorewarnings # 指定混淆是采用的算法,后面的参数是一个过滤器 # 这个过滤器是谷歌推荐的算法,一般不做更改 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* # 保护代码中的Annotation不被混淆 -keepattributes *Annotation*,InnerClasses,Signature,EnclosingMethod # 避免混淆泛型, 这在JSON实体映射时非常重要 -keepattributes Signature # 抛出异常时保留代码行号 -keepattributes SourceFile,LineNumberTable #优化时允许访问并修改有修饰符的类和类的成员,这可以提高优化步骤的结果。 # 比如,当内联一个公共的getter方法时,这也可能需要外地公共访问。 # 虽然java二进制规范不需要这个,要不然有的虚拟机处理这些代码会有问题。当有优化和使用-repackageclasses时才适用。 #指示语:不能用这个指令处理库中的代码,因为有的类和类成员没有设计成public ,而在api中可能变成public -allowaccessmodification # 混淆时记录日志(打印混淆的详细信息) # 这句话能够使我们的项目混淆后产生映射文件 # 包含有类名->混淆后类名的映射关系 -verbose # 保持测试相关的代码 -dontnote junit.framework.** -dontnote junit.runner.** -dontwarn android.test.** -dontwarn android.support.test.** -dontwarn org.junit.** # # ----------------------------- 默认保留 ----------------------------- # #---------------------------------------------------- # 保持哪些类不被混淆 #继承activity,application,service,broadcastReceiver,contentprovider....不进行混淆 -keep public class * extends android.app.Activity -keep public class * extends android.app.Fragment -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 -keep public class androidx.**{*;} -keep public class * extends androidx.**{*;} -keep interface androidx.**{*;} -dontwarn androidx.** -keep public class android.support.design.R$* { *; } -keep class com.google.android.material.**{*;} -dontwarn android.support.design.** -dontwarn com.google.android.material.** -keepclasseswithmembernames,allowshrinking class * { native ; } #这个主要是在layout 中写的onclick方法android:onclick="onClick",不进行混淆 #表示不混淆Activity中参数是View的方法 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } #表示不混淆枚举中的values()和valueOf()方法 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } #表示不混淆任何一个View中的setXxx()和getXxx()方法, #因为属性动画需要有相应的setter和getter的方法实现,混淆了就无法工作了。 -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); } #表示不混淆Parcelable -keep class * implements android.os.Parcelable { public static final android.os.Parcelable *; } # 这指定了继承Serizalizable的类的如下成员不被移除混淆 -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(); } # 保留R下面的资源 -keep class **.R$* { *; } #不混淆资源类下static的 -keepclassmembers class **.R$* { public static ; } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } #(可选)避免Log打印输出 -assumenosideeffects class android.util.Log { public static *** v(...); public static *** d(...); public static *** i(...); public static *** w(...); } #kotlin -keep class kotlin.* { *; } -keepclassmembernames class kotlinx.*{ volatile ; } -keep class kotlin.Metadata { *; } -dontwarn kotlin.* -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); } -keepclassmembers class kotlin.Metadata { *; } -keep @kotlin.Metadata class * -keepclasseswithmembers @kotlin.Metadata class * { *; } -keep class kotlinx.coroutines.android.** {*;} # ServiceLoader support -keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {} -keepnames class kotlinx.coroutines.CoroutineExceptionHandler {} -keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {} -keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {} -keep class android.telephony.TelephonyManager{*;} -keep class android.telephony.TelephonyManager$CellInfoCallback{*;} -dontwarn android.telephony.TelephonyManager -dontwarn org.apache.*.** -dontwarn org.dom4j.*.** -dontwarn com.pdager.*.** -dontwarn com.*.** -dontwarn javax.*.** -dontwarn android.support.** #----------------------------------------第三方库---------------------------------------------- #内置语音 V5.6.0之后 -keep class com.alibaba.mit.alitts.*{*;} -keep class com.alibaba.mit.alitts.ICallback$TtsEvent{*;} -keepclassmembers class com.alibaba.mit.alitts.ICallback$TtsEvent{*;} -keepnames class com.alibaba.mit.alitts.ICallback$TtsEvent{*;} -keepclassmembernames class com.alibaba.mit.alitts.ICallback$TtsEvent{*;} #-----高德地图----- #3D 地图 V5.0.0之后: -keep class com.amap.api.maps.**{*;} -keep class com.autonavi.**{*;} -keep class com.amap.api.trace.**{*;} #定位 -keep class com.loc.*{*;} -keep class com.amap.api.location.*{*;} -keep class com.amap.api.fence.*{*;} -keep class com.autonavi.aps.amapapi.model.**{*;} #搜索 -keep class com.amap.api.services.**{*;} #导航 -keep class com.amap.api.col.n3.*{*;} -keep class com.amap.api.navi.**{*;} -keep class com.alibaba.idst.nls.**{*;} -keep class com.nlspeech.nlscodec.NlsCodec2{*;} -keep class com.google.**{*;} #-----Gson----- -dontwarn sun.misc.** # Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { ; } # Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory, # JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter) -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 # Prevent R8 from leaving Data object members always null -keepclassmembers,allowobfuscation class * { @com.google.gson.annotations.SerializedName ; } #-----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{*;} # If you use the byType method to obtain Service, add the following rules to protect the interface: -keep interface * implements com.alibaba.android.arouter.facade.template.IProvider # If single-type injection is used, that is, no interface is defined to implement IProvider, the following rules need to be added to protect the implementation # -keep class * implements com.alibaba.android.arouter.facade.template.IProvider #-----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 *; } -keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder { *** rewind(); } #如果你的 target API 低于 Android API 27,请添加: -dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder #-----Okio----- # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. -dontwarn org.codehaus.mojo.animal_sniffer.* -dontwarn com.squareup.** -dontwarn okio.** #-----OkHttp----- # JSR 305 annotations are for embedding nullability information. -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 # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. -dontwarn org.codehaus.mojo.animal_sniffer.* # OkHttp platform used only on JVM and when Conscrypt dependency is available. -dontwarn okhttp3.internal.platform.ConscryptPlatform #-----Retrofit----- # Retrofit does reflection on method and parameter annotations. -keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations # Retain service method parameters when optimizing. -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } # Ignore annotation used for build tooling. -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement # Ignore JSR 305 annotations for embedding nullability information. -dontwarn javax.annotation.** # Guarded by a NoClassDefFoundError try/catch and only used when on the classpath. -dontwarn kotlin.Unit # Top-level functions that can only be used by Kotlin. -dontwarn retrofit2.KotlinExtensions -dontwarn retrofit2.KotlinExtensions$* # With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy # and replaces all potential values with null. Explicitly keeping the interfaces prevents this. -if interface * { @retrofit2.http.* ; } -keep,allowobfuscation interface <1> #-----ProtoBuf----- -keep class com.google.protobuf.** {*;} #-----flexbox----- -keepnames public class com.google.android.flexbox.FlexboxLayoutManager #-----zxing----- -dontwarn com.google.zxing.** -keep class com.google.zxing.**{*;} #-----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.** #-----EventBus----- -keepattributes *Annotation* -keepclassmembers class * { @org.greenrobot.eventbus.Subscribe ; } -keep enum org.greenrobot.eventbus.ThreadMode { *; } # And if you use AsyncExecutor: -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { (java.lang.Throwable); } #-----Netty----- -keepattributes Signature,InnerClasses -keep class io.netty.** {*;} -keep class org.apache.** {*;} -keep class org.apache.logging.**{*;} -keepclasseswithmembers class io.netty.** {*;} -keepclasseswithmembers class org.apache.logging.**{*;} -keep class org.apache.http.**{*;} -dontwarn io.netty.** -dontwarn sun.** #-----boostMultidex----- -keep class com.bytedance.boost_multidex.*{*;} -keep class com.bytedance.boost_multidex.BoostMultiDex{*;} -keep class com.bytedance.boost_multidex.Result{*;} #-----geohash----- -keep class ch.hsr.geohash.**{*;} #-----viewpagerIndicator----- -keep class com.zhpan.indicator.annotation.*{*;} #-----COS----- -keep class com.tencent.cos.xml.common.*{*;} -keep class com.tencent.cos.xml.model.**{*;} -keep class com.tencent.cos.xml.transfer.TaskStateMonitor{*;} -keep class com.tencent.cos.xml.transfer.TransferState{*;} -keep class com.tencent.cos.xml.CosXmlSimpleService{*;} -keep class com.tencent.cos.xml.LogServerProxy{*;} -keep class com.tencent.cos.xml.MTAProxy{*;} -keep class com.tencent.qcloud.core.auth.STSCredentialScope{*;} -keep class com.tencent.qcloud.core.http.HttpLoggingInterceptor.Level{*;} #-----WebSocket----- -keep class org.java_websocket.enums.*{*;} #-----ZhiDaoService----- -keep class com.zhidao.adasconfig.**{*;} -keep class com.zhidao.accountsdk.**{*;} -keep class com.zhidao.account.sdk.**{*;} -keep class com.zhidao.auto.platform.**{*;} -keep class com.zhidao.auto.carcorder.**{*;} -keep class com.zhidao.autopilotcore.*{*;} -keep class com.zhidao.autopilot.support.**{*;} -keep class com.zhidao.boot.**{*;} -keep class com.zhidao.cosupload.**{*;} -keep class com.zhidao.locupload.**{*;} -keep class com.zhidao.ptech.**{*;} -keep class com.zhidao.smartv2x.**{*;} -keep class com.zhidao.support.adas.high.**{*;} -keep class com.zhidao.socket.**{*;} -keep class com.zhidao.socketsdk.**{*;} -keep class com.zhidao.tcloginsdk.**{*;} -keep class com.zhidao.utils.**{*;} -keep class com.zhidao.voicesdk.**{*;} -keep class com.zhidaohulian.**{*;} -keep class com.elegant.**{*;} -dontwarn com.elegant.network.** -keep class net.jodah.typetools.TypeResolver{*;} -keep class net.jodah.typetools.TypeDescriptor{*;} -keep class com.bt.hd.link.*{*;} -keep class com.nwd.kernel.aidl.*{*;} -keep class com.nwd.radio.service.**{*;} -keep class com.pvetec.carcordersdk.**{*;} -keep class com.pvetec.ctrlcenter.resfocus.aidl.**{*;} -keep class gnu.trove.**{*;} -keep class org.eclipse.jetty.alpn.ALPN$ClientProvider{*;} -keep class org.eclipse.jetty.npn.NextProtoNego$ClientProvider{*;} -keep class org.eclipse.jetty.npn.NextProtoNego$ServerProvider{*;} -keep class org.eclipse.jetty.alpn.ALPN$ServerProvider{*;} -keep class org.jboss.marshalling.ByteOutput{*;} -keep class org.jboss.marshalling.ByteInput{*;} -keep class org.conscrypt.AllocatedBuffer{*;} -keep class org.conscrypt.HandshakeListener{*;} -keep class org.conscrypt.BufferAllocator{*;} -keep class com.squareup.haha.guava.collect.*{*;}