APT在Android中应用场景实战和分析

一,什么是APT

1.APT(Annotation Processing Tool) 是一种处理注释的工具, 它对源代码文件进行检测找出其中的 Annotation,使用 Annotation 进行额外的处理。

Annotation 处理器在处理 Annotation 时可以根据源文件中的 Annotation 生成额外的源文件和其它的文件 (文件具体内容由 Annotation 处理器的

编写者决定),APT 还会编译生成的源文件和原来的源文件,将它们一起生成 class 文件。APT主要是依赖了Java编译环节中的javac,我们在控制

台输入javac的时候会出现processor工具,这个就是APT处理程序的入口,简单的说就是Processor会在编译阶段初始化,然后对当前模块内的代

码进行一次扫描,然后获取到对应的注解,之后调用process方法,然后我们根据这些注解类来做一些后续操作,如下图1

图1

2. 为了更方便精准的了解这个流程,我们需要知道整个java的编译流程是什么样子的,如下图2

图2

上图是一张简单的编译流程图,compiler代表我们的javac(java语言编程编译器)。这张图应该中其实缺少了一个流程,在source -> complier的过程中就

应该把我们的Processor补充上去,图3

把两张图结合就是整个java的编译流程了。整个编译过程就是 source(源代码) -> processor(处理器) -> generate (文件生成)-> javacompiler -> .

class文件 -> .dex(只针对安卓)

3.APT中核心类以及接口 图4

图4

核心的类和接口 图5

图5

4.核心方法的讲解

ProcessingEnvironment

Filer 就是文件流输出路径,当我们用AbstractProcess生成一个java类的时候,我们需要保存在Filer指定的目录下。

Messager 输出日志工具,需要输出一些日志相关的时候我们就要使用这个了。

Elements 获取元素信息的工具,比如说一些类信息继承关系等。

Types 类型相关的工具类,processor java代码不同的是,当process执行的时候,class的由于类并没有被传递出来,所以大部分都行都是用element来代替了,

所以很多类型比较等等的就会转化成type相关的进行比较了。

类型相关的都被转化成了一个叫TypeMirror,其getKind方法返回类型信息,其中包含了基础类型以及引用类型。

process

@AutoService(Processor.class)

public class MyProcess extends AbstractProcessor {

private Elements elementUtils;

private Filer filer;

Messager messager;

private Name simpleName;

@Override

public synchronized void init(ProcessingEnvironment processingEnvironment) {

super.init(processingEnvironment);

elementUtils = processingEnvironment.getElementUtils();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值