lja*_*der 7 android gradle jenkins android-gradle-plugin
我有一个build.gradle文件在我的Android应用程序中使用此设置:
android {
...
defaultConfig {
applicationId "some.app.id"
versionName '1.2'
versionCode 3
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的AndroidManifest.xml 不包含versionCode,也不包含versionName.
现在我想在Jenkins上构建这个应用程序并将BUILD_NUMBER作为app的versionCode传递,以便每个构建都有更高的版本.
所以在工作中我有一个电话:
./gradlew -PversionCode=$BUILD_NUMBER clean build
Run Code Online (Sandbox Code Playgroud)
当我使用"versionCode"重命名"app-release.apk"时,versionCode的值与从命令行传递的值相同:
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace("app-release.apk", "MyApp_" + "_v" + versionName + "." + versionCode + ".apk"))
}
}
Run Code Online (Sandbox Code Playgroud)
摘要
所以我将默认值"versionCode"设置为3,但是在构建Jenkins时我想从命令行覆盖它.
问题
问题是在AndroidManifest内部构建.apk应用程序将versionCode设置为3而不是BUILD_NUMBER的值.我用"aapt dump badging"检查了它
这个问题
可以通过命令行参数覆盖android defaultConfig中的这个值"versionCode"吗?
我知道,我可以使用如下所述的函数:http: //robertomurray.co.uk/blog/2013/gradle-android-inject-version-code-from-command-line-parameter/ 但我更喜欢清洁方式简单的覆盖,但我不能让它工作.
use*_*491 11
您可以通过在gradle.properties文件中定义属性来使用属性,请参阅gradle文档.但是你必须要非常小心你用于属性的名称:如果你使用versionName,那么属性将在gradle中具有正确的值(你可以println),但它不会在你的AndroidManifest.xml中结束!所以我选择使用'versName'.(我不太了解gradle以了解为什么会这样......)
因此,在您的项目中,gradle.properties您可以定义以下属性:
versCode=3
versName=1.2
然后将build.gradle文件更改为:
android {
...
defaultConfig {
applicationId "some.app.id"
versionName versName
versionCode versCode as Integer
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在您可以在命令行上覆盖它们,如下所示: ./gradlew -PversCode=4 -PversName=2.1.3 clean build
| 归档时间: |
|
| 查看次数: |
4863 次 |
| 最近记录: |