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


在 app/build.gradle 文件里添加幾行代碼:

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):

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'
}

 

 

附:

git的 post-commit 類型 hook,post-commit 類型hook創建方法:1、這項目的主目錄里創建一個hooks目錄,在該目錄里放入一個文件 post-commit,改屬性:  chmod a+x post-commit,

然后將 .git/hooks 目錄刪除,將自己創建的hooks鏈接到 .git/ 目錄里,進入 .git 目錄執行:ln  -s  ../.hooks/  hooks,為啥要這么做,因為.git/ 目錄下的所有文件是沒法版本管理的,所以創建到工程目錄以便加入版本管理。以后所有hook都放在該目錄,且該目錄不要忽略(不要放進.gitignore)。

該 post-commit 目錄的內容:

#!/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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM