带有gradle插件3的文件的版本名称和代码

时间:2017-11-29 12:38:01

标签: android gradle android-gradle gradle-plugin

我的android版本设置为在发布模式下使用文件中的versionNameversionCode。在不创建发布版本以保持增量构建工作时,它们将设置为静态值。

gradle文件的相关部分是:

android {
    defaultConfig {
        versionCode 1
        versionName "1.0"
        // SNIP...
    }

    applicationVariants.all { variant ->
        if (variant.buildType.name == "release") {
            variant.versionCode = file('version-code.txt').text as int
            variant.versionName = file('version.txt').text
        }
    }

    // SNIP ...
}

版本文件的示例内容可以是:

  • version.txt 0.7
  • version-code.txt 7

这是通过遵循建议的指南中的Use static build config values with your debug build部分来完成的,以保持增量版本的正常运行。

  

例如,使用动态版本代码,版本名称,资源或任何其他更改清单文件的构建逻辑,每次要运行更改时都需要完整的APK构建 - 即使实际更改可能只需要热插拔。 如果您的构建配置需要这样的动态属性,那么将它们隔离到您的发布版本变体并保持调试版本的静态值,如下面的build.gradle文件所示。

但是,我们发现自从升级到gradle插件的第3版后这种情况已经破裂,这已经不再适用了。 gradle插件3.0.0迁移指南的Modifying variant outputs at build time may not work部分说:

  

使用Variant API来操纵变体输出会被新插件破坏。它仍适用于简单的任务,例如在构建时更改APK名称,如下所示:

     

但是,涉及访问outputFile对象的更复杂的任务不再有效。这是因为在配置阶段不再创建特定于变体的任务。这导致插件不能预先知道所有输出,但也意味着更快的配置时间。

迁移指南中似乎没有任何其他选择。还有另一种方法可以实现吗?

更新

感谢@nhoxbypass的回答,更改我的gradle文件以包含以下内容:

applicationVariants.all { variant ->
    if (variant.buildType.name == "release") {
        variant.outputs.all { output ->
            output.setVersionNameOverride(file('version.txt').text)
            output.setVersionCodeOverride(file('version-code.txt').text as int)
        }
    }
}

1 个答案:

答案 0 :(得分:4)

migration guide 仍可用于简单任务,例如在构建期间更改APK名称(至少适用于我的项目)。但是,涉及访问outputFile对象的更复杂的任务不再有效。

但是如果您需要尝试一种解决方法,那么在3.0版本之前就有一个存在,如果有人在寻找解决方案,您可以使用:

output.setVersionCodeOverride(Integer.parseInt(buildTimeSmall()))

请参阅:Unable to change project versionCode for different build types