ProGuard就应该用注解@Annotation来配置

原创
2016/08/12 00:33
阅读数 2.3K

###本文讲述全新基于@Annotation的混淆配置方法 摘自我的源码README.md

  • 实现原理及目标已经在 源文件 注释中注明。


###概念、规则定义及解释

  • []保留:既不被重命名,又不被删除;

  • []保留:只确保不被重命名,不保证不被删除;

  • []保留:不保证不被重命名,但确保不被删除;

  • []保留:排除到以上保留名单之外。

  • 优先级

    • 由高到低依次为强、反、弱、不。被延续到子类(接口)的,子类享有相同优先级;
    • 任何位置,若被不同优先级的注解同时标注,则会应用较高优先级。
  • 符号约定

    • 含有[$$]字符的为反保留。如:@Keep$$

    • 含有[$]字符(除反保留外)的为强保留。如:@Keep$

    • 不含以上标识字符的为弱保留

    • 没有用于不保留的标签,即:不加任何标注则为不保留;

    • 另:以[e]结尾的表示将其前面名称表达的功能延续到子类。如:@KeepMp$e

      需要注意的是:只有父类(接口)存在的情况下,才能延续到子类。 即:首先需要将父类强保留或反保留。

  • 类名@KeepXxx后面的其它字母符号

    • [V]:var, 成员变量或常量;

    • [M]:method, 方法或函数;

    • [C]:constructor, 构造方法;

    • [p]:public变量或方法,取决于组合的是V还是M。没有本字符则表示忽略访问权限修饰;

    • [s]:static变量或方法,没有则表示非static的。

      细节请参见各注解的源码文档。

  • 其它:

    • 对于 **.anno.inject 包中的任何注解,只要该注解没有被优化掉,就会对其直接作用的内容进行反保留。
    • 更多内容请见 @Keep 源码文档。


###使用方法:

####1. 在主module根目录下的混淆配置文件 proguard-rules.pro(或其他名称)的开头加入下列代码:


    #gradle配置中最好启用优化。即引用'proguard-android-optimize.txt'
    #proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    
    -include libs/annotations.pro
    
    #如果是以jar包的方式导入的而不是作为库项目,那么需要下面两行:
    -dontwarn hobby.wei.c.**
    -libraryjars libs/wei.lib2a.jar
    
    -keep class com.google.gson.stream.** { *; }

####2. 根据需求在代码中添加@KeepXxx注解。

暂只给出代码中已有的部分示例链接,有任何问题或建议可 联系作者

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部