使用Gradle自动递增versionCode时出现问题

时间:2014-09-03 10:23:26

标签: android gradle android-manifest

我尝试配置应用程序的构建变体,作为从Ant迁移到Gradle的一部分。我想出的结构如下:

main
  |-> monkey

我想要一种自动递增 <猴子&#39;的版本代码的方法。味道,等等。我复制了AndroidManifest,因此它类似于下面的结构。我已经添加了两个版本代码和两个版本名称,我将用它来解释我面临的问题。

main
  |-> AndroidManifest.xml
        | -> versionName="mainFlavour"
        | -> versionCode=12
monkey
  |-> AndroidManifest.xml
        | -> versionName="monkeyFlavour"
        | -> versionCode=13

第一种方法

我的第一次尝试基于this answer,包括定义一个解析AndroidManifest文件并增加版本代码的任务。该任务将是generateBuildConfig任务的依赖项。

结果是每当我用“猴子”建造时,味道,读取版本代码和版本名称属性导致此输出:

 versionName "monkeyFlavour"
 versionCode 12

也就是说,构建版本具有“猴子”的版本名称。味道,但主要的版本代码&#39;味道。使用PackageManagerBuildConfig来读取这些值没有区别。这是我使用的代码:

// Increment version code for 'monkey' builds
task('increaseVersionCode') << {
    def manifestFile = file("src/monkey/AndroidManifest.xml")
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def manifestText = manifestFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = Integer.parseInt(matcher.group(1))
    def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
    manifestFile.write(manifestContent)
}

tasks.whenTaskAdded { task ->
    if (task.name == 'generateMonkeyReleaseBuildConfig') {
        task.dependsOn 'increaseVersionCode'
    }
}

第二种方法

然后我尝试了另一种方法described here,其中包括定义一个函数,该函数递增AndroidManifest文件的版本代码并返回递增的值。然后通过“猴子”的versionCode属性分配此值。风味。

apply plugin: 'android'

android {

    ...

    productFlavors {
        monkey {
            versionCode incrementVersionCode()
        }
    }

    ...

}

def incrementVersionCode() {
    def manifestFile = file("src/monkey/AndroidManifest.xml")
    def pattern = Pattern.compile("versionCode=\"(\\d+)\"")
    def manifestText = manifestFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = Integer.parseInt(matcher.group(1))
    def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"")
    manifestFile.write(manifestContent)
    return versionCode
}

这种方法证明了我能实现我想要的目标。但我希望了解第一种方法中的错误。我希望有人能够启发我。

0 个答案:

没有答案