背景

在下面的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的值报错了。

这时候一个前提,我先写好了子项目,然后合并项目出的错误,我把配置拷贝了过来。

再三确定配置没有出错的情况下,我开始怀疑:

  1. 是否是一些配置冲突了。
  2. 是否是在app moudule 和lib moudule 有什么不同的地方。(我写好子项目,实在app目录下进行的,而这次引用是作为lib)

配置冲突无疑是非常头痛的问题,你不知道到底有多少验证在等着你。

但是我转念一想,配置冲突的可能性几乎微乎其微,而且同步报错的可能性极大,当然也有极小的可能性不报错,这取决于是否按照规范开发jar包,那么这种情况是最坏的打算,并且几乎不可能,暂不考虑。

然后我去google了一波官网,发现配置app moudule 与lib moudule真的不同。

解决



图中我标红了关键点,这是出错需要修改的。

  1. 我们需要依赖一个plugin
  2. 然后在子lib module 中apply.
  3. 并且呢,要使用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的更多相关文章

  1. springboot+RabbitMQ 问题 RabbitListener 动态队列名称:Attribute value must be constant

    因为多机环境fanout广播模式,每台机器需要使用自己的队列接受消息 所以尝试使用以下的方案 private static final String QUEUE_NAME="foo.&quo ...

  2. butterknife异常提示:attribute value must be constant

    就是因为你的android工程是lib类型的 如: apply plugin: 'com.android.library' android { compileSdkVersion 23 buildTo ...

  3. Swift - 代码创建NSLayoutConstraint布局

    NSLayoutConstraint参数说明: /** * 创建约束 NSLayoutConstraint 参数 说明: * item 自己 * attribute * relatedBy 大于等于 ...

  4. iOS thirdKeyboard Develop (APP Extension)

    如果需要开发第三方键盘 首先得了解一下苹果官方文档  https://developer.apple.com/library/ios/documentation/General/Conceptual/ ...

  5. 适配布局-ios

    // 系统的约束代码 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIView *superVi ...

  6. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  7. Masonry(AutoLayout)的使用

    Masonry 仍然在维持. 如果使用 Swift 开发, 建议使用 SnapKit. Masonry 以一种简便可读的代码实现子控件自动布局 ,甚至可以实现一些动画,是一中轻量级的框架. Mason ...

  8. Objective-C 链式语法的实现

    对于 Objective-C 的语法,喜欢的人会觉得它是如此的优雅,代码可读性强,接近自然语言,开发者在调用大多数方法时不需要去查看注释或文档,通常只凭借方法名就可以大致知道这个方法的作用,可以理解为 ...

  9. ios NSLayoutConstraint

    为了让我们的应用在不同尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死.大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了.但是ipho ...

随机推荐

  1. nyoj 66-分数拆分 (Java,暴力)

    66-分数拆分 内存限制:64MB 时间限制:3000ms 特判: No 通过数:7 提交数:9 难度:1 题目描述: 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y ...

  2. windows 10上源码编译dlib教程 | compile dlib on windows 10

    本文首发于个人博客https://kezunlin.me/post/654a6d04/,欢迎阅读! compile dlib on windows 10 Series Part 1: compile ...

  3. mac中安装Jenkins+jdk

    Jenkins是基于Java开发的一种持续集成工具,用于持续的软件版本发布/测试项目,并监控外部调用执行的工作.简单来说就是自动化测试+部署. 首先我们需要安装jdk,注意,目前jenkins只支持j ...

  4. 万恶之源-python的部分内容

    1.字符串格式化输出 ​ %占位符: ​ 声明占位的类型%s--字符串 %d%i--整型 %%转义 成为普通的% %s ,%d, %% msg = '%s,学习进度5%%' print(msg%(in ...

  5. 投票通过,PHP 8 确认引入 Union Types 2.0

    关于是否要在 PHP 8 中引入 Union Types 的投票已于近日结束,投票结果显示有 61 名 PHP 开发组成员投了赞成票,5 名投了反对票. 还留意到鸟哥在投票中投了反对票~) 因此根据投 ...

  6. kali linux 2019.4设置为中文方法

    就在前天,2019年11月26日,kali Linux官网发布了最新版本:Kali Linux 2019.4发行版,此版本和之前相比变动很大,系统界面.主题.壁纸都灿然一新. Kali Linux20 ...

  7. day 38 高级选择器

    1.高级选择器 一.高级选择器 1-后代选择器 ***** 儿子.孙子.重孙子 1. .father .wu{ color: red; } 选择父类中特定的子类 2. .father p{ #后代中间 ...

  8. 折腾笔记-计蒜客t1156AC记

    欢迎查看原题地址 此题思路(最初版): 暴力,得出最相近的,1000ms呢,除非数据超大,否则不超时. 说明: 爆搜,搜出结果,时间复杂度基本 $O(n^2)$ 注:本文所有时间(与空间)复杂度仅为估 ...

  9. 环境配置——tornado项目准备工作

    新建tornado项目后,采用Pycharm作为开发工具,采用Xshell链接Ubuntu模拟服务端方便方便测试.项目编码前进行以下几个方面的配置. 1.Ubuntu配置 1.1安装ssh服务 sud ...

  10. at、crontab、anacron的基本使用

    Linux的任务调度机制主要分为两种: 1. 执行一次:将在某个特定的时间执行的任务调度 at 2. 执行多次: crontab 3.关机后恢复尚未执行的程序 anacron. ①at at命令用于在 ...