APT(Annotation Processing Tool)即注解处理器,在编译的时候可以处理注解然后搞一些事情,也可以在编译时生成一些文件之类的。ButterKnife和EventBus都使用了APT技术,如果不会APT技术就很难看懂这两个框架的源码。
我们来实现一个简单的功能,只要在任何类的成员变量上添加一个 @Print
注解,就可以动态生成一个方法,然后把成员变量的变量名输出:
动态生成的类大概长这样:
- 首先我们需要创建两个JavaLibrary
- 一个用来定义注解,一个用来扫描注解
- 获取到添加注解的成员变量名
- 动态生成类和方法用IO生成文件
- 注解的Lib:
apt-annotation
- 扫描注解的Lib:
apt-processor
implementation project(path: ':apt-annotation')
annotationProcessor project(path: ':apt-processor')
如果还不会自定义注解的同学,可以先去看我之前写的一篇Java自定义注解入门到实战
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface Print {
}
dependencies {
//自动注册,动态生成 META-INF/...文件
implementation 'com.google.auto.service:auto-service:1.0-rc6'
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
//依赖apt-annotation
implementation project(path: ':apt-annotation')
}