-
keepclasseswithmembers
-
keepclasseswithmembernames
更多详细的请到官网
需要特别介绍的是与保持相关元素不参与混淆的规则相关的几种命令:
| 命令 | 作用 |
| — | — |
| -keep | 防止类和成员被移除或者被重命名 |
| -keepnames | 防止类和成员被重命名 |
| -keepclassmembers | 防止成员被移除或者被重命名 |
| -keepnames | 防止成员被重命名 |
| -keepclasseswithmembers | 防止拥有该成员的类和成员被移除或者被重命名 |
| -keepclasseswithmembernames | 防止拥有该成员的类和成员被重命名 |
保持元素不参与混淆的规则
[保持命令] [类] {
[成员]
}
“类”代表类相关的限定条件,它将最终定位到某些符合该限定条件的类。它的内容可以使用:
-
具体的类
-
访问修饰符(public、protected、private)
-
通配符*,匹配任意长度字符,但不含包名分隔符(.)
-
通配符**,匹配任意长度字符,并且包含包名分隔符(.)
-
extends,即可以指定类的基类
-
implement,匹配实现了某接口的类
-
$,内部类
“成员”代表类成员相关的限定条件,它将最终定位到某些符合该限定条件的类成员。它的内容可以使用:
-
匹配所有构造器
-
匹配所有域
-
匹配所有方法
-
通配符*,匹配任意长度字符,但不含包名分隔符(.)
-
通配符**,匹配任意长度字符,并且包含包名分隔符(.)
-
通配符***,匹配任意参数类型
-
…,匹配任意长度的任意类型参数。比如void test(…)就能匹配任意 void test(String a) 或者是 void test(int a, String b) 这些方法。
-
访问修饰符(public、protected、private)
举个例子,假如需要将com.biaobiao.test包下所有继承Activity的public类及其构造函数都保持住,可以这样写:
-keep public class com.biaobiao.test.** extends Android.app.Activity {
}
常用自定义混淆规则
- 不混淆某个类
-keep public class com.biaobiao.example.Test { *; }
不混淆某个包所有的类
-keep class com.biaobiao.test.** { *; }
}
不混淆某个类的子类
-keep public class * extends com.biaobiao.example.Test { *; }
不混淆所有类名中包含了“model”的类及其成员
-keep public class * extends com.biaobiao.example.Test { *; }
不混淆某个接口的实现
-keep class * implements com.biaobiao.example.TestInterface { *; }
不混淆某个类的构造方法
-keepclassmembers class com.biaobiao.example.Test {
public ();
}
不混淆某个类的特定的方法
-keepclassmembers class com.biaobiao.example.Test {