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

GitHub Actions构建时build.gradle无法读取apikey.properties配置值问题

问题根因

1. 两次写入操作覆盖了文件内容

你两次写入apikey.properties都使用了重定向符>,该符号会先清空原有文件内容再写入新内容,所以执行完第二个私钥写入步骤后,文件里只会保留PRIVATE_API_KEY解码后的值,PUBLIC_API_KEY的内容被完全覆盖。

2. 写入内容不符合properties文件格式要求

properties文件要求每一行为键名=值的结构,你直接把解码后的密钥值写入文件,没有带上对应的键名,Gradle读取时无法匹配到PUBLIC_API_KEY和PRIVATE_API_KEY对应的键,自然返回null。

修复方案

第一步:调整GitHub Actions写入逻辑

把两个写文件步骤合并,补充键名前缀,同时区分使用覆盖和追加重定向符,修改后的action配置如下:

name: My fancy app 

on: [ push, pull_request ]

defaults:
  run:
    shell: bash

jobs:

  build:

    runs-on: ubuntu-latest

    steps:
      - name: Clone Repo
        uses: actions/checkout@v1

      - name: Write apikey.properties
        env:
          PUBLIC_API_KEY: ${{ secrets.PUBLIC_API_KEY }}
          PRIVATE_API_KEY: ${{ secrets.PRIVATE_API_KEY }}
        run: |
          echo "PUBLIC_API_KEY=$(echo "$PUBLIC_API_KEY" | base64 -d)" > ./apikey.properties
          echo "PRIVATE_API_KEY=$(echo "$PRIVATE_API_KEY" | base64 -d)" >> ./apikey.properties

说明:第一次写入用>创建新文件写入公钥,第二次写入用>>追加私钥内容,每一行都符合properties文件的键值格式要求。

第二步:优化build.gradle读取逻辑(可选)

如果密钥值包含特殊字符,建议给buildConfigField的取值补充引号包裹,避免编译报错:

def apikeyPropertiesFile = rootProject.file("apikey.properties")
def apikeyProperties = new Properties()
try {
    apikeyProperties.load(new FileInputStream(apikeyPropertiesFile))
    println("Private Key value" + apikeyProperties['PRIVATE_API_KEY'])
    println("Public Key value" + apikeyProperties['PUBLIC_API_KEY'])
} catch(Exception exception) {
    println("Error by loading properties file" + exception.message)
}
....

buildConfigField("String", "PRIVATE_API_KEY", "\"${apikeyProperties['PRIVATE_API_KEY']}\"")
buildConfigField("String", "PUBLIC_API_KEY", "\"${apikeyProperties['PUBLIC_API_KEY']}\"")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:00:01