第三方aar 的包,也是可以先混淆的,也可以在自己的项目中配置proguard 。然后合入主项目
混淆规则
常用的混淆规则
保持这个包以外的东西不混淆-keep class !com.wang.**,** {*;}#-dontwarn **
#一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆;-keep class com.thc.test.*#两颗星表示把本包和所含子包下的类名都保持;-keep class com.thc.test.**#匹配这个类里面所有的东西不被混淆-keep class com.thc.test.*{*;}既可以保持该包及子包下的类名,又可以保持类里面的内容不被混淆;-keep class com.thc.test.**{*;}保持类中特定内容,而不是所有的内容可以使用如下-keep class com.thc.gradlestudy.MyProguardBean{<init>; #匹配所有构造器<fields>;#匹配所有域<methods>;#匹配所有方法}# 有关于 限定符 public private 作用域-keep class com.xlpay.sqlite.cache.BaseDaoImpl{public <methods>;#保持该类下所有的共有方法不被混淆public *;#保持该类下所有的共有内容不被混淆private <methods>;#保持该类下所有的私有方法不被混淆private *;#保持该类下所有的私有内容不被混淆public <init>(java.lang.String);#保持该类的String类型的构造方法}# 限定符 的用法#在方法后加入参数,限制特定的方法(经测试:仅限于构造方法可以混淆)-keep class com.thc.gradlestudy.MyProguardBean{public <init>(String);}
# 指定Keep类名不被混淆,类中的方法和成员仍然会被混淆-keep class site.hanschen.proguard.Keep# 指定Keep类名不被混淆,且Keep的sayHello方法和成员helloStr不被混淆-keep class site.hanschen.proguard.Keep {public void sayHello();private static final java.lang.String helloStr;}# 指定Keepclassmembers的sayHello方法不被混淆,注意Keepclassmembers的类名仍然会被混淆-keepclassmembers class site.hanschen.proguard.Keepclassmembers {public void sayHello();}# 通过成员来指定哪些类的类名和成员不被混淆-keepclasseswithmembers public class site.hanschen.proguard.keepclasseswithmembers {public static void main(java.lang.String[]);}# 如果指定了多条规则,如下,那么必须同时包含 sayHello 和 main 两个方法的类才会被保留-keepclasseswithmembers public class site.hanschen.proguard.keepclasseswithmembers {public static void main(java.lang.String[]);public void sayHello();}# 指定 keepnames 类名以及 sayHello 方法不被混淆,但需要注意的是,若 sayHello 方法未被使用,会在压缩阶段被移除掉-keepnames public class site.hanschen.proguard.keepnames {public void sayHello();}
- -keep public class * 只保证类名不被混淆,构造方法、普通方法、属性都会被混淆、或者移除。构造方法、普通方法,都是方法,都有可能被移除的,移除构造方法的条件是,没有new过
- -keepclassmembers class * 只保证配置的方法或属性不被移除和混淆,类名会被混淆
- -keepclasseswithmembers class * extends 保证类名和配置项不会被移除和混淆
关于这几个的典型用法1.保持 - 保留班级2keepclassmembers - 保留类成员,例如fields&amp;方法3keepclasseswithmembers - 如果类满足基于成员的某些条件1 保留所有扩展android.app.Activity的类-keep public class * extends android.app.Activity)如果他们正在实现android.os.Parcelable,则保留所有名为CREATOR的成员(静态字段)-keepclassmembers class * implements android.os.Parcelable {static ** CREATOR;}3)如果它们具有带有参数(Context,AttributeSet)或(Context,AttributeSet,int)的构造函数(下面称为init),则保留所有类。-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);}-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet, int);}
作者:SmarkingZhao
链接:
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
混淆规则 2
https://www.jianshu.com/p/546733072d8d
只混淆其中一个包
https://blog.csdn.net/weimingjue/article/details/84976058
