APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码(或者编译过的字节码)作为输入,生成.java文件作为输出。
简单来说就是在编译期,通过注解生成.java文件。
但是我在实现View的绑定的时候发现了一个问题,就是运行程序始终报错,就是说我的view为空,然后就是仔细的看了一下,发现没有生成Java文件,然后在网上找资料,找到了3种解决方案。
方案一
打开Project Structure降低是Android Gradle及构建版本分别到3.3.2,4.10.1以下,生成的Java文件在app/build/generated/source/apt里面
分析问题过后,觉得降低版本应该不会是最好的方案,于是我就继续研究这个问题,然后通过查阅资料,发现原来是javax.annotation.processing.Processor没有自动生成,那么这个文件是做什么的呢??
在编译时,java编译器(javac)会去META-INF中查找实现了的AbstractProcessor的子类,并且调用该类的process函数,最终生成.java文件。其实就像activity需要注册一样,就是要到META-INF注册 ,javac才知道要给你调用哪个类来处理注解。
在以前,我们的通过@AutoService(Processor.class)注解把注解处理器Processor注册到META-INF/services中,这里的包名是META-INF/services/javax.annotation.processing.Processor那么找到了这个问题,就有下面两种解决方案。
方案二
它既然没有自动生成那么我们给它创建一个,文件目录如下:
然后把我们的Processor类的全类名添加到这个文件中。
终于编译并运行成功了,但是细心的人会发现,在app/build/generated/source/文件夹中,没有找到apt文件夹,生成的文件去哪里了呢??原来生成的文件不在那里,那在哪里呢??看图
方案三
那么有人就说,我每写一个Processor就要在META-INF/services添加一句,很麻烦,那么简单的方法来了,在dependencies中添加annotationProcessor 'com.google.auto.service:auto-service:1.0-rc2'
希望和大家一起学习,一起进步