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

如何在每次生成Release包时自动递增Android Build Gradle中的版本号

实现Android Release包自动递增版本号的几种方案

方案一:基于本地配置文件的Gradle脚本自动递增

这种方法通过单独的版本存储文件管理versionCode和versionName,在Release构建前自动更新并写入文件。

步骤1:创建版本存储文件

在模块(通常是app)根目录下新建version.properties文件,初始内容如下:

versionCode=1
versionName=1.0.0

步骤2:在Module级build.gradle中配置逻辑

修改build.gradle(:app),添加读取版本文件、递增版本号并关联到Release构建的逻辑:

// 读取版本配置文件
def versionPropsFile = file('version.properties')
def versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))

// 解析当前版本信息
def currentVersionCode = versionProps['versionCode'].toInteger()
def currentVersionName = versionProps['versionName']

android {
    defaultConfig {
        versionCode currentVersionCode
        versionName currentVersionName
        // 其他默认配置...
    }

    // 遍历所有构建变体,针对Release版本处理版本递增
    applicationVariants.all { variant ->
        if (variant.buildType.name == 'release') {
            // 创建递增版本号的任务
            def incrementVersionTask = tasks.create("incrementVersionFor${variant.name.capitalize()}") {
                doLast {
                    // 递增versionCode
                    def newVersionCode = currentVersionCode + 1
                    versionProps['versionCode'] = newVersionCode.toString()

                    // 可选:自动递增versionName的补丁号(如1.0.0 → 1.0.1)
                    def versionSegments = currentVersionName.split('\\.')
                    def newPatch = versionSegments[2].toInteger() + 1
                    def newVersionName = "${versionSegments[0]}.${versionSegments[1]}.${newPatch}"
                    versionProps['versionName'] = newVersionName

                    // 将更新后的版本信息写入文件
                    versionProps.store(new FileOutputStream(versionPropsFile), null)
                }
            }
            // 让Release构建的预构建任务依赖版本递增任务
            variant.preBuild.dependsOn(incrementVersionTask)
        }
    }
}

方案二:基于Git标签的版本号管理

如果项目使用Git,可以利用标签追踪版本,每次Release构建时自动从最新标签递增版本并创建新标签。

在Module级build.gradle中配置逻辑

android {
    defaultConfig {
        // 获取Git最新的版本标签(需遵循vX.X.X的命名规范)
        def latestTag = 'git describe --abbrev=0 --tags'.execute().text.trim()
        if (latestTag.empty) {
            // 无标签时的初始版本
            versionCode 1
            versionName "1.0.0"
        } else {
            // 拆分标签版本号,递增补丁号
            def versionParts = latestTag.replace('v', '').split('\\.')
            def newPatch = versionParts[2].toInteger() + 1
            def newVersionName = "${versionParts[0]}.${versionParts[1]}.${newPatch}"
            // 将版本号转为纯数字作为versionCode(如v1.0.0 → 100)
            def newVersionCode = latestTag.replaceAll('[^0-9]', '').toInteger() + 1

            versionCode newVersionCode
            versionName newVersionName
        }
    }

    // Release构建完成后自动创建并推送新Git标签
    applicationVariants.all { variant ->
        if (variant.buildType.name == 'release') {
            variant.finalizedBy tasks.create("createReleaseTag${variant.name.capitalize()}") {
                doLast {
                    def tagName = "v${variant.versionName}"
                    "git tag -a ${tagName} -m 'Release ${tagName}'".execute()
                    "git push origin ${tagName}".execute()
                }
            }
        }
    }
}

注意事项

  • 方案一中的version.properties需要纳入Git版本控制,避免团队协作时版本号不一致。
  • 方案二依赖Git标签规范,团队成员需统一使用vX.X.X格式的标签命名。
  • 如果使用CI/CD流程,可以将版本递增逻辑放到CI脚本中(如GitHub Actions的shell脚本),完成后提交版本文件或标签到仓库,确保本地与远程版本同步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:10:16