前言
APT的概念大家应该不会陌生, 而且在很多第三方库中都有使用到, 最有名的应该就是ButterKnife了. 这里基础概念就略过了, 本篇主要是着重在怎么编写自己的注解处理器, 以及一些踩到的坑.
开始
一般要实现编译器注解处理生成, 需要新建两个module, 分别存放自定义的Annotation和对应Annotation的处理器.
自定义注解
我们先新建存在自定义注解的module, 注意, 这里建议新建java-library, 便于本地调试时给存放处理器的module依赖使用, 对应gradle配置如下
自定义一个新的注解
这里Retention注解表示设置注解保留时机, 需要传递的是RetentionPolicy枚举类型, 值分别有:
SOURCE: 编译器时就会抛弃注解
CLASS: 注解保留到编译器, 运行期会去除
RUNTIME: 注解保留到运行期, 编译器时也会存在
Target表示注解适用的上下文, 即他的目标修饰类型, 可以传数组,值应该为ElementType,枚举各个值的含义可以看官方文档, 我们主要用到比较多的应该是
TYPE: 类, 接口(包括注解类型)或者枚举的声明
METHOD: 方法声明
FIELD: 字段声明, 包括枚举常量
LOCAL_VARIABLE: 局部变量声明
CONSTRUCT