我们有一个多项目应用程序,我们正在向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库插件,而不是android插件。是这样的:
应用插件:"android库">
将其更改为:
应用插件:"android">
解决了问题。
库项目资源标识符不是恒定的static final int
s,只是static int
s。
将需要打开库资源id的代码转换为if
-else
结构。
进一步阅读:http://tools.android.com/tips/non-constant-fields
如果您使用Library项目中的资源,就会发生这种情况。在这种情况下,R
类中的id并不是真正的常量,因此不能在switch语句中使用。