关于ButterKnife 在module中使用问题

本文探讨ButterKnife在组件化开发中遇到的问题及解决办法。由于module中资源ID缺少final修饰,导致ButterKnife无法正常工作。通过在app和module的build.gradle中配置ButterKnife插件和依赖,实现资源ID的正确读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ButterKnife 在module中使用问题

  • 说道ButterKnife 框架给我们的日常开发带来的便利,不言而喻了。在Activity、fragment、adapter等等各种情景中的使用(使用方法以及原理在此不做讲解)。但是最近在做一个组件化开发过程中,遇到一个问题,那就是在module中,它无法读取到 id,具体什么情况呢,看下下图

  • Attribute value must be constant
    什么原因呢,Attribute value must be constant
    通过追踪源码发现, @BingView(int ResId)这个参数必须是 final 修饰的常量
    而打开R文件看看区别

  • app壳子程序中的R文件:
    app壳子程序中的R文件

  • module 中的R文件:
    module 中的R文件

很明显,module 中的R资源 Id 缺少 final 修饰,而ButterKnife 注解 资源 Id时,id 必须是final 修饰。
解决方法在下

  • 1、在app壳子程序的的 build.gradle中加入:
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

此处我用的是8.4.0版本,其他版本官方应该也有说明

  • 2、在module 中的build.gradle中加入:
apply plugin: 'com.jakewharton.butterknife'
dependencies {
	//butterknife8.4
    implementation 'com.jakewharton:butterknife:8.4.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
}
  • 3、 同步一下

ok, 接下来你就可以使用 注解了,姿势是这样的:
在这里插入图片描述
你没有看错,这里是使用 R2, 而不是 R ,到此就完了。
啥 ? R2 哪来的 ? 为什么是R2 ? 哈哈哈,下次写ButterKnife 源码分析的时候会说明的。

如果写错或者问题,欢迎大佬指正留言指正

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值