在 app/build.gradle 文件裏添加幾行代碼:android
def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project.rootDir).text.trim() def gitCommitDate = 'git log -1 --pretty=%ci'.execute([], project.rootDir).text.trim().split()[0] def gitShortShaDate = gitCommitShortHash + "_" + gitCommitDate // Auto-incrementing commit count based on counting commits to HEAD (Build #543) def gitCommitCount = Integer.parseInt('git rev-list HEAD --count'.execute([], project.rootDir).text.trim()) // I want to use git tags as my version names (1.2.2) def gitCurrentTag = 'git describe --tags --abbrev=0'.execute([], project.rootDir).text.trim()
加完以後整個build.gradle文件像這個樣子(注意其中的 versionCode gitCommitCount 和 versionName gitShortShaDate):git
apply plugin: 'com.android.application' def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project.rootDir).text.trim() def gitCommitDate = 'git log -1 --pretty=%ci'.execute([], project.rootDir).text.trim().split()[0] def gitShortShaDate = gitCommitShortHash + "_" + gitCommitDate // Auto-incrementing commit count based on counting commits to HEAD (Build #543) def gitCommitCount = Integer.parseInt('git rev-list HEAD --count'.execute([], project.rootDir).text.trim()) // I want to use git tags as my version names (1.2.2) def gitCurrentTag = 'git describe --tags --abbrev=0'.execute([], project.rootDir).text.trim() android { compileSdkVersion 24 buildToolsVersion "24.0.3" defaultConfig { applicationId "com.welhzh.android.myapplication" minSdkVersion 11 targetSdkVersion 24 versionCode gitCommitCount versionName gitShortShaDate testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' }
附:bash
git的 post-commit 類型 hook,post-commit 類型hook建立方法:一、這項目的主目錄裏建立一個hooks目錄,在該目錄裏放入一個文件 post-commit,改屬性: chmod a+x post-commit,app
而後將 .git/hooks 目錄刪除,將本身建立的hooks連接到 .git/ 目錄裏,進入 .git 目錄執行:ln -s ../.hooks/ hooks,爲啥要這麼作,由於.git/ 目錄下的全部文件是無法版本管理的,因此建立到工程目錄以便加入版本管理。之後全部hook都放在該目錄,且該目錄不要忽略(不要放進.gitignore)。post
該 post-commit 目錄的內容:gradle
#!/bin/bash commit=$(git log -1 --pretty=%H%n%ci) commit_full_hash=$(echo "$commit" | head -1) # c7618bf23a71637c54b5e51c37cbace3f6ff4899 # commit_full_hash=$(git log -1 --pretty=%H) # same as above # commit_full_date=$(echo "$commit" | head -2 | tail -1) # 2010-12-28 05:16:23 +0300 commit_short_hash=$(git log -1 --pretty=%h) # c7618bf commit_date=$(git log -1 --pretty=%ci 2>/dev/null | cut -d" " -f 1) # 2016-09-12 commit_time=$(git log -1 --pretty="%ci" 2>/dev/null | cut -d" " -f 2) # 15:12:21 branch_full=$(git symbolic-ref HEAD 2>/dev/null) # refs/heads/master branch_simple=$(git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3) # master # branch_simple=$(git symbolic-ref --short -q HEAD) # branch_simple=$(git name-rev --name-only HEAD) # branch_simple=$(git symbolic-ref --short -q HEAD) echo "print by hzh --------" echo "$commit_full_hash" echo "$commit_short_hash" echo "$commit_date" echo "$branch_full" echo "$branch_simple" echo "print by hzh end --------\n" # 固然,你能夠將這些東西寫到version文件裏,而後編譯的時候讀取它,如下只是示例 versionfilename=$(git config hooks.versionfilename) if [[ -z $versionfilename ]] then versionfilename="version" fi # Version number #echo \# Generated using git post-commit hook > $versionfilename echo -n "$commit_time" > $versionfilename echo -n " " >> $versionfilename echo -n "$commit_date" >> $versionfilename echo -n " " >> $versionfilename echo -n "$commit_short_hash" >> $versionfilename echo -n " " >> $versionfilename echo -n "$branch_simple" >> $versionfilename