ProGuard类和类成员修饰和注意事项(六)

8. 保持元素不参与混淆的规则

语句结构:[保持命令] [类] { [成员] }

“类”表示符合相关限定条件的类,它的内容可以使用:

  • 具体的类
  • 访问修饰符(public、protected、private)
  • 通配符*,匹配任意长度字符,但不含包名分隔符(.)
  • 通配符**,匹配任意长度字符,并且包含包名分隔符(.)
  • extends,即可以指定类的基类
  • implement,匹配实现了某接口的类
  • $,内部类

“成员”表示符合相关限定条件的类成员,它的内容可以使用:

  • 匹配所有构造器
  • 匹配所有域
  • 匹配所有方法
  • 通配符*,匹配任意长度字符,但不含包名分隔符(.)
  • 通配符**,匹配任意长度字符,并且包含包名分隔符(.)
  • 通配符***,匹配任意参数类型
  • …,匹配任意长度的任意类型参数。比如void test(…)就能匹配任意 void test(String a) 或者是 void test(int a, String b) 这些方法。
  • 访问修饰符(public、protected、private)

9. 注意事项

  1. jni方法不可混淆(jni方法必须要跟native方法一致);
  2. 反射用到的类不混淆(否则反射可能出现问题);
  3. 使用了 Gson 之类的工具要使 JavaBean 类即实体类不被混淆(否则无法将JSON解析成对应的对象);
  4. 添加第三方库所需的混淆规则(一般都在文档中会写混淆规则,使用时注意添加)
  5. 有用到WebView的JS调用也需要保证写的接口方法不混淆;
  6. Parcelable的子类和Creator静态成员变量不混淆(否则会抛出BadParcelableException异常);
  7. enum类型(枚举)不进行混淆

       可以参考:https://blog.csdn.net/niuba123456/article/details/81025208


猜你喜欢

转载自blog.csdn.net/niuba123456/article/details/81025062