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

Android项目GitHub Actions CI/CD写入Google Maps密钥到BuildConfig失败

问题分析与解决方案

核心错误原因

你在GitHub Actions工作流中通过echo写入环境变量的方式有误,导致环境变量值末尾被意外添加了单引号,最终生成的BuildConfig.java代码出现语法错误(多余的单引号)。


步骤1:修复GitHub Actions工作流配置

错误写法的问题

原工作流中使用echo 'KEY=${{ secrets.KEY }}' >> $GITHUB_ENV的方式,会导致当GitHub对敏感信息进行掩码(显示为***)时,错误保留了包裹字符串的单引号,使得环境变量值变为***',进而在Gradle生成BuildConfig时出现"***"; '的非法语法。同时原配置中setup-java步骤的with缩进错误,会导致步骤执行失败。

优化后的工作流配置

直接在Job级别定义环境变量,无需通过echo写入,既简洁又避免错误:

jobs:
  build:
    runs-on: ubuntu-latest
    # 直接在Job级别注入所有密钥作为环境变量
    env:
      DEV_GOOGLE_PLACES_API_KEY: ${{ secrets.DEV_GOOGLE_PLACES_API_KEY }}
      STAGE_GOOGLE_PLACES_API_KEY: ${{ secrets.STAGE_GOOGLE_PLACES_API_KEY }}
      PROD_GOOGLE_PLACES_API_KEY: ${{ secrets.PROD_GOOGLE_PLACES_API_KEY }}

    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 22
        uses: actions/setup-java@v4
        with:
          java-version: '22'
          distribution: 'temurin'
          cache: gradle

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew

      - name: Build with Gradle
        run: ./gradlew buildwhiskeyDebug

步骤2:优化Gradle配置(可选但更规范)

原Gradle代码中debug和release构建类型都使用同一个DEV密钥,建议根据环境对应不同密钥,同时添加空值校验避免潜在问题:

buildTypes {
    debug {
        // 本地调试时可设置默认值,避免构建失败
        def devApiKey = System.getenv("DEV_GOOGLE_PLACES_API_KEY") ?: "local_debug_key"
        buildConfigField "String", "GOOGLE_PLACES_API_KEY", "\"${devApiKey}\""
    }
    release {
        def prodApiKey = System.getenv("PROD_GOOGLE_PLACES_API_KEY")
        // 生产环境强制校验密钥存在性
        if (prodApiKey == null || prodApiKey.isEmpty()) {
            throw new GradleException("PROD_GOOGLE_PLACES_API_KEY environment variable is not set!")
        }
        buildConfigField "String", "GOOGLE_PLACES_API_KEY", "\"${prodApiKey}\""
    }
    // 新增stage构建类型(按需启用)
    stage {
        initWith release
        def stageApiKey = System.getenv("STAGE_GOOGLE_PLACES_API_KEY")
        if (stageApiKey == null || stageApiKey.isEmpty()) {
            throw new GradleException("STAGE_GOOGLE_PLACES_API_KEY environment variable is not set!")
        }
        buildConfigField "String", "GOOGLE_PLACES_API_KEY", "\"${stageApiKey}\""
    }
}

验证修复

重新触发GitHub Actions构建,此时环境变量会被正确注入,Gradle生成的BuildConfig.java代码将符合Java语法规范,不会再出现多余的单引号错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:15:13