1 基本配置
新建Module->JavaLibrary(必须是JavaLibrary)
gradle文件配置
```
dependencies {
implementation fileTree(include: ['*.jar'], dir:'libs')
//gradle编译期所需插件
implementation'com.google.auto.service:auto-service:1.0-rc3'
//主要使用的功能
implementation'com.squareup:javapoet:1.8.0'
//依赖的匿名Module,这个lib就是我们自定义的注解lib。
implementation project(':libPayAnnotations')
}
```
2 主要功能及代码语法
新建一个YourNameProcessor继承自AbstractProcessor,这里是PayProcessor
并且要在类名上面添加@AutoService(Processor.class)
12.1 确定所支持的类型,匿名类
2图中的WXPayEntry.class就是libPayAnnotations所定义的。
匿名类最好是@Retention(RetentionPolicy.CLASS)既编译期注解,不然很容易出问题,因为APT就是编译期做生成对应代码的事情
2.2 Process内写想要生成的代码
3android app在编译期会自动调用PayProcessor里面的process方法,所以,如果我们想要进行任何操作,就在此进行。然后扫描所有使用WXPayEntry的注解类
4WxPayEntryVisitor如下图
5因为WxPayEntry需要两个值,所以Visitor里面设置了两个变量,一个String,一个类类型,在设置类类型之后调用生成的代码.
6 7MethodSpec是需要生成哪些方法,设置name及属性即可
TypeSpec 是需要生成的类名,设置name及属性即可
最后调用JavaFile生成对应的代码
3 生成的代码
可以在App->Build->Generate->Source->Apt->Debug里面看到
8 9到此,既完成了apt的基本使用,靠apt生成代码不用我们在手动写一堆相同模板的代码。
butterknife也是使用了此原理
网友评论