Android Studio 中使用switch语句时报错Constant expression required的解决方法

在工程目录下第一级的 gradle.properties 中添加 :

android.nonFinalResIds=false

然后Sync Now 重新gradle,就不会再报错了。

 

1. Android 项目中,资源文件(如 R.stringR.layout 等)会在构建时生成对应的 R 类,包含每个资源的唯一 ID。过去,这些资源 ID 默认是 final 的。

  • android.nonFinalResIds=false(旧行为)

    • 所有资源 ID 都会被标记为 final,无法修改。
    • 适合传统的单模块项目,但在多模块化或动态资源加载中限制较多。
  • android.nonFinalResIds=true(新行为,默认)

    • 资源 ID 不再生成为 final
    • 支持多模块和动态资源加载(如 R8 编译优化和资源分离)。

2. 为什么要设置 nonFinalResIds

nonFinalResIds 设置为 truefalse 取决于你的项目需求:

true(默认,推荐)

  • 支持 Gradle 资源优化(如移除未使用资源)。
  • 更好地支持多模块化开发(模块间的资源访问)。
  • 减小 APK 文件大小并优化编译时间。

false(兼容性模式)

  • 如果你依赖旧式代码逻辑(如硬编码的资源引用)或某些第三方库需要 final 资源 ID,则可以设置为 false
  • 在这种模式下,所有资源 ID 都会被标记为 final,确保它们是不可变的。
posted @   Fitz  阅读(184)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示