我们有一个多项目应用程序,我们正在迁移到gradle。构建会导致Java编译错误,例如:
AFragment.java:159: constant expression required
case R.id.aBtn:
我们已经确认错误中报告的常量在生成的R.java
中。
一个线索是错误仅适用于开关值。例如,使用findViewById(R.id. aBtn)
没有错误。
另请注意,常量来自主项目,而不是库项目之一。
对于任何想摆脱错误的人来说,拉尔托的建议都会解决这个问题。
他提供的链接,以及eclipse不显示使用gradle构建时发生的错误的事实给了我另一个线索。eclipse生成的R.java将主项目常量定义为“最终”,但gradle生成的值不是“最终”。真正的解决方案必须是纠正gradle构建文件。
解决方案(2014-01-09)
我们用于该应用程序的build. gradle正在应用android-Library插件而不是android插件。是这样的:
应用插件:“Android库”
将其更改为:
应用插件:“android”
修复了问题。
库项目资源标识符不是常量静态最终int
s,只是静态int
s。
将需要打开库资源id的代码转换为if
-else
结构。
进一步阅读:http://tools.android.com/tips/non-constant-fields
如果您使用Library项目中的资源,就会发生这种情况。在这种情况下,R
类中的id不是真正的常量,因此不能在switch语句中使用。