的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中注入参数的正确方法是什么?
答案 0 :(得分:0)
当传递属性作为参数时,您应该能够使用变量名称本身访问该值。
尝试将您的gradle文件中的project.projVersion
更改为projVersion
,这应该有效。
意味着生成的行将是
println "Assemble release with parameter " + projVersion;
flavor.versionName = "" + projVersion;
或者你可以尝试
flavor.versionName = projVersion.toString()