# 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 #保留我们使用的四大组件,自定义的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.** {*;} # 保留继承的 -keep public class * extends android.support.v4.** -keep public class * extends android.support.v7.** -keep public class * extends android.support.annotation.** # 保留R下面的资源 -keep class **.R$* {*;} # 保留本地native方法不被混淆 -keepclasseswithmembernames class * { native ; } # 保留在Activity中的方法参数是view的方法, # 这样以来我们在layout中写的onClick就不会被影响 -keepclassmembers class * extends android.app.Activity{ public void *(android.view.View); } # 保留枚举类不被混淆 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 保留我们自定义控件(继承自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(); } # 对于带有回调函数的onXXEvent、**On*Listener的,不能被混淆 -keepclassmembers class * { void *(**On*Event); void *(**On*Listener); } -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.** #me.jessyan:autosize:1.1.2 -keep class me.jessyan.autosize.** { *; } -keep interface me.jessyan.autosize.** { *; } #com.hjq:xxpermissions:9.6 -dontwarn com.hjq.permissions.** -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao { public static java.lang.String TABLENAME; } -keep class **$Properties { *; } # If you DO use SQLCipher: -keep class org.greenrobot.greendao.database.SqlCipherEncryptedHelper { *; } # If you do NOT use SQLCipher: -dontwarn net.sqlcipher.database.** # If you do NOT use RxJava: -dontwarn rx.** -dontwarn com.jeremyliao.liveeventbus.** -keep class com.jeremyliao.liveeventbus.** { *; } -keep class androidx.lifecycle.** { *; } -keep class androidx.arch.core.** { *; } -dontwarn com.kingja.loadsir.** -keep class com.kingja.loadsir.** {*;} -keep class com.tencent.** {*;} -keep class com.tencent.mmkv.** {*;} -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** { *; } # Fastjson 混淆规则 -keep public class com.alibaba.fastjson.JSON { public static ** toJSONString(**); public static ** parseObject(**); public static ** parseArray(**); public static ** parse(**); } -keep public class com.alibaba.fastjson.** { public (org.json.JSONObject); } -keep public class * implements com.alibaba.fastjson.serializer.ObjectSerializer { public (); } -keep public class * implements com.alibaba.fastjson.parser.deserializer.ObjectDeserializer { public (); } -keep class com.alibaba.fastjson.parser.ParserConfig { public (); public static void putDeserializer(java.lang.Class, com.alibaba.fastjson.parser.deserializer.ObjectDeserializer); } -keep class com.alibaba.fastjson.serializer.SerializeConfig { public (); public static void putSerializer(java.lang.Class, com.alibaba.fastjson.serializer.ObjectSerializer); } -keep class com.alibaba.fastjson.util.TypeUtils { public static void register(java.lang.Class, java.lang.Class); } # 如果使用了AutoType的功能,需要保留下面的类不被混淆 -keepattributes Signature -keepattributes *Annotation* -keepclassmembers class * { @com.alibaba.fastjson.annotation.JSONField ; @com.alibaba.fastjson.annotation.JSONType ; } # 如果使用了enum类型的序列化,需要保留enum的名字 -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } # 如果使用了ASM的ClassGenerator,需要保留下面的类不被混淆 -dontnote com.alibaba.fastjson.asm.** -keep class com.alibaba.fastjson.asm.** { *; } ##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.AppGlideModule -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { **[] $VALUES; public *; } -keep class com.hjq.permissions.** {*;} #Bugly -dontwarn com.tencent.bugly.** -keep public class com.tencent.bugly.**{*;} # OkHttp3 -keepattributes Signature -keepattributes *Annotation* -keep class okhttp3.** { *; } -keep interface okhttp3.** { *; } -dontwarn okhttp3.** -dontwarn okio.** # EasyHttp -keep class com.hjq.http.** {*;} # 必须要加上此规则,否则会导致泛型解析失败 -keep public class * implements com.hjq.http.listener.OnHttpListener { *; } # 不混淆这个包下的类 -keep class com.snc.base.http.** { ; }