java - 是什么导致 switch 语句中生成的 R.id.xxx 值出现 "constant expression required"错误?

标签 java android gradle

我们有一个多项目应用程序,我们正在迁移到 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 ints,只是static ints。

将需要开启库资源id的代码转换成if-else结构。

延伸阅读:http://tools.android.com/tips/non-constant-fields

关于java - 是什么导致 switch 语句中生成的 R.id.xxx 值出现 "constant expression required"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005205/

相关文章:

android - Gradle:如何在控制台中显示 androidTest 结果?

java - 仅获取有关特定列的元数据信息,而不循环遍历所有列......这可能吗?

java - 从 JSP 读取 CSV 文件

Android http post 不发送数据

android - Wifi 直连发现

android - 使用 Android 7 的 Genymotion 模拟器上的 Google Play 服务

gradle - 在多模块设置中找不到 compileOnly()

java - 以 3D 方式显示 dicom 或原始图像

java - 忽略新实例

android - React Native构建失败:文件超出大小限制2147483647