You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter Firebase应用中通过--dart-define指定google-services.json

结论

可以实现。但google-services.json(Android端)/GoogleService-Info.plist(iOS端)属于原生构建阶段就需要解析的配置文件,无法直接在Dart层通过--dart-define参数加载,需要配合原生端的构建脚本读取--dart-define传入的环境标识,自动将对应环境的配置文件复制到原生构建默认读取的路径即可。


前置准备

先将不同环境的配置文件按统一规则存放在项目根目录,比如按如下结构存放:

项目根目录
└── config
    ├── dev
    │   ├── google-services.json
    │   └── GoogleService-Info.plist
    ├── test
    │   ├── google-services.json
    │   └── GoogleService-Info.plist
    └── prod
        ├── google-services.json
        └── GoogleService-Info.plist

Android端配置

  1. 打开项目android/app/build.gradle文件,在文件顶部添加逻辑读取--dart-define传入的环境参数:
// 读取dart-define传入的环境标识,无参数时默认使用开发环境
def dartEnv = System.getenv('FLUTTER_APPLICATION_ARGS')?.split('--dart-define=ENV=')?.getAt(1)?.split(' ')?.getAt(0) ?: 'dev'
  1. 在android配置块之前添加文件复制任务,绑定到构建前置流程:
task copyGoogleServices(type: Copy) {
    from "../config/${dartEnv}/google-services.json"
    into "."
}

// 构建前自动执行配置文件复制
preBuild.dependsOn copyGoogleServices

iOS端配置

  1. 打开Xcode选中Runner项目,进入Build Phases标签页,点击左上角+号选择New Run Script Phase,将新建的脚本阶段拖到Dependencies阶段之后
  2. 在脚本输入框填入以下内容:
# 读取dart-define传入的环境标识,无参数时默认使用开发环境
ENV=$(echo $FLUTTER_APPLICATION_ARGS | grep -o 'ENV=[^ ]*' | cut -d'=' -f2)
if [ -z "$ENV" ]; then
  ENV="dev"
fi

# 复制对应环境的配置文件到默认读取路径
cp "$SRCROOT/../config/$ENV/GoogleService-Info.plist" "$SRCROOT/Runner/GoogleService-Info.plist"
  1. 不要将GoogleService-Info.plist加入Xcode的编译缓存列表,避免旧配置被复用。

构建使用示例

构建时通过--dart-define传入对应环境参数即可自动加载匹配的配置文件:

  • 开发环境调试:flutter run --dart-define=ENV=dev
  • 测试环境打包:flutter build apk --dart-define=ENV=test
  • 生产环境打包:flutter build ipa --dart-define=ENV=prod

注意事项

  • 切换环境构建前建议先执行flutter clean清理构建缓存,避免旧配置文件残留
  • 不要将原生目录下默认路径的google-services.json和GoogleService-Info.plist提交到代码仓库,避免配置冲突

内容的提问来源于stack exchange,提问作者cahix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:45:00