如何在每次生成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
相关产品推荐
相关产品推荐

