簡評:優(yōu)雅的設(shè)置 Android 應(yīng)用的 versionCode & Name。
Android 開發(fā)者一定對下面的這兩個(gè)屬性很熟悉吧:
defaultConfig {
...
versionCode 1
versionName "1.0.0"
}
但直接這樣設(shè)置有兩個(gè)不好的地方:
- 不知道這個(gè) version 對應(yīng)的是哪一個(gè) commit弦疮。
- 每次修改 versionCode 和 versionName帚桩,都要更新 build.gradle 文件。
如果你使用 git 作為你的版本控制工具,這篇文章就可以幫助你快捷設(shè)置 versionName & versionCode。
Version Name
對于 versionName 我們可以用 git describe 命令。
a. git describe 會(huì)從當(dāng)前 commit 找到最近的一個(gè) tag秘症。
b. 如果這個(gè) tag 就指向當(dāng)前 commit,那就直接輸出 tag式矫。
c. 否則輸出之前的 tag + 中間間隔的 commit 數(shù) + 當(dāng)前的 commit ID乡摹。比如:1.0-2-gdc226a
Version Code
versionCode 是一個(gè)數(shù)字,通常每一個(gè) git tag 對應(yīng)一個(gè) version采转。
當(dāng)然聪廉,對于開發(fā)中的內(nèi)部版本是沒有必要每個(gè)都打 tag 的瞬痘,這時(shí)我們可以用時(shí)間戳來作為 versionCode。
因此板熊,可以創(chuàng)建一個(gè) 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
這樣來設(shè)置 versionCode 和 versionName 就可以很方便的分辨出每個(gè)版本對應(yīng)的 commit框全,也不用每次都手動(dòng)去改 build.gradle 文件了。
原文:Configuring Android Project?—?Version Name & Code
歡迎關(guān)注知乎專欄「極光日報(bào)」干签,每天為 Makers 導(dǎo)讀三篇優(yōu)質(zhì)英文文章津辩。
日報(bào)延伸閱讀:
-改進(jìn) Android 項(xiàng)目的資源目錄
-正確配置你的 Android 項(xiàng)目