Java 是什么原因引起的;“需要常量表达式”;switch语句中生成的R.id.xxx值出错?

Java 是什么原因引起的;“需要常量表达式”;switch语句中生成的R.id.xxx值出错?,java,android,gradle,Java,Android,Gradle,我们有一个多项目的应用程序,我们正在迁移到gradle。生成会导致Java编译错误,如: AFragment.java:159: constant expression required case R.id.aBtn: 我们已经确认错误中报告的常量在生成的R.java中 一个线索是错误只针对开关值。例如,使用findviewbyd(R.id.aBtn)没有错误 还要注意,常量来自主项目,而不是库项目之一 对于任何想摆脱这些错误的人来说,拉阿尔托的建议都能解决问题 他提供的链接,

我们有一个多项目的应用程序,我们正在迁移到gradle。生成会导致Java编译错误,如:

AFragment.java:159: constant expression required
        case R.id.aBtn:
我们已经确认错误中报告的常量在生成的
R.java

一个线索是错误只针对开关值。例如,使用
findviewbyd(R.id.aBtn)
没有错误

还要注意,常量来自主项目,而不是库项目之一

对于任何想摆脱这些错误的人来说,拉阿尔托的建议都能解决问题

他提供的链接,加上eclipse没有显示使用gradle构建时发生的错误,给了我另一个线索。eclipse生成的R.java将主要项目常量定义为“final”,但gradle生成的值不是“final”。真正的解决方案必须是纠正gradle构建文件

解决方案(2014-01-09)

我们的build.gradle应用的是android库插件,而不是android插件。是这样的:

应用插件:“android库”

将其更改为:

应用插件:“android”


已修复该问题。

如果使用库项目中的资源,则会发生这种情况。在这种情况下,
R
类中的ID不是真正的常量,因此不能在switch语句中使用。

库项目资源标识符不是常量
static final int
s,只是
static int
s

将需要打开库资源ID的代码转换为
if
-
else
结构


进一步阅读:

导致此错误的代码是??它是一个图书馆项目还是一个常规的Android项目?它必须是别的东西,因为所报告的常量实际上是公共静态最终int,因为它们是主要项目的一部分,而不是库项目。如果这不能解决问题,请考虑在该问题中添加您的构建设置的附加细节。它是dev环境版本的函数,无论是主项目还是库项目。。并非所有R资源标识符都声明为final。你只需要将开关移到ann,如果其他人帮我解决了这个项目,我不确定我做了什么使我的项目成为一个图书馆项目?我想这是因为我使用了一个gradle构建文件,它看起来(不完全是这样,但这是我的出发点)。它解决了问题,但是。。。为什么是库中的
static final int
int应用程序和
static int
?所以请您解释一下如何解决这个问题,因为在主要问题中更改插件并没有解决我的问题