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

为已发布的Flutter Firebase项目配置双环境方案咨询

Flutter Firebase 多环境配置方案(开发/生产隔离)

核心思路

通过构建环境(Flavor)区分开发/生产环境,为不同环境配置独立的Firebase应用配置文件,构建时自动加载对应环境的配置,彻底避免手动替换文件导致的覆盖问题,同时支持开发版与生产版APP在设备上共存。

具体实现步骤

1. 目录结构调整

在项目根目录创建config文件夹,分别存放开发(dev)和生产(prod)环境的Firebase配置文件:

your_flutter_project/
├── config/
│   ├── dev/
│   │   ├── google-services.json      # 开发环境Android配置
│   │   └── GoogleService-Info.plist  # 开发环境iOS配置
│   └── prod/
│       ├── google-services.json      # 生产环境Android配置
│       └── GoogleService-Info.plist  # 生产环境iOS配置
└── ...

2. Android端配置(build.gradle)

修改android/app/build.gradle,添加环境Flavor并配置对应配置文件路径:

android {
    // 保留原有配置...

    // 定义环境维度
    flavorDimensions "environment"
    productFlavors {
        dev {
            dimension "environment"
            applicationIdSuffix ".dev"  // 开发版包名加后缀,实现与生产版共存
            resValue "string", "app_name", "你的应用 Dev"  // 开发版应用名称
        }
        prod {
            dimension "environment"
            resValue "string", "app_name", "你的应用"  // 生产版应用名称
        }
    }

    // 配置不同Flavor加载对应目录的google-services.json
    sourceSets {
        dev {
            googleServices.srcDir '../config/dev'
        }
        prod {
            googleServices.srcDir '../config/prod'
        }
    }
}

3. iOS端配置(Xcode + 脚本)

自动复制配置文件脚本

  1. 打开iOS项目(ios/Runner.xcworkspace),进入Build Phases
  2. 点击**+** → New Run Script Phase,将脚本拖到Copy Bundle Resources之前
  3. 输入以下脚本:
# 根据Build Configuration选择对应配置文件
if [ "${CONFIGURATION}" == "Debug" ]; then
    CONFIG_PATH="${PROJECT_DIR}/../config/dev/GoogleService-Info.plist"
else
    CONFIG_PATH="${PROJECT_DIR}/../config/prod/GoogleService-Info.plist"
fi

# 复制到目标目录,覆盖默认文件
cp "${CONFIG_PATH}" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"

Scheme区分(可选,更灵活)

  1. 复制现有Scheme:点击Xcode顶部Scheme下拉框 → Manage Schemes → 选中Runner → 点击Duplicate,命名为Runner Dev
  2. 编辑Runner Dev Scheme:在Run → Info中,将Build Configuration改为Debug;Runner Scheme保持Release
  3. 切换Scheme即可快速切换开发/生产环境

4. Dart代码中区分环境(可选)

通过dart-define传递环境变量,在代码中做逻辑区分(比如日志、API地址等):

  • 运行开发环境:
flutter run --flavor dev --dart-define=ENV=dev
  • 运行生产环境:
flutter run --flavor prod --dart-define=ENV=prod

在Dart代码中获取环境变量:

const String env = String.fromEnvironment('ENV', defaultValue: 'prod');

void main() {
  if (env == 'dev') {
    // 开发环境专属逻辑,比如开启详细日志
  }
  runApp(const MyApp());
}

5. 打包与切换

  • 开发环境打包:
# Android
flutter build apk --flavor dev
# iOS
flutter build ios --flavor dev
  • 生产环境打包:
# Android
flutter build apk --flavor prod
# iOS
flutter build ios --flavor prod

替代方案(手动切换,不推荐)

如果不想配置Flavor,可手动备份生产环境配置文件,开发时替换为开发环境配置,开发完成后再换回。但此方法容易出错,且无法同时安装两个环境的APP,仅适合临时测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:01:10