如何根据开发/生产环境切换Android项目strings.xml文件的配置取值
Android多环境动态切换Google Console配置字符串可行方案
方案1:使用Product Flavors(产品风味)实现资源隔离
这是Android官方原生支持的标准方案,无需引入额外依赖,适配性最高:
- 第一步:在app模块的
build.gradle(Gradle Kotlin DSL对应build.gradle.kts)中定义环境维度的产品风味:
android { ... flavorDimensions "environment" productFlavors { dev { dimension "environment" applicationIdSuffix ".dev" // 可选配置,让开发版和生产版可在同一设备共存 } prod { dimension "environment" } } }
- 第二步:在src目录下创建和main目录同级的风味专属资源目录,路径分别为
src/dev/res/values/strings.xml、src/prod/res/values/strings.xml - 第三步:在两个风味的strings.xml中使用相同的key定义对应环境的Google Console配置值,比如开发环境的strings.xml写
<string name="google_console_project_id">开发环境项目ID</string>,生产环境的strings.xml写<string name="google_console_project_id">生产环境项目ID</string>,构建对应风味的安装包时,Gradle会自动合并对应风味的资源,优先使用风味目录下的同key字符串值。
方案2:构建脚本注入资源值
如果不想维护多份strings.xml文件,可以直接在构建脚本中把不同环境的配置注入为字符串资源:
- 直接在productFlavors配置中添加
resValue字段声明对应环境的字符串:
android { ... flavorDimensions "environment" productFlavors { dev { dimension "environment" resValue "string", "google_console_project_id", "开发环境项目ID" resValue "string", "google_console_client_id", "开发环境客户端ID" // 其他配置按需添加 } prod { dimension "environment" resValue "string", "google_console_project_id", "生产环境项目ID" resValue "string", "google_console_client_id", "生产环境客户端ID" } } }
- 构建项目后即可直接在代码或者XML布局中通过
@string/google_console_project_id或者R.string.google_console_project_id调用,和普通字符串资源没有使用差异。
方案3:运行时动态切换(仅适用于测试场景)
如果有测试阶段无需重新打包即可切换环境的需求,可以在代码中维护多套配置映射:
- 把所有环境的配置值存储为Map或者常量数组,通过SharedPreferences存储当前选中的环境标识
- 封装统一的配置获取工具类,调用时根据当前选中的环境返回对应配置值
注意:该方案禁止用于正式发布的生产版本,避免误操作切换环境导致数据异常
内容的提问来源于stack exchange,提问作者sanjeewa priyanath
相关产品推荐
相关产品推荐

