什么是APT?
APT(Annotation Processing Tool)是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,使用Annotation进行额外的处理。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件(文件具体内容由Annotation处理器的编写者决定),APT还会编译生成的源文件和原来的源文件,将它们一起生成class文件。
使用背景:
随着Android Gradle 插件 2.2 版本的发布,Android Gradle 插件提供了名为 annotationProcessor
的功能来完全代替 android-apt
,自此android-apt
作者在官网发表声明证实了后续将不会继续维护 android-apt
,并推荐大家使用 Android 官方插件annotationProcessor。
注解处理器(Annotation processing)
可以给指定的类,或者所有类(不写className)传入参数
更新: 使用annotationProcessor 引用的类似乎在annotationProcessorOptions是找不到的!!知道解决方案的麻烦回复下……跪谢
android {... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className 'com.example.MyProcessor' // Arguments are optional. arguments = [ foo : 'bar' ] } } } ...}
如果你仅需要在编译时使用注解处理器,在生成apk的时候不包含注解处理器的代码,你可以使用annotationProcessor依赖
dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0'}
你也可以请求在特定的 Variant中使用
debugAnnotationProcessor 'com.google.dagger:dagger-compiler:2.0'
Auto Service:
我们在写Annotation Processor的时候,需要添加META-INF/services/javax.annotation.processing.Processor 文件,google提供了一个第三方库使我们免除这部分麻烦:
https://github.com/google/auto/tree/master/service
我们仅仅需要在gradle中添加依赖(版本请查看项目确定)
compile 'com.google.auto.service:auto-service:1.0-rc2'
然后在我们的Processor中添加一个注解:
@AutoService(Processor.class)....public class TestProcessor extends AbstractProcessor {......
编译时,会自动生成META-INF文件。
PS:在学习ARouter时研究半天没弄明白到底为什么没写META-INF文件,最后发现原来是引用了这个库……