1.概述
在现阶段的Android开发中,注解越来越流行起来,比如ButterKnife,Retrofit,Dragger,EventBus等等都选择使用注解来配置。按照处理时期,注解又分为两种类型,一种是运行时注解,另一种是编译时注解,运行时注解由于性能问题被一些人所诟病。编译时注解的核心依赖APT(Annotation Processing Tools)实现,原理是在某些代码元素上(如类型、函数、字段等)添加注解,在编译时编译器会检查AbstractProcessor的子类,并且调用该类型的process函数,然后将添加了注解的所有元素都传递到process函数中,使得开发人员可以在编译器进行相应的处理,例如,根据注解生成新的Java类,这也就是EventBus,Retrofit,Dragger等开源库的基本原理。
Java API已经提供了扫描源码并解析注解的框架,你可以继承AbstractProcessor类来提供实现自己的解析注解逻辑。下边我们将学习如何在Android Studio中通过编译时注解生成java文件。
2.创建名为processor的module
首先使用Android Studio创建一个Android的project。然后开始创建一个名为processor的java library。
点击file->new->new module如图
我们需要创建一个非Android的library,注意一定要选择Java Library
3.兼容性配置
由于Android目前不是完全支持Java 8的语言特性,会导致编译出错。这里将项目的源和目标兼容性值保留为 Java 7。
打开app模块下的build.gradle
在android标签下添加 compile options
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
如图
然后打开processor library的build.gradle
添加
sourceCompatibility = 1.7
targetCompatibility = 1.7
4.创建Annotation
在processor模块下创建一个注解类
命名为CustomAnnotation
具体内容如下
5.创建注解处理器
Processor继承自AbstractProcessor类,@SupportedAnnotationTypes中填写待处理的注解全称,@SupportedSourceVersion表示处理的JAVA版本。