很多时候大家在剖析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.
所以今天提问是:
- 简述butterknife 原理;
- apt 大致开发流程;
- 以及上面描述为何使用 R2.id.xxx ,怎么做到的。
任意回答其中一点都可以。
更多问答 >>
-
每日一问 今天聊一下Gradle 相关,BuildConfig这个类是如何生成的?
2019-08-20 23:27 -
每日一问 Parcelable 为什么效率高于 Serializable ?
2019-08-26 00:02 -
2019-09-01 23:16
-
2019-09-04 23:33
-
2019-09-09 00:19
-
每日一问 Android 有哪些 位运算 的例子很值得借鉴?
2019-08-13 21:56 -
2019-08-12 09:58
-
每日一问 事件分发机制大家应该都熟记于心,默认事件分发是逆序的,有哪些方法可以修改分发顺序?
2019-08-11 21:18 -
每日一问 匿名内部类访问的外部类局部变量为什么要用final 修饰,jdk8为啥不需要了? 2/3
2019-08-08 23:51 -
每日一问 AppCompatTextView 与 TextView 1/3
2019-08-07 01:29
关于问题 1,2 可以参考:Android 如何编写基于编译时注解的项目
从难度上看,问题 3 其实了解的人非常少,如果愿意去看,一定能扩宽一个解决问题的思路,可以参考:
J 神的ButterKnife竟然还隐藏着这样的黑科技?学习了~ 感谢鸿神分享,同时也意识到自己关于这方面的知识很薄弱,有待加强。
1.通过 元注解获取 控件对象引用和 对于xml 中控件id,然后通过AbstractProcessor 根据元注解获取的数据,生成相应代码,主要部分也就是findViewById,帮助我们完成依赖引入
2.首先 通过元注解获取引用(元注解还可以放入参数)、函数。 第二步,配置 APT环境,第三步然后通过AbstractProcessor 根据元注解获取的数据生成相应代码(这一步最难)
3.精妙之处感觉在于
1.创建了一个新的R2类来解决final问题2.但是在生成的Activity_Parser类中是用的R类,这很巧妙