Android 利用 APT 技术在编译期生成代码
2016-09-08 11:11
357 查看
APT(
APT,比如 Dagger2, ButterKnife, EventBus3 等,我们要紧跟潮流,与时俱进呐! (ง •̀_•́)ง
下面通过一个简单的 View 注入项目
项目地址:https://github.com/brucezz/ViewFinder
大概项目结构如下:
在通常的 Android 项目中,会写大量的界面,那么就会经常重复地写一些代码,比如:
天天写这么冗长又无脑的代码,还能不能愉快地玩耍啦。所以,我打算通过
创建 module
Java Library,定义项目所需要的注解。
在
int 类型参数,相当于给一组 View 指定点击响应事件。
创建 module
Android Library。在这个 module 中去定义 API,也就是去确定让别人如何来使用我们这个项目。
首先需要一个 API 主入口,提供静态方法直接调用,就比如这样:
同时,需要为不同的目标(比如 Activity、Fragment 和 View 等)提供重载的注入方法,最终都调用
实现了
Annotation Processing Tool的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入。现在有很多主流库都用上了
APT,比如 Dagger2, ButterKnife, EventBus3 等,我们要紧跟潮流,与时俱进呐! (ง •̀_•́)ง
下面通过一个简单的 View 注入项目
ViewFinder来介绍 APT 相关内容,简单实现了类似于
ButterKnife中的两种注解
@BindView和
@OnClick。
项目地址:https://github.com/brucezz/ViewFinder
大概项目结构如下:
viewFinder-annotation- 注解相关模块
viewFinder-compiler- 注解处理器模块
viewfinder- API 相关模块
sample- 示例 Demo 模块
实现目标
在通常的 Android 项目中,会写大量的界面,那么就会经常重复地写一些代码,比如:TextView text = (TextView) findViewById(R.id.tv); text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // on click } });
天天写这么冗长又无脑的代码,还能不能愉快地玩耍啦。所以,我打算通过
ViewFinder这个项目替代这重复的工作,只需要简单地标注上注解即可。通过控件 id 进行注解,并且
@OnClick可以对多个控件注解同一个方法。就像下面这样子咯:
@BindView(R.id.tv) TextView mTextView; @OnClick({R.id.tv, R.id.btn}) public void onSomethingClick() { // on click }
定义注解
创建 module viewFinder-annotation,类型为
Java Library,定义项目所需要的注解。
在
ViewFinder中需要两个注解
@BindView和
@OnClick。实现如下:
@Retention(RetentionPolicy.CLASS) @Target(ElementType.FIELD) public @interface BindView { int value(); }
@Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface OnClick { int[] value(); }
@BindView需要对成员变量进行注解,并且接收一个 int 类型的参数;
@OnClick需要对方法进行注解,接收一组
int 类型参数,相当于给一组 View 指定点击响应事件。
编写 API
创建 module viewfinder,类型为
Android Library。在这个 module 中去定义 API,也就是去确定让别人如何来使用我们这个项目。
首先需要一个 API 主入口,提供静态方法直接调用,就比如这样:
ViewFinder.inject(this);
同时,需要为不同的目标(比如 Activity、Fragment 和 View 等)提供重载的注入方法,最终都调用
inject()方法。其中有三个参数:
host表示注解 View 变量所在的类,也就是注解类
source表示查找 View 的地方,Activity & View 自身就可以查找,Fragment 需要在自己的 itemView 中查找
provider是一个接口,定义了不同对象(比如 Activity、View 等)如何去查找目标 View,项目中分别为 Activity、View
实现了
Provider接口(具体实现参考项目代码吧
相关文章推荐
- Android 利用 APT 技术在编译期生成代码
- Android 利用 APT 技术在编译期生成代码
- Android 利用 APT 技术在编译期生成代码
- Android 利用 APT 技术在编译期生成代码
- Android中利用APT生成代码
- Android利用dimens.xml进行适配,使用代码生成不同的dimens.xml文件
- Android APT(编译时代码生成)最佳实践
- 利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android利用dimens.xml进行适配,使用代码生成不同的dimens.xml文件
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 利用annotationProcessor生成Java代码
- 利用JNI技术在Android中调用C++代码
- android利用pull技术来解析和生成xml文件
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android注解-编译时生成代码 (APT)
- 利用PHP与Smarty模板技术生成分页静态页面的代码
- 利用JNI技术在Android中调用C++代码
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码