step1 定义注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Test {
String value();
String name() default "";
}
step2 新建 Java lib
step3
新建类继承 AbstractProcessor,并实现 process 方法
@SupportedAnnotationTypes("com.lixuanlin.aptapplication.Test")//关心注解的全类名
public class AptProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Messager messager = processingEnv.getMessager();
messager.printMessage(Diagnostic.Kind.NOTE,"=====================");
//可以额外生成辅助类
return false;
}
}
step4 注册 Processor
main 目录下创建 resources/META-INF/services/javax.annotation.processing.Processor
javax.annotation.processing.Processor 内容是注解处理程序的全类名
tips:
目录必须是 main/resources/META-INF/services/javax.annotation.processing.Processor 而不是 META-INF.services 否则不会触发注解处理程序,虽然 Android Studio 中显示的是 META-INF.services ,但实际目录结构是 /META-INF/services
tips:
自动注册
dependencies {
implementation 'com.google.auto.service:auto-service:1.0-rc6'
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
}
@AutoService(Processor.class)//自动注册
public class AptProcessor extends AbstractProcessor {
5.5.0 以上 gradle 版本不兼容 auto-service
step5 使用注解
annotationProcessor project(':lib')
kotlin 项目
kapt project(':lib')
注解的作用时间
注解作用在 javac 阶段,javac采集注解信息 -> Element -> 注解处理程序