第三方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