第三方aar 的包,也是可以先混淆的,也可以在自己的项目中配置proguard 。然后合入主项目

    混淆规则
    常用的混淆规则

    1. 保持这个包以外的东西不混淆
    2. -keep class !com.wang.**,** {*;}
    3. #-dontwarn **
    1. #一颗星表示只是保持该包下的类名,而子包下的类名还是会被混淆;
    2. -keep class com.thc.test.*
    3. #两颗星表示把本包和所含子包下的类名都保持;
    4. -keep class com.thc.test.**
    5. #匹配这个类里面所有的东西不被混淆
    6. -keep class com.thc.test.*{*;}
    7. 既可以保持该包及子包下的类名,又可以保持类里面的内容不被混淆;
    8. -keep class com.thc.test.**{*;}
    9. 保持类中特定内容,而不是所有的内容可以使用如下
    10. -keep class com.thc.gradlestudy.MyProguardBean{
    11. <init>; #匹配所有构造器
    12. <fields>;#匹配所有域
    13. <methods>;#匹配所有方法
    14. }
    15. # 有关于 限定符 public private 作用域
    16. -keep class com.xlpay.sqlite.cache.BaseDaoImpl{
    17. public <methods>;#保持该类下所有的共有方法不被混淆
    18. public *;#保持该类下所有的共有内容不被混淆
    19. private <methods>;#保持该类下所有的私有方法不被混淆
    20. private *;#保持该类下所有的私有内容不被混淆
    21. public <init>(java.lang.String);#保持该类的String类型的构造方法
    22. }
    23. # 限定符 的用法
    24. #在方法后加入参数,限制特定的方法(经测试:仅限于构造方法可以混淆)
    25. -keep class com.thc.gradlestudy.MyProguardBean{
    26. public <init>(String);
    27. }
    1. # 指定Keep类名不被混淆,类中的方法和成员仍然会被混淆
    2. -keep class site.hanschen.proguard.Keep
    3. # 指定Keep类名不被混淆,且KeepsayHello方法和成员helloStr不被混淆
    4. -keep class site.hanschen.proguard.Keep {
    5. public void sayHello();
    6. private static final java.lang.String helloStr;
    7. }
    8. # 指定KeepclassmemberssayHello方法不被混淆,注意Keepclassmembers的类名仍然会被混淆
    9. -keepclassmembers class site.hanschen.proguard.Keepclassmembers {
    10. public void sayHello();
    11. }
    12. # 通过成员来指定哪些类的类名和成员不被混淆
    13. -keepclasseswithmembers public class site.hanschen.proguard.keepclasseswithmembers {
    14. public static void main(java.lang.String[]);
    15. }
    16. # 如果指定了多条规则,如下,那么必须同时包含 sayHello main 两个方法的类才会被保留
    17. -keepclasseswithmembers public class site.hanschen.proguard.keepclasseswithmembers {
    18. public static void main(java.lang.String[]);
    19. public void sayHello();
    20. }
    21. # 指定 keepnames 类名以及 sayHello 方法不被混淆,但需要注意的是,若 sayHello 方法未被使用,会在压缩阶段被移除掉
    22. -keepnames public class site.hanschen.proguard.keepnames {
    23. public void sayHello();
    24. }
    • -keep public class * 只保证类名不被混淆,构造方法、普通方法、属性都会被混淆、或者移除。构造方法、普通方法,都是方法,都有可能被移除的,移除构造方法的条件是,没有new过
    • -keepclassmembers class * 只保证配置的方法或属性不被移除和混淆,类名会被混淆
    • -keepclasseswithmembers class * extends 保证类名和配置项不会被移除和混淆
    1. 关于这几个的典型用法
    2. 1.保持 - 保留班级
    3. 2keepclassmembers - 保留类成员,例如fieldsamp;方法
    4. 3keepclasseswithmembers - 如果类满足基于成员的某些条件
    5. 1 保留所有扩展android.app.Activity的类
    6. -keep public class * extends android.app.Activity
    7. )如果他们正在实现android.os.Parcelable
    8. ,则保留所有名为CREATOR的成员(静态字段)
    9. -keepclassmembers class * implements android.os.Parcelable {
    10. static ** CREATOR;
    11. }
    12. 3)如果它们具有带有参数(ContextAttributeSet)或(ContextAttributeSetint)的构造函数(下面称为init),则保留所有类。
    13. -keepclasseswithmembers class * {
    14. public <init>(android.content.Context, android.util.AttributeSet);
    15. }
    16. -keepclasseswithmembers class * {
    17. public <init>(android.content.Context, android.util.AttributeSet, int);
    18. }

    作者:SmarkingZhao
    链接:
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    混淆规则 1
    https://blog.csdn.net/weixin_30521649/article/details/95903972?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.edu_weight

    混淆规则 2
    https://www.jianshu.com/p/546733072d8d

    只混淆其中一个包
    https://blog.csdn.net/weimingjue/article/details/84976058