Android Studio 中使用switch语句时报错Constant expression required的解决方法
在工程目录下第一级的 gradle.properties 中添加 :
android.nonFinalResIds=false
然后Sync Now 重新gradle,就不会再报错了。
1. Android 项目中,资源文件(如 R.string、R.layout 等)会在构建时生成对应的 R 类,包含每个资源的唯一 ID。过去,这些资源 ID 默认是 final 的。
-
android.nonFinalResIds=false(旧行为)- 所有资源 ID 都会被标记为
final,无法修改。 - 适合传统的单模块项目,但在多模块化或动态资源加载中限制较多。
- 所有资源 ID 都会被标记为
-
android.nonFinalResIds=true(新行为,默认) - 资源 ID 不再生成为
final。 - 支持多模块和动态资源加载(如 R8 编译优化和资源分离)。
2. 为什么要设置 nonFinalResIds?
将 nonFinalResIds 设置为 true 或 false 取决于你的项目需求:
true(默认,推荐)
- 支持 Gradle 资源优化(如移除未使用资源)。
- 更好地支持多模块化开发(模块间的资源访问)。
- 减小 APK 文件大小并优化编译时间。
false(兼容性模式)
- 如果你依赖旧式代码逻辑(如硬编码的资源引用)或某些第三方库需要
final资源 ID,则可以设置为false。 - 在这种模式下,所有资源 ID 都会被标记为
final,确保它们是不可变的。

浙公网安备 33010602011771号