android路由框架 简书,基于APT的android路由框架(二)--APT技术

Android 中的APT

一、什么是APTAPT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入。现在有很多主流库都用上了 APT,比如 Dagger2, ButterKnife, EventBus3 等

本文通过实现简单的ButterKnife控件绑定介绍APT的内容

二、AbstractProcessor

在编译时编译器会检查AbstractProcessor的子类,并且调用该类型的过程函数,然后将添加了注解的所有元素都传递到处理函数中,使得开发人员可以在编译器进行相应的处理,例如,根据注解生成新的的Java类,这也就是ButterKnife,改造,牵引等开源库的基本原理。Java的API已经提供了扫描源码并解析注解的框架,我们可以继承AbstractProcessor类来提供实现自己的解析注解逻辑。

如何使用Processor

1.新建java-libreary才可以使用Processor哦

// 自动注册processor的类库谷歌出品

implementation'com.google.auto.service:auto-service:1.0-rc2'

//javapoet  生成java代码的类库

implementation'com.squareup:javapoet:1.7.0'

93ea0fd0220d

2.在项目中引入processor

annotationProcessor project(':java工程')

annotationProcessor是APT工具中的一种,他是google开发的内置框架,不需要引入,可以直接在build.gradle文件中使用,如下

93ea0fd0220d

创建一个Processor类继承AbstractProcessor

93ea0fd0220d

声明一个自定义Process

process 方法会在编译时被调用,set集合存放着所有被@SupportedAnnotationTypes()标记的注解的Element(例如:所有被BundView注解的View的信息包括全类名,父Element这这里为activity);

93ea0fd0220d

编译时拿到所有的activity和View信息生产代码processElement处理element 保存所有activity 和 view的信息

93ea0fd0220d

createJavaFile 通过javapoet库就会在build->generated->source->apt目录下生产java文件

93ea0fd0220d

93ea0fd0220d

通过javapoet库生产java文件

93ea0fd0220d

生产的java文件

ButterKnife的bund方法就是通过类全名+_BundleView反射获取类对象实例化

93ea0fd0220d

bund文件

使用方法

93ea0fd0220d

使用方法

不要在意报红的地方,编译器问题。是不是和ButterKnife很相似的,其实ButterKnife也是这个原理,当然他的更加复杂。我这里只是简单的实现,让大家对APT技术有个了解,具体的还需要大家继续努力学习。

越努力越幸运,大家共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值