我尝试配置应用程序的构建变体,作为从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;味道。使用PackageManager
或BuildConfig
来读取这些值没有区别。这是我使用的代码:
// 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
}
这种方法证明了我能实现我想要的目标。但我希望了解第一种方法中的错误。我希望有人能够启发我。