gradle 及 git 環境下利用hook及gradle腳本自動添加versioncode和versionname的方法

在 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
相關文章
相關標籤/搜索