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
相关产品推荐
相关产品推荐

