如何在apk文件名中自动包含git branch name

时间:2016-09-23 07:00:03

标签: android git gradle

我正在寻找一种方法在构建它时将 git branch name 包含到我的android apk文件名中。

我想在构建它时自动命名我的apk文件“ProjectName- git branchname .apk”。 “

示例:“MyTestProject-master.apk”

我在线搜索并阅读了gradle文档,但找不到如何将分支名称包含在输出文件名中的参考。

一般来说,我知道如何使用gradle构建文件名。我特别询问git分支参考。

2 个答案:

答案 0 :(得分:4)

This stackoverflow post显示了如何从命令行获取git branch name。
撰写它们以获得您需要的东西

共享代码来执行此操作:
Git可执行文件必须在您的系统路径上。

def changeApkName = { variant ->
    variant.outputs.each { output ->
        def apk = output.outputFile;
        def newName = androidApplicationName;
        def branch = getGitRevParseInfo("--abbrev-ref");
        if (variant.buildType.name == "release") {
            newName += "-v" + variant.mergedFlavor.versionName + "-" + branch + "-release.apk";
        } else {
            newName += "-v" + variant.mergedFlavor.versionName + "-" + branch + ".apk";
        }

        if (!output.zipAlign) {
            newName = newName.replace(".apk", "-unaligned.apk");
        }
        output.outputFile = new File(apk.parentFile, newName);

        println 'INFO: Set outputFile to ' + output.outputFile + " for [" + output.name + "]"
    }
}

def getGitRevParseInfo(what) {
    def cmd = "git rev-parse " + what + " HEAD"
    def proc = cmd.execute()
    proc.text.trim()
}

android {
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                changeApkName(variant)
            }
        }
    }
}

答案 1 :(得分:0)

因为您知道如何使用Gradle构建文件名

以下是获取当前git分支名称到Gradle中的任务......

def getBranchName = { ->
    try {
        println "Task Getting Branch Name.."

        def stdout = new ByteArrayOutputStream()
        exec {
            commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD'
            standardOutput = stdout
        }

        println "Git Current Branch = " + stdout.toString()

        return stdout.toString()
    }
    catch (Exception e) {
        println "Exception = " + e.getMessage()
        return null;
    }
}

您可以将其与文件名连接。

希望有所帮助......