简评:优雅的设置 Android 应用的 versionCode & Name。
Android 开发者一定对下面的这两个属性很熟悉吧:
defaultConfig {
...
versionCode 1
versionName "1.0.0"
}
但直接这样设置有两个不好的地方:
- 不知道这个 version 对应的是哪一个 commit。
- 每次修改 versionCode 和 versionName,都要更新 build.gradle 文件。
如果你使用 git 作为你的版本控制工具,这篇文章就可以帮助你快捷设置 versionName & versionCode。
Version Name
对于 versionName 我们可以用 git describe 命令。
a. git describe 会从当前 commit 找到最近的一个 tag。
b. 如果这个 tag 就指向当前 commit,那就直接输出 tag。
c. 否则输出之前的 tag + 中间间隔的 commit 数 + 当前的 commit ID。比如:1.0-2-gdc226a
Version Code
versionCode 是一个数字,通常每一个 git tag 对应一个 version。
当然,对于开发中的内部版本是没有必要每个都打 tag 的,这时我们可以用时间戳来作为 versionCode。
因此,可以创建一个 script-git-version.gradle 文件:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.ajoberstar:grgit:1.5.0'
}
}
import org.ajoberstar.grgit.Grgit
ext {
git = Grgit.open(currentDir: projectDir)
gitVersionName = git.describe()
gitVersionCode = git.tag.list().size()
gitVersionCodeTime = git.head().time
}
task printVersion() {
println("Version Name: $gitVersionName")
println("Version Code: $gitVersionCode")
println("Version Code Time: $gitVersionCodeTime")
}
之后在 build.gradle 中这样用:
apply plugin: 'com.android.application'
apply from: "$project.rootDir/tools/script-git-version.gradle"
productFlavors {
dev {
versionCode gitVersionCodeTime
versionName gitVersionName
}
prod {
versionCode gitVersionCode
versionName gitVersionName
}
}
Version Name: 1.0-2-gdca226a
Version Code: 2
Version Code Time: 1484407970
这样来设置 versionCode 和 versionName 就可以很方便的分辨出每个版本对应的 commit,也不用每次都手动去改 build.gradle 文件了。
原文:Configuring Android Project — Version Name & Code
欢迎关注知乎专栏「极光日报」,每天为 Makers 导读三篇优质英文文章。
日报延伸阅读:
-改进 Android 项目的资源目录
-正确配置你的 Android 项目