Butterknife Attribute value must be constant
背景
在下面的R.id.rv_msg_remind 标红,然后鼠标附上去,显示attribute value must be contant.如下:
@BindView(R.id.rv_msg_remind)
然后接触android studio 有一段时间了,给出的信息并一定准确。给出的答案是属性值必须是不变的。
但是android R.id.xxx本来就是const的,这显然矛盾了,但是事情可以肯定的是是没有拿到R.id.xxx的值报错了。
这时候一个前提,我先写好了子项目,然后合并项目出的错误,我把配置拷贝了过来。
再三确定配置没有出错的情况下,我开始怀疑:
- 是否是一些配置冲突了。
- 是否是在app moudule 和lib moudule 有什么不同的地方。(我写好子项目,实在app目录下进行的,而这次引用是作为lib)
配置冲突无疑是非常头痛的问题,你不知道到底有多少验证在等着你。
但是我转念一想,配置冲突的可能性几乎微乎其微,而且同步报错的可能性极大,当然也有极小的可能性不报错,这取决于是否按照规范开发jar包,那么这种情况是最坏的打算,并且几乎不可能,暂不考虑。
然后我去google了一波官网,发现配置app moudule 与lib moudule真的不同。
解决

图中我标红了关键点,这是出错需要修改的。
- 我们需要依赖一个plugin
- 然后在子lib module 中apply.
- 并且呢,要使用R2。
R2是用来干什么的呢?

没错就是来获取id的。
然而当我make project 也就是编译的时候,出现了反噬性性打击。
可以看出前面已经标红了,那就是编译后出现了问题。原来是10.2.0使用的是androidx,关于androidx是google对以前包管理混乱然后又不想买单的一个举动。
其中一个报错的是:
androidx.support.annotation.AnimRes
当时我觉得androidx牛逼啊,打算升级androidx,具体可百度。
最后发现androidx 几乎不兼容android,出现了各种错误,就不再累述。
此时心中无比的慌乱,what i can do for it?我要为我愚蠢的行为买单了。
然后我把版本倒退回去,然后去官网找了下答案,原来低版本是支持android的,想想肯定也支持啊,不然以前的人怎么用,反正当时没有想到。。。。
配置如下:
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'
上面是我的gradle,下面是配置的plugin。plugin需要根据gradle来确定,实践可知,详情查官网。
总结
如果需要增加一个子项目,然后不希望build的时候花费太多的事件,那么可以放在一个new project中。
但是必须要保持配置一致,比如说作为lib module,在new project中,也应该是lib module。最好是把正式开发app module中的配置,放在new project中,代码就不必拷贝。
这样能减少合并出错的可能。
Butterknife Attribute value must be constant的更多相关文章
- springboot+RabbitMQ 问题 RabbitListener 动态队列名称:Attribute value must be constant
因为多机环境fanout广播模式,每台机器需要使用自己的队列接受消息 所以尝试使用以下的方案 private static final String QUEUE_NAME="foo.&quo ...
- butterknife异常提示:attribute value must be constant
就是因为你的android工程是lib类型的 如: apply plugin: 'com.android.library' android { compileSdkVersion 23 buildTo ...
- Swift - 代码创建NSLayoutConstraint布局
NSLayoutConstraint参数说明: /** * 创建约束 NSLayoutConstraint 参数 说明: * item 自己 * attribute * relatedBy 大于等于 ...
- iOS thirdKeyboard Develop (APP Extension)
如果需要开发第三方键盘 首先得了解一下苹果官方文档 https://developer.apple.com/library/ios/documentation/General/Conceptual/ ...
- 适配布局-ios
// 系统的约束代码 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIView *superVi ...
- iOS 屏幕适配:autoResizing autoLayout和sizeClass
1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...
- Masonry(AutoLayout)的使用
Masonry 仍然在维持. 如果使用 Swift 开发, 建议使用 SnapKit. Masonry 以一种简便可读的代码实现子控件自动布局 ,甚至可以实现一些动画,是一中轻量级的框架. Mason ...
- Objective-C 链式语法的实现
对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以理解为 ...
- ios NSLayoutConstraint
为了让我们的应用在不同尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死.大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了.但是ipho ...
随机推荐
- 力扣(LeetCode)删除排序链表中的重复元素 个人题解
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 这题思路比较简单,同样是快慢针的思路. 用一个整数类型val对应最新的只出现过一次的那个值, 如果节点的下一个节点的值和这个对应则不做别 ...
- ACE框架 基于共享内存的分配器 (算法设计)
继承上一篇<ACE框架 基于共享内存的分配器设计>,本篇分析算法部分的设计. ACE_Malloc_T模板定义了这样一个分配器组件 分配器组件聚合了三个功能组件:同步组件ACE_LOCK, ...
- 关于Java 值传递深度分析
首先说观点:java只有值传递没有引用传递 然后再来看看值传递与引用传递两者的定义 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改, ...
- d3.js 地铁轨道交通项目实战
上一章说了如何制作一个线路图,当然上一章是手写的JSON数据,当然手写的json数据有非常多的好处,例如可以应对客户的各种BT需求,但是大多数情况下我们都是使用地铁公司现成的JSON文件,话不多说我们 ...
- Openlayers 地图定位到相应位置并缩放
说明: 在地图操作中,有个功能,需要点击一个点,将视图定位到点击点的位置,并放大. 解决方案: 1.可以有openlayers中可以有ol.View来控制,但是在更改时,会将地图初始化时设置的maxZ ...
- 20190926-2 选题 Scrum立会报告+燃尽图05
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8678 一.小组情况组长:迟俊文组员:宋晓丽 梁梦瑶 韩昊 刘信鹏队名:扛 ...
- Redis开发与运维:SDS与embstr、raw 深入理解
对于上一篇文章,我又自己总结归纳并补充了一下,有了第二篇. 概览 <<左移 开始之前,我们先准备点东西:位运算 i<<n 总结为 i*2^n 所以 1<<5 = 2 ...
- 运维与开发的开车现场之MySQL5.7创建触发器报错解决过程
报错内容如下: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds ...
- 最短路径算法(跟新SPFA,Ford)
//以城市路为蓝本介绍算法 1381:城市路(Dijkstra) 时间限制: 1000 ms 内存限制: 65536 KB提交数: 4517 通过数: 1306 [题目描述] ...
- Zip压缩工具、tar打包、打包并压缩
第5周第2次课(4月17日) 课程内容: 6.5 zip压缩工具6.6 tar打包6.7 打包并压缩 6.5 zip压缩工具 Zip压缩工具最大的特点就是可以支持压缩目录,也能够压缩文件,Window ...