Apk版本名称 - 詹金斯

时间:2017-06-22 09:43:13

标签: android jenkins gradle gradlew

的build.gradle

compileSdkVersion 23
buildToolsVersion "25.0.2"
applicationVariants.all { variant ->
    def flavor = variant.mergedFlavor
    if (variant.buildType.isDebuggable()) {
        flavor.versionName = "Beta Revision:  ${svnRevisionDebug()}";
        flavor.versionCode = 1;
    } else {
        if (project.hasProperty('projVersion')) {
            println "Assemble release with parameter " + project.projVersion;
                    flavor.versionName = ""+  project.projVersion;
        } else {
            flavor.versionName = '10.0.0'
        }
        flavor.versionCode = 1;
    }
}

在Jenkins上执行shell

./gradlew assembleRelease -PprojVersion=123

Jenkins输出控制台

+ ./gradlew assembleRelease -PprojVersion=123
Incremental java compilation is an incubating feature.
Unix runtime
Assemble release with parameter 123

输出

Unix runtime

来自svnRevisionDebug()

 def svnRevisionDebug() {
    if (System.properties['os.name'].toLowerCase().contains('windows')) {
        println "Windows runtime"
        new ByteArrayOutputStream().withStream { os ->
            def result = exec {
                executable = 'svn'
                args = ['info', '-r', 'HEAD']
                standardOutput = os
            }
            def outputAsString = os.toString()
            def matchLastChangedRev = outputAsString =~ /Last Changed Rev:(\d+)/
            ext.svnRev = "${matchLastChangedRev[0][1]}".toInteger()
        }
        return svnRev
    } else {
        println "Unix runtime"
        def p = ['/bin/bash', '-c', /svn info -r HEAD | grep '^Revision:' | sed -e 's\/^Revision: \/\/'/].execute()
        p.waitFor()
        return p.text.trim()
    }

}

但是当我从清单中反编译apk时,我看到了

 android:versionName="1.0"

跆拳道? 可能是applicationVariants.all使用的方法,在创建apk时多次调用(你看到jenkins log" Unix运行时"和#34;使用参数&#34组装发布;

在versionName中注入参数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

当传递属性作为参数时,您应该能够使用变量名称本身访问该值。

尝试将您的gradle文件中的project.projVersion更改为projVersion,这应该有效。

意味着生成的行将是

println "Assemble release with parameter " + projVersion;
flavor.versionName = "" + projVersion; 

或者你可以尝试

flavor.versionName = projVersion.toString()