我们有一个多项目应用程序,我们正在努力学习.构建导致Java编译错误,如:
AFragment.java:159: constant expression required
case R.id.aBtn:
Run Code Online (Sandbox Code Playgroud)
我们已经确认错误中报告的常量在生成中R.java.
一个线索是错误仅适用于开关值.例如,没有使用错误findViewById(R.id.aBtn).
还要注意,常量来自主项目,而不是一个库项目.
对于任何想要摆脱错误的人来说,laalto的建议将解决它.
他提供的链接,以及eclipse没有显示使用gradle构建时出现的错误这一事实给了我另一条线索.eclipse生成的R.java将主项目常量定义为'final',但gradle生成的值不是'final'.真正的解决方案必须是纠正gradle构建文件.
解决方案(2014-01-09)
我们的app.gradle应用程序是应用android-library插件而不是android插件.是这样的:
apply plugin:'android-library'
把它改成这个:
apply plugin:'android'
解决了这个问题.
我有一段时间的Java Android项目.今天,我已经将Android开发工具更新为Google的最新版本.而且项目破了 - 我得到了一堆"case表达式必须是常量表达式"的编译错误信息.
事实证明,R.java文件现在以不同方式生成.以前,它会有一堆
public static final int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)
报表; 现在,它看起来(在清理/重建之后)像这样:
public static int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)
final离开了.所以我拥有的资源ID的所有开关(我都有一些)是错误的.怎么了,拜托?只有我吗?这里的理由是什么?是否记录在任何地方?我能final以某种方式带回来吗?
我想在我的网站上加入一个开源项目.但在检查"是库"选项后,有些东西如"case R.id.menu_search:"无法编译.我应该用它的常数值替换它们,或者我如何包含它?
case R.id.menu_search: // ! case expressions must be constant expressions
onSearchRequested();
return true; ...
Run Code Online (Sandbox Code Playgroud)