You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
354 lines
13 KiB
354 lines
13 KiB
#混淆规则参考 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 <methods>;
|
|
}
|
|
|
|
#避免混淆自定义控件类的get/set方法和构造函数
|
|
-keep public class * extends android.view.View{
|
|
*** get*();
|
|
void set*(***);
|
|
public <init>(android.content.Context);
|
|
public <init>(android.content.Context,android.util.AttributeSet);
|
|
public <init>(android.content.Context,android.util.AttributeSet,int);
|
|
}
|
|
-keepclasseswithmembers class * {
|
|
public <init>(android.content.Context, android.util.AttributeSet);
|
|
public <init>(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 <fields>;
|
|
!private <fields>;
|
|
!private <methods>;
|
|
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 <fields>;
|
|
}
|
|
# 对于带有回调函数的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 <init>(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 <methods>;
|
|
}
|
|
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
|
|
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
|
|
<init>(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.** { <fields>; }
|
|
-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 <fields>;
|
|
}
|
|
|
|
-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 * {
|
|
<init>(...);
|
|
}
|
|
-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.**
|