【发布时间】:2018-02-02 06:44:33
【问题描述】:
这是Android: Why do we need to use R2 instead of R with butterknife? 和Reference in R.java not final 的扩展
我了解库项目中 R.java 的字段没有 final 修饰符来保护库项目之间的值冲突。但是 ButterKnife 在 R2 中恢复了最终修饰符并使用它。
我认为这涉及到碰撞问题,值可以碰撞,但没有问题。它是如何工作的?
===
我添加示例。 有一个主项目和一个库项目。主项目有 com.main.R,库项目有 com.library.R。
- 发生碰撞时:
- com.main.R: public static final int example = 0x1234
- com.library.R:公共静态整数示例 = 0x1234
如果构建工具不重新编译库项目,我们如何避免这些值之间的冲突?
- 当 ButterKnife 创建 R2
- com.main.R: public static final int example = 0x1234
- com.library.R:公共静态整数示例 = 0x1234
- com.library.R2:公共静态最终 int 示例 = 0x1234
com.library.R2 有一个冲突,甚至它有一个 final 修饰符。它不会产生问题吗?为什么?
谢谢
【问题讨论】:
-
请注意,final 在 main
R.java中不再使用。参考这个tools.android.com/tips/non-constant-fields -
@Debdeep 非常感谢您的帮助,但我很难理解您。 “final不再用于主R.java”这是什么意思? That document 说 final 仅在库项目的情况下被删除。
-
其实是的,库项目中的final在映射到主R.java时不再被接受。
标签: android butterknife