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
,确保它们是不可变的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现