登录

去注册

登录

注册

去登录

注册

每日一问 butterknife 中的黑科技

xiaoyang   2019-08-18   收藏

很多时候大家在剖析butterknife源码的时候,更多的是讲解其中的apt等,在library中使用buttterknife的时候,会使用R2.id.xxx

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

而非R.id.xxx.

所以今天提问是:

  1. 简述butterknife 原理;
  2. apt 大致开发流程;
  3. 以及上面描述为何使用 R2.id.xxx ,怎么做到的。

任意回答其中一点都可以。

2

关于问题 1,2 可以参考:Android 如何编写基于编译时注解的项目

从难度上看,问题 3 其实了解的人非常少,如果愿意去看,一定能扩宽一个解决问题的思路,可以参考:
J 神的ButterKnife竟然还隐藏着这样的黑科技?

回复
陈小缘 : @鸿洋 

学习了~ 感谢鸿神分享,同时也意识到自己关于这方面的知识很薄弱,有待加强。

2019-08-16 回复
2

1.通过 元注解获取 控件对象引用和 对于xml 中控件id,然后通过AbstractProcessor 根据元注解获取的数据,生成相应代码,主要部分也就是findViewById,帮助我们完成依赖引入

2.首先 通过元注解获取引用(元注解还可以放入参数)、函数。 第二步,配置 APT环境,第三步然后通过AbstractProcessor 根据元注解获取的数据生成相应代码(这一步最难)
3.

  1. R2是butterknife 通过apk依赖R.java生成的
    最后https://jianpanwuzhe.blog.csdn.net/column/info/19234 ,这是一个apt相关系列博客,可以参考
回复
0

精妙之处感觉在于
1.创建了一个新的R2类来解决final问题
2.但是在生成的Activity_Parser类中是用的R类,这很巧妙

回复

删除留言

确认删除留言,会导致相关评论丢失?

取消 确定