原因:无法应用到组件化开发中
那用啥:ViewBinding https://github.com/JakeWharton/butterknife From JakeWharton
详解:
ButterKnife在2013年一出现就迅速被广大Android开发者所追随,因为它简洁的书写方式大大减少了开发者的重复性劳动,一只持续到组件化开发的流行,在Android项目的library模块中,生成R类中的成员变量就已经改为了非final修饰,这一改变直接致使ButterKnife无法在Android项目的library模块中使用,为了能够让ButterKnife运行在library模块,ButterKnife的作者通过生成R2类让ButterKnife在library模块中继续使用,虽然这样也能使用,但是也带来了很多其他的问题,每个library模块会存在两个R文件,R2的id还会经常找不到等等,最后作者也不得不发出声明,此工具以被弃用,功能开发和一般错误也会停止维护。
ViewBinding是Google在2019年I/O大会上公布的一款Android视图绑定工具。它的使用方式有点类似DataBinding,但相比DataBinding,ViewBinding是一个更轻量级、更纯粹的findViewById的替代方案。它具有以下几个优点:
类型安全: ViewBinding会基于布局中的View生成类型正确的属性。比如,在布局中放入了一个 TextView ,视图绑定就会暴露出一个 TextView 类型的属性供开发中使用。
空安全:ViewBinding会检测某个视图是不是只在一些配置下存在,并依据结果生成带有 @Nullable 注解的属性。所以即使在多种配置下定义的布局文件,视图绑定依然能够保证空安全。
ViewBinding生成的绑定类是一个Java类,并且添加了Kotlin的注解,可以很好的支持 Java 和 Kotlin 两种编程语言。