Version Name & Version Code
開發(fā)者們經(jīng)常使用硬編碼來設(shè)置版本名 跟 版本號.
舉個栗子
defaultConfig {
...
versionCode 1
versionName "1.0.0"
}
這樣做的話有幾個問題:
你永遠(yuǎn)不知道哪一次提交代表著哪個版本
-
無論何時你增加版本號或者或者修改版本名稱你都得修改項目的build.gradle 文件
如果你正在使用git作為你的代碼管理系統(tǒng)轩猩,它同時也能幫助你生成Android 項目的版本名跟版本名跟版本號. 這是一種慣例——用git tag 來標(biāo)記新版本的發(fā)布。
版本名
對于版本名我們可以直接使用git describe命令
a. 這個命令從可獲得的一個提交里面找到最新的tag
b. 如果這個tag指向這個提交,就顯示這個唯一的tag
c. 否則它后的綴標(biāo)簽名將會是在標(biāo)記對象頂部的附加提交數(shù)加上最近提交的縮寫對象名稱
例(a-b):
- 用tag 1.0標(biāo)記一次特定的提交
- 檢查這次提交
- 執(zhí)行git describe -tags
- 輸出:1.0
如你所見,如果你在最近這個帶有tag的這個提交上執(zhí)行git describe,它就是輸出這個tag
例(a-c)
- 用tag1.0標(biāo)記一次提交
- 在添加兩個提交
- 執(zhí)行git describe -tags
- 輸出:1.0-2-gdca226a
利用 git 提交的拼接 "1.0-2-gdca226a" 我們輕易就能知道做了哪次特定的提交
版本號
我們可以使用標(biāo)記的總數(shù)來標(biāo)記版本號失仁。因為每一個git tag標(biāo)記了一個版本,所以下一個版本的版本號總會比之前的大。
在上面的這個例子里面我們有3個標(biāo)記舶担。這個值將會用于我們的版本號。
然而我們不會為每一個中間版本設(shè)置一個標(biāo)記彬呻,因此我們可以使用最近提交的時間戳作為開發(fā)構(gòu)建的版本號
在上圖的例子中衣陶,最近版本提交的時間戳為1484407970 柄瑰。這個值就是我們的版本號。
Groovy使用git的方法
我推薦使用一個庫grgit來使用git剪况。使用以下代碼創(chuàng)建一個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"
運行g(shù)radle命令 ./gradlew pritVersion 來檢查是否正確生成了版本名字跟版本號教沾,輸出:
Version Name: 1.0-2-gdca226a
Version Code: 2
Version Code Time: 1484407970
最終我們就能在 build.gradle 文件中使用gtiVersionName, gitVersionCode 跟gitVersionCodeTime 變量了。
productFlavors {
dev {
versionCode gitVersionCodeTime
versionName gitVersionName
}
prod {
versionCode gitVersionCode
versionName gitVersionName
}
}
運行項目译断,檢查 app 版本號
這種方法的好處是:
- 不用再去修改 build.gradle 文件了 —— 因為版本號跟版本名都是自動生成的
- 你可以輕易找出是哪個提交生成
Note: 你可以嘗試更多的版本名:包括分支名授翻,時間戳等
原文鏈接 :https://hackernoon.com/configuring-android-project-version-name-code-b168952f3323#.m6t1xca9l