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

如何通过GitHub Actions结合Firebase Remote Config实现Android versionCode自动递增并用于Firebase应用分发?

如何通过GitHub Actions结合Firebase Remote Config实现Android versionCode自动递增并用于Firebase应用分发?

我来帮你搞定这个自动版本递增的问题!你现在的需求是把Android的versionCode和versionName从本地build.gradle移到Firebase Remote Config,通过GitHub Actions自动拉取当前版本、递增versionCode(按需处理versionName)、更新回Remote Config,最后用新的版本号构建APK并分发到Firebase App Distribution对吧?下面一步步来实现:

一、先在Firebase控制台配置初始版本参数

首先得在Firebase Remote Config里把存储版本的参数建好:

  • 打开你的Firebase项目控制台,进入「Remote Config」页面
  • 点击「添加参数」,创建两个参数:
    • 名称:android_version_code,类型选「整数」,默认值填初始版本码(比如1)
    • 名称:android_version_name,类型选「字符串」,默认值填初始版本名(比如1.0.0)
  • 配置完后记得点击「发布更改」,让参数生效

二、配置GitHub仓库的Firebase认证信息

要让GitHub Actions能操作Firebase,得先把认证凭证存到仓库的Secrets里:

  • 方式一:用Firebase登录令牌
    本地终端运行firebase login:ci,跟着提示登录后会得到一个长期有效的令牌,把这个令牌存到GitHub仓库的「Settings → Secrets and variables → Actions」里,命名为FIREBASE_TOKEN
  • 方式二:用服务账号密钥
    在Firebase控制台「项目设置 → 服务账号」里生成新的私钥,把下载的JSON文件内容复制到GitHub Secrets里,命名为FIREBASE_SERVICE_ACCOUNT

三、修改Android项目的build.gradle,支持命令行传入版本号

原来的版本号写在build.gradle的defaultConfig里,现在要改成能读取GitHub Actions传递的参数,同时保留本地构建的默认值:
打开app模块的build.gradle(或build.gradle.kts),修改defaultConfig部分:

defaultConfig {
    applicationId "com.your.app.package"
    minSdk 21
    targetSdk 33
    // 优先读取命令行传入的版本号,没有的话用本地默认值
    versionCode project.hasProperty('android.injected.versionCode') ? project.property('android.injected.versionCode').toInteger() : 1
    versionName project.hasProperty('android.injected.versionName') ? project.property('android.injected.versionName') : "1.0.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

四、编写GitHub Actions Workflow脚本

在你的Android项目根目录创建.github/workflows/build-distribute.yml文件,把下面的内容填进去,注意替换成你自己的Firebase项目ID、测试组名称等信息:

name: 构建并分发APK到Firebase

on:
  # 可以设置成推送到主分支时触发,或者手动触发
  push:
    branches: [ main ]
  workflow_dispatch:
    # 如果需要手动指定versionName,可以加这个输入参数
    inputs:
      version_name:
        description: '手动指定版本名(比如1.1.0)'
        required: false
        default: ''

jobs:
  build-and-distribute:
    runs-on: ubuntu-latest
    steps:
      - name: 检出仓库代码
        uses: actions/checkout@v4

      - name: 配置Java环境(Android构建需要)
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: 安装Firebase CLI
        run: npm install -g firebase-tools

      - name: 安装jq工具(用于解析Remote Config的JSON)
        run: sudo apt-get install -y jq

      - name: Firebase认证
        run: firebase login:ci --token ${{ secrets.FIREBASE_TOKEN }}
        # 如果用服务账号的话,替换成下面的命令:
        # env:
        #   GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}
        # run: firebase use your-firebase-project-id --add

      - name: 从Firebase Remote Config拉取当前版本
        run: |
          # 拉取Remote Config配置到本地文件
          firebase remoteconfig:get --project your-firebase-project-id > remote_config.json
          # 解析出当前的versionCode和versionName
          CURRENT_VERSION_CODE=$(jq -r '.parameters.android_version_code.defaultValue.value' remote_config.json)
          CURRENT_VERSION_NAME=$(jq -r '.parameters.android_version_name.defaultValue.value' remote_config.json)
          # 递增versionCode
          NEW_VERSION_CODE=$((CURRENT_VERSION_CODE + 1))
          # 处理versionName:如果手动指定了就用指定的,否则自动递增小版本号
          if [ -n "${{ github.event.inputs.version_name }}" ]; then
            NEW_VERSION_NAME="${{ github.event.inputs.version_name }}"
          else
            # 自动递增语义化版本的最后一位(比如1.0.0 → 1.0.1)
            NEW_VERSION_NAME=$(echo $CURRENT_VERSION_NAME | awk -F. -v OFS=. '{$NF++; print}')
          fi
          # 把新的版本号存入环境变量,供后续步骤使用
          echo "NEW_VERSION_CODE=$NEW_VERSION_CODE" >> $GITHUB_ENV
          echo "NEW_VERSION_NAME=$NEW_VERSION_NAME" >> $GITHUB_ENV

      - name: 更新Firebase Remote Config的版本号
        run: |
          # 生成临时的Remote Config更新配置文件
          cat > update_remote_config.json << EOF
          {
            "parameters": {
              "android_version_code": {
                "defaultValue": {
                  "value": "${{ env.NEW_VERSION_CODE }}"
                }
              },
              "android_version_name": {
                "defaultValue": {
                  "value": "${{ env.NEW_VERSION_NAME }}"
                }
              }
            }
          }
          EOF
          # 推送更新到Remote Config
          firebase remoteconfig:update --config update_remote_config.json --project your-firebase-project-id
          # 发布更新,让新的版本号生效
          firebase remoteconfig:publish --project your-firebase-project-id

      - name: 构建Release版本APK
        run: ./gradlew assembleRelease -Pandroid.injected.versionCode=${{ env.NEW_VERSION_CODE }} -Pandroid.injected.versionName=${{ env.NEW_VERSION_NAME }}

      - name: 分发APK到Firebase App Distribution
        run: firebase appdistribution:distribute app/build/outputs/apk/release/app-release.apk --project your-firebase-project-id --groups 你的测试组名称

五、关键注意事项

  • 确保GitHub Secrets里的Firebase认证凭证有足够权限:服务账号需要拥有「Remote Config编辑器」和「App Distribution分发者」的角色
  • 如果你的APK输出路径和示例不一样,要修改分发步骤里的APK路径
  • versionName的自动递增逻辑可以根据你的需求调整,比如如果是大版本更新,建议用手动触发Workflow时输入versionName的方式,避免自动递增出错
  • 本地构建时,还是可以正常用build.gradle里的默认版本号,或者手动传入版本号测试:./gradlew assembleRelease -Pandroid.injected.versionCode=10 -Pandroid.injected.versionName=1.1.0

备注:内容来源于stack exchange,提问作者swapnil jadhav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:29:29