Android APT

1.APT注解处理器

APT全称Annotation Processing Tool,即注解处理器,它在代码编译时扫描和处理注解,即对源代码文件进行检测找出其中的注解,然后使用注解进行额外的处理,比如生成处理注解逻辑的Java文件等。

ButterKnife、EventBus、ARouter、GreenDAO都使用了APT技术。在ARouter框架中,路由表的生成过程就使用了APT技术,路由表就是在运行时生成用于帮助填充WareHouse路由元信息的类。

APT的作用时间是编译时。Android中代码编译流程:Java—>class —> dex,代码最终生成dex文件打入到APK包里面。

0aaba6fca9904278b5a12f6e55552af8.png

①APT是在编译开始时就介入的,用来处理编译时注解。

②AOP(Aspect Oridnted Programming)是在编译完成后生成dex文件之前,通过直接修改.class文件的方式,来对代码进行修改或添加逻辑。常用在代码监控、代码修改、代码分析这些场景。

 

使用APT可以在编译时处理注解,有如下效果:

①可以达到减少重复代码手工编写的效果。如ButterKnife,可以直接使用注解来减少findviewbyid这些代码,只需要通过注解表示是哪个id就够了。

②获取注解及生成代码都是在代码编译时候完成的,相比反射在运行时处理注解大大提高了程序性能。

注意:APT并不能对源文件进行修改,只能获取注解信息和被注解对象的信息,然后做一些自定义的处理。

宏观上理解,APT就是javac提供给开发者在编译时处理注解的一种技术;微观上,具体到实例中就是指继承自AbstractProcessor的实现类,即一个处理特定注解的处理器。

 

2.APT原理

c06f6dd6814648a8bd1fef2cb48c0e9c.png

在Java源码到class文件之间需要经过注解处理器的处理,注解处理器生成的代码也同样会经过这一过程,最终一起生成class文件。在Android中,class文件还会被打进Dex文件中,最后生成APK文件。

注解处理器的执行是在编译的初始阶段,并且会有多个processor。查看所有注册的processor:build/intermediates/annotation_processor_list/debug/annotationProcessors.json。

 

自定义一个注解处理器TestProcessor:

@AutoService(Processor.class)

@SupportedAnnotationTypes({"com.demo.test_annotations.TestAnnotation"})

@SupportedSourceVersion(SourceVersion.RELEASE_8)

public class TestProcessor extends AbstractProcessor {

    Filer mFiler; 

    Types types; 

    Elements elementUtils;     

    Messager messager; 

    @Override

    public synchronized void init( ProcessingEnvironment processingEnv){

        super.init(processingEnvironment);

        mFiler = processingEnv.getFiler();

        types = processingEnv.getTypeUtils();

        elementUtils = processingEnv.getElementUtils();

        messager = processingEnv.getMessager();

    }

    @Override

    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) { <

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值