自定义编译注解器学习第一篇——搭建一个可注解的工程

文末有demo 代码链接 !!!

1 背景

不知道你有没有想过以下问题:

ButterKnife为啥可以使用注解就可以直接帮我们生成对应的代码?

class ExampleActivity extends Activity {
  @BindView(R.id.user) EditText username;
  @BindView(R.id.pass) EditText password;

  @BindString(R.string.login_error) String loginErrorMessage;

  @OnClick(R.id.submit) void submit() {
    // TODO call server...
  }

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

为啥ARouter使用注解就可以找到对应的路由页面?

@Route(path = "/test/activity")
public class YourActivity extend Activity {
    ...
}

没错,我们使用注解之后,注解器帮我们自动生成了一些模板代码,解放了我们的双手。
那么问题来了,我们能自己写一个注解器解放自己的双手吗?

就像下面这样,我使用Json注解,IDE 帮我们生成了TestModelBind类
在这里插入图片描述
下面开始进入正题!

2 步骤

在这里插入图片描述

2.1 新建一个Java Library 取名annotation

在这里插入图片描述
一定要注意!这里不是Phone Module 也不是 Android Library 而是 Java or Kotlin Library
在这里插入图片描述

这个类取名就叫做Json
在这里插入图片描述

2.2 Json类定义我们的注解

暂时不用管这个代码什么意思,直接复制粘贴到项目中即可

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface Json {
    String value();
}

2.3 新建一个Java Library 取名compiler

其中的类取名就叫做JsonProcesser
在这里插入图片描述
和2.1 一样,注意是 Java or Kotlin Library

到此为止 项目结构如下:
在这里插入图片描述
目前出现了3个Module compiler/ annotation /app

2.4 项目切到project视图下

在这里插入图片描述

plugins {
    id 'java-library'
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')

    api 'com.google.auto.service:auto-service:1.0-rc6'
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
    api 'com.squareup:javapoet:1.10.0'
    api project(':annotation')
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大功告成,我们build一下

在这里插入图片描述

3 demo 地址

demo 地址地址 网速快

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值