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

升级SDK 31后build.gradle无法读取GitLab CI环境变量如何解决

问题根因

升级compileSdk到31时,通常需要同步升级Android Gradle Plugin(AGP)到7.0及以上版本。AGP 7.0+默认启用了构建进程环境变量隔离策略,未显式声明允许传递的系统环境变量不会被注入到Gradle运行时上下文,因此原有的System.getenv()调用无法读取到GitLab CI注入的密钥环境变量。


解决方案1:显式声明允许Gradle读取系统环境变量(推荐,无需修改CI配置)

  1. 打开项目根目录的gradle.properties文件,添加如下配置,将所有需要用到的密钥环境变量显式声明允许传递:
# 按实际用到的密钥字段添加,格式为systemProp.变量名=${系统环境变量名}
systemProp.store=${store}
systemProp.keyAlias=${keyAlias}
systemProp.keyPassword=${keyPassword}
systemProp.storePassword=${storePassword}
  1. 调整build.gradle中的读取逻辑,增加空校验避免构建崩溃:
Properties keyProps = new Properties()
def storeVal = System.getProperty("store") ?: System.getenv("store")
if (storeVal != null) {
    keyProps.setProperty("store", storeVal)
}
// 其余密钥字段按相同逻辑处理

解决方案2:CI构建命令显式传参

修改.gitlab-ci.yml中的构建脚本,在执行gradle命令时直接传递密钥参数:

assembleReleaseJob:
  only:
    - main
  script:
    - ./gradlew assembleRelease \
        -Pstore="$store" \
        -PkeyAlias="$keyAlias" \
        -PkeyPassword="$keyPassword" \
        -PstorePassword="$storePassword"

对应修改build.gradle的读取逻辑:

Properties keyProps = new Properties()
if (project.hasProperty("store")) {
    keyProps.setProperty("store", project.property("store").toString())
}
// 其余密钥字段按相同逻辑处理

注意事项

  • GitLab CI中存储的密钥变量请勾选Protected和Masked选项,避免密钥泄露
  • 禁止将密钥硬编码到项目代码或配置文件中提交到代码仓库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:27:03