8. 保持元素不参与混淆的规则
语句结构:[保持命令] [类] { [成员] }
“类”表示符合相关限定条件的类,它的内容可以使用:
- 具体的类
- 访问修饰符(public、protected、private)
- 通配符*,匹配任意长度字符,但不含包名分隔符(.)
- 通配符**,匹配任意长度字符,并且包含包名分隔符(.)
- extends,即可以指定类的基类
- implement,匹配实现了某接口的类
- $,内部类
“成员”表示符合相关限定条件的类成员,它的内容可以使用:
- 匹配所有构造器
- 匹配所有域
- 匹配所有方法
- 通配符*,匹配任意长度字符,但不含包名分隔符(.)
- 通配符**,匹配任意长度字符,并且包含包名分隔符(.)
- 通配符***,匹配任意参数类型
- …,匹配任意长度的任意类型参数。比如void test(…)就能匹配任意 void test(String a) 或者是 void test(int a, String b) 这些方法。
- 访问修饰符(public、protected、private)
9. 注意事项
- jni方法不可混淆(jni方法必须要跟native方法一致);
- 反射用到的类不混淆(否则反射可能出现问题);
- 使用了 Gson 之类的工具要使 JavaBean 类即实体类不被混淆(否则无法将JSON解析成对应的对象);
- 添加第三方库所需的混淆规则(一般都在文档中会写混淆规则,使用时注意添加)
- 有用到WebView的JS调用也需要保证写的接口方法不混淆;
- Parcelable的子类和Creator静态成员变量不混淆(否则会抛出BadParcelableException异常);
- enum类型(枚举)不进行混淆
可以参考:https://blog.csdn.net/niuba123456/article/details/81025208