我们有一个多项目应用程序,我们正在迁移到 gradle。构建会导致 Java 编译错误,例如:
AFragment.java:159: constant expression required
case R.id.aBtn:
我们已经确认错误中报告的常量在生成的R.java
中。
一个线索是错误只针对开关值。例如,使用 findViewById(R.id.aBtn)
没有错误。
还要注意,常量来自主项目,而不是库项目之一。
对于任何想要摆脱错误的人来说,laalto 的建议都会解决它。
他提供的链接,以及 eclipse 没有显示使用 gradle 构建时发生的错误的事实给了我另一个线索。 eclipse 生成的 R.java 将主要项目常量定义为“final”,但 gradle 生成的值不是“final”。真正的解决方案必须是更正 gradle 构建文件。
解决方案 (2014-01-09)
应用的 build.gradle 应用的是 android-library 插件而不是 android 插件。是这样的:
应用插件:'android-library'
改成这样:
应用插件:'android'
解决了问题。
最佳答案
库项目资源标识符不是常量static final int
s,只是static int
s。
将需要开启库资源id的代码转换成if
-else
结构。
关于java - 是什么导致 switch 语句中生成的 R.id.xxx 值出现 "constant expression required"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005205/