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

Expo如何根据Release Channel加载不同的google-services.json文件

根据Release Channel加载对应google-services.json的方案

完全可以根据不同环境加载对应的google-services.json文件,核心思路是通过动态配置或构建前脚本替换来实现,以下是两种可行方案:

方案一:使用app.config.js动态配置(推荐,适配Expo项目)

Expo支持将静态的app.json替换为动态的app.config.js,通过判断当前的releaseChannel来返回对应环境的配置:

  1. 将项目根目录的app.json重命名为app.config.js
  2. 修改文件内容为动态导出配置的函数,根据releaseChannel匹配对应的google-services文件:
module.exports = function (config) {
  // 获取当前releaseChannel,默认dev环境
  const releaseChannel = config.releaseChannel || 'dev';
  let googleServicesPath = './google-services-dev.json';

  // 根据环境匹配对应文件
  switch(releaseChannel) {
    case 'prod':
      googleServicesPath = './google-services-prod.json';
      break;
    case 'stage':
      googleServicesPath = './google-services-stage.json';
      break;
    case 'QA':
      googleServicesPath = './google-services-qa.json';
      break;
    default:
      googleServicesPath = './google-services-dev.json';
  }

  return {
    expo: {
      // 保留原有其他配置(如name、slug等)
      android: {
        googleServicesFile: googleServicesPath,
        adaptiveIcon: {
          foregroundImage: "./src/assets/adaptive-icon.png"
        },
        permissions: [
          "android.permission.CAMERA",
          "android.permission.ACCESS_FINE_LOCATION",
          "android.permission.WRITE_EXTERNAL_STORAGE",
          "android.permission.READ_EXTERNAL_STORAGE",
          "android.permission.ACTION_BOOT_COMPLETED",
          "android.permission.RECORD_AUDIO",
          "com.google.android.gms.permission.AD_ID"
        ],
        package: "com.beyondbelievers.awal",
        versionCode: 1
      },
      // 其他平台配置...
    }
  };
};
  1. 构建时指定对应的releaseChannel即可自动加载对应文件:
# 构建生产环境
expo build:android --release-channel prod

# 构建QA环境
expo build:android --release-channel QA

方案二:构建前脚本替换文件(适配Expo/原生React Native项目)

通过编写脚本,在构建前根据环境变量复制对应环境的google-services.json到默认路径:

  1. 将各环境文件命名为google-services-prod.json、google-services-stage.json、google-services-qa.json、google-services-dev.json,放在项目根目录
  2. 创建脚本文件swap-google-services.js:
const fs = require('fs');
const path = require('path');

// 从环境变量获取当前环境,默认dev
const targetEnv = process.env.RELEASE_CHANNEL || 'dev';
const sourceFilePath = path.resolve(`./google-services-${targetEnv}.json`);
const targetFilePath = path.resolve('./google-services.json');

// 复制文件覆盖默认路径
fs.copyFileSync(sourceFilePath, targetFilePath);
console.log(`已切换google-services文件至${targetEnv}环境`);
  1. 在package.json中添加构建脚本,执行构建前先运行替换脚本:
{
  "scripts": {
    "prebuild:prod": "RELEASE_CHANNEL=prod node swap-google-services.js",
    "build:prod": "expo build:android --release-channel prod",
    "prebuild:stage": "RELEASE_CHANNEL=stage node swap-google-services.js",
    "build:stage": "expo build:android --release-channel stage",
    "prebuild:qa": "RELEASE_CHANNEL=QA node swap-google-services.js",
    "build:qa": "expo build:android --release-channel QA",
    "prebuild:dev": "RELEASE_CHANNEL=dev node swap-google-services.js",
    "build:dev": "expo build:android --release-channel dev"
  }
}
  1. 执行对应脚本构建环境:
npm run build:qa

注意事项

  • 确保每个环境的google-services.json对应的Firebase项目包名与package字段一致,否则推送服务会失效
  • 构建时务必指定正确的releaseChannel,避免环境混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:50:21