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

编译时在Android应用中存储Git Hash的Gradle适配问题

解决Gradle 8.2+配置阶段执行Git命令报错的问题

这不是升级操作的问题,是Gradle 8.2版本开始严格限制了配置阶段的外部进程调用——之前在配置阶段通过exec执行git rev-parse --short HEAD的方式不再被允许,必须调整为在执行阶段获取Git哈希。

具体调整方案

方案一:直接在BuildConfig生成任务的执行阶段获取哈希

不需要额外任务,直接将Git命令移到BuildConfig生成任务的doFirst块中(doFirst属于执行阶段逻辑):

android {
    // 保留原有其他配置
    applicationVariants.all { variant ->
        variant.generateBuildConfigProvider.configure { provider ->
            provider.doFirst {
                // 执行Git命令获取短哈希
                def gitHash = "git rev-parse --short HEAD".execute().text.trim()
                // 将哈希写入BuildConfig
                buildConfigField("String", "GIT_HASH", "\"${gitHash}\"")
            }
        }
    }
}

方案二:独立任务+依赖关联(适合复杂场景)

如果需要在多个地方复用Git哈希,可以单独定义任务,再让BuildConfig生成任务依赖它:

  1. 定义获取Git哈希的任务
tasks.register("fetchGitHash") {
    outputs.upToDateWhen { false } // 确保每次构建都重新获取最新哈希
    doLast {
        def gitHash = "git rev-parse --short HEAD".execute().text.trim()
        // 将哈希写入临时文件
        file("$buildDir/intermediates/git-hash.txt").text = gitHash
    }
}
  1. 让BuildConfig生成任务依赖该任务并读取哈希
android {
    // 保留原有其他配置
    applicationVariants.all { variant ->
        variant.generateBuildConfigProvider.configure { provider ->
            provider.dependsOn(tasks.fetchGitHash)
            provider.doFirst {
                def gitHash = file("$buildDir/intermediates/git-hash.txt").text.trim()
                buildConfigField("String", "GIT_HASH", "\"${gitHash}\"")
            }
        }
    }
}

验证

同步Gradle后重新构建项目,Java代码中即可正常通过BuildConfig.GIT_HASH获取Git短哈希,同时不会再出现配置阶段执行外部进程的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:08:12