本文是一篇实践文章,主要记录学习注解处理器的实践过程,以及在这个过程中遇到的问题。
目录:
1、创建注解;
2、创建注解处理器;
3、注册注解处理器;
4、应用注解;
5、遇到的问题;
1、创建注解
首先,在项目中新创建一个”Java Library“ module,专门用来存放注解,取名为annotation。
在module中定义一个编译时注解:
2、创建注解处理器
另创建一个”Java Library“ module processor用来存放注解处理器,并让它依赖刚才创建的annotation module。
附上processor module的gradle配置
其中的javapoet是用来生成Java文件的SDK。
编写一个注解处理器类ClassProcessor,使它继承AbstractProcessor。
这里使用注解SupportedAnnotationTypes,SupportedSourceVersion来替代了getSupportedAnnotationTypes和getSupportedSourceVersion这两个方法,并且在init中进行了简单的初始化。
在process方法中进行注解的处理操作,这里通过javapoet生成了一个Java文件。
3、注册注解处理器
1)在processor库的main目录下新建 resources资源文件夹;
2)在resources中再建立META-INF文件夹;
3)在META-INF下再建立services文件夹;
4)在services中新建javax.annotation.processing.Processor文件;
5)这个文件的内容就是刚刚新建的注解处理器的名称,
比如此处是:com.kaikaili.processor.ClassProcessor
4、应用注解
annotationProcessor project(':processor')
implementation project(':annotation')
至此,注解处理器实践完成。
5、遇到的问题
Android Studio 版本号:3.5;Gradle版本号:5.4.1;Android Gradle插件版本:3.5.0
1)运行之后生产的文件不在 generated/apt文件夹下,而在generated/ap_generated_sources下
2)Google开源的AutoService库不能正常生产Processor文件,导致注解处理失败,最终采用手动创建的方式。
3)META-INF/services 或 META-INF.services不是一个文件夹的名称,是两个文件夹的名称。
4)Gradle console在新版的Android studio应该是去掉了,gradle的输出信息,可以直接在BuildOutput中查看。
5)Java Source Version使用1.7报错,统一改成了1.8
Done