小试APT

APT的作用是在源码编译时扫描和处理注解的,在日常开发中,可以简单的理解为检测或生成某些代码。

1.怎么写一个注解处理器的类呢,其实和简单:

public class VpProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
//逻辑操作
return true
}
}

继承AbstractProcessor类,然后在process函数中处理逻辑部分。
2.java类的生成
通过roundEnvironment对象获取到注解元素的相关信息后,怎么才能生成java类文件呢?当然是用IO流了,java类的构造是有规则的:包名-引入的包-类名-变量-函数,通过IO流可以从上往下依次写进File文件。
当然这样是有些麻烦的,好在javapoet库又帮助广大开发者简化了难度,但是原理是一样的。

3.仿照ButterKnife的原理,使用APT写了个简陋的demo,用于自动生成生成PagerAdapter。
demo中,新建一个“vp-annotation”库进行自定义注解

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface BindVp {

}

再新建一个“vp-compiler”处理注解,AbstractProcessor是Javax包下的内容,Android项目不包含该api,所以该库需是一个java的lib,又因为“vp-compiler”仅仅是在编译期生成代码用的(apk只需要这些生成的代码即可),所以使用annotationProcessor进行依赖,该库不会被打包至apk中。

demo地址