Android git打包

用了git打包方法,總感覺比原來複雜的多,而且容易出錯。先說說怎麼打包吧!

先看看命令符這個是複製別人的:

apply ...

//其實下面的幾個腳本語言都是用來執行git命令的

//第一個命令是獲取commit提交次數,用來更新 versionCode
def cmd = 'git rev-list HEAD --first-parent --count'
def gitVersion = cmd.execute().text.trim().toInteger()

//第二個命令是獲取git版本信息(自定義的標籤,也就是你在git上發行的版本tag)
//第三個命令是獲取git的 commit id ,之後截圖會展示(commit id是一個哈希值 ,很長所以 short 是爲了獲取它的短名)
def cmd2 = 'git describe --tags'
def cmd3 = 'git rev-parse --short HEAD'

//整合以上命令獲取的值 拼接成 apk 的文件名
def version = cmd2.execute().text.trim() + "_" + cmd3.execute().text.trim()

//定義時間 如果你想在版本號中添加時間信息可以使用一下方法
def releaseTime() {
    return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}

這個是再Android下的gradle文件裏面。

而再這裏是新建的gradle文件:

//獲取指定文件路徑下的文件,在當前分支上的提交總次數
/**
 * 獲取指定文件路徑下的文件,在當前分支上的提交總次數
 * */
def getVersionCode(String path) {
    def cmd = "git rev-list --all --count HEAD"

    try {
        def ver = cmd.execute().text.trim().toInteger()

        if (ver <= 0)//versionCode必須是正整數
            return 1

        return (ver + 40)
    } catch (Exception ex) {
        println(ex.getStackTrace())
        return 1
    }
}

//獲取版本描述信息
def getVersionName(String path) {
    def version = [path, '0.0.1', '1', ''] as String[]

    try {
        def cmd = "git describe --tags --match ${path}*"
        def res = cmd.execute().text.replace(path, '').trim().split('-')

        for (int i = 0; i < res.length; i++)
            if (res[i] != "")
                version[i] = res[i]

        if (version[3].length() > 1)
            version[3] = '-' + version[3].substring(1)
    } catch (Exception ex) {
        println(ex.getStackTrace())
    }

    return version
}

def getCurDate(String format, String timeZone) {
    try {
        return new Date().format(format, TimeZone.getTimeZone(timeZone))
    } catch (Exception ex) {
        println(ex.getStackTrace())
        return 'null'
    }
}

ext {
    getVersionCode = this.&getVersionCode

    getVersionName = this.&getVersionName

    getCurDater = this.&getCurDate
}

兩個差不多的

這個自定義的gradle文件需要apply 再project.gradle文件中

apply from: '自定義文件名字.gradle'
defaultConfig {
        applicationId "****"
        minSdkVersion rootProject.ext.androidMinSdkVersion
        targetSdkVersion rootProject.ext.androidTargetSdkVersion
        versionCode rootProject.ext.getVersionCode('')
        versionName rootProject.ext.getVersionName('自定義name')
        multiDexEnabled true

        ndk { // 兼容64位手機
            abiFilters 'armeabi', 'x86', "armeabi-v7a", "mips"
        }
    }

這裏要特別注意,每次提交都是增加tag 數+1,但版本號不會增加。

這裏修改版本名字!,這裏不建議經常new tag 版本都是新增了的!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章