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

Android 中的APT

基于APT的android路由框架(一)

一、什么是APT

APT(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'

基于APT的android路由框架(二)--APT技术_第1张图片

2.在项目中引入processor

annotationProcessor project(':java工程')

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

基于APT的android路由框架(二)--APT技术_第2张图片

创建一个Processor类继承AbstractProcessor

基于APT的android路由框架(二)--APT技术_第3张图片
声明一个自定义Process

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


基于APT的android路由框架(二)--APT技术_第4张图片
编译时拿到所有的activity和View信息生产代码

processElement处理element 保存所有activity 和 view的信息

基于APT的android路由框架(二)--APT技术_第5张图片

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

JAVAPOET  GitHub地址

基于APT的android路由框架(二)--APT技术_第6张图片
基于APT的android路由框架(二)--APT技术_第7张图片
通过javapoet库生产java文件


基于APT的android路由框架(二)--APT技术_第8张图片
生产的java文件

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

基于APT的android路由框架(二)--APT技术_第9张图片
bund文件

使用方法


基于APT的android路由框架(二)--APT技术_第10张图片
使用方法

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

项目地址已上传Github

越努力越幸运,大家共勉

你可能感兴趣的:(基于APT的android路由框架(二)--APT技术)