上一篇中,我们生成了一个类,但是要在项目里用,还有几个问题:
- 这个类要生成在哪个位置,项目可以引用到
- 绑定的过程是什么样的
第一个问题,之前有apt插件,现在新版gradle(3.0) 已经自动处理了这个问题了,目前来说一般都是和绑定的类生成在同一个包下,我们需要annationProcess标注 AbstractProcessor所在的库。
第二个问题,如果要绑定,肯定要执行方法,联想到butterknife里面的bind方法,我们可以在这个方法里面调用生成类的构造函数,然后在生成的类的构造函数里面执行findviewbyId方法。于是问题成了,怎么可以拿到需要的数据,xxView var = (xxView) view.findviewbyId(id)所涉及到的,view我们可以根据Activity拿到DecorView,因此还需要的是注解标记的变量类型,变量名字,此外还需要注解所在的类的名字,用于生成类。因此我们可以设想,一个生成类,类里面有一个list,保存注解的条目。
此外就是javaPoet的内容了,javaPoet api不熟的话挺头疼的..
项目结构的话,新建了一个mybutterknife的Android库,主要是定义了bind方法,然后在这个库里面引用了annotation库,这样就和ButterKnife一样用了,我们的app目录需要引用processor库和mybutterknife库,基本就是这样子,具体的注释都在代码里面
代码在github上,打了tag v0.2