gpt4 book ai didi

android - 覆盖 android gradle versionCode 表单命令行

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:16 27 4
gpt4 key购买 nike

我的 android 应用程序中有一个 build.gradle 文件,设置如下:

android {
...
defaultConfig {
applicationId "some.app.id"
versionName '1.2'
versionCode 3
...
}
...
}

我的 AndroidManifest.xml 包含 versionCode 并且不包含 versionName。

现在我想在 Jenkins 上构建这个应用程序并将 BUILD_NUMBER 作为应用程序的版本代码传递,以便每个构建都有更高的版本。

所以在工作中我有一个电话:

./gradlew -PversionCode=$BUILD_NUMBER clean build

当我使用“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"))
}
}

总结

所以我将“versionCode”的默认值设置为 3,但是在 Jenkins 上构建时我想从命令行覆盖它。

问题

问题是在构建 .apk 应用程序的 AndroidManifest 中,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/但我更喜欢简单覆盖的更简洁方式,但我无法让它工作。

最佳答案

您可以通过在 gradle.properties 文件中定义它们来使用属性,请参阅 gradle documentation .但是你必须非常小心你为属性使用的名称:如果你使用 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
...
}
...
}

现在您可以像这样在命令行上覆盖它们:./gradlew -PversCode=4 -PversName=2.1.3 clean build

关于android - 覆盖 android gradle versionCode 表单命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com