Seb*_*ano 5 android gradle android-manifest
我正在尝试配置应用程序的构建变体,作为从Ant迁移到Gradle的一部分.我想出的结构如下:
main
|-> monkey
Run Code Online (Sandbox Code Playgroud)
我想要一种自动递增 "猴子"味道的版本代码的方法.我复制了AndroidManifest,因此它类似于下面的结构.我添加了两个版本代码和两个版本名称,我将用它来解释我面临的问题.
main
|-> AndroidManifest.xml
| -> versionName="mainFlavour"
| -> versionCode=12
monkey
|-> AndroidManifest.xml
| -> versionName="monkeyFlavour"
| -> versionCode=13
Run Code Online (Sandbox Code Playgroud)
第一种方法
我的第一次尝试是基于这个答案,包括定义一个解析AndroidManifest文件并增加版本代码的任务.该任务将是该任务的依赖generateBuildConfig项.
结果是每当我使用'monkey'风格构建时,读取版本代码和版本名称属性会导致此输出:
versionName "monkeyFlavour"
versionCode 12
Run Code Online (Sandbox Code Playgroud)
也就是说,构建版本具有'monkey'风格的版本名称,但是'main'风格的版本代码.使用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'
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方法
然后我尝试了另一种方法,这里描述的方法是定义一个函数,该函数增加AndroidManifest文件的版本代码并返回递增的值.然后通过versionCode'monkey'风格的属性分配该值.
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
}
Run Code Online (Sandbox Code Playgroud)
这种方法证明了我实现了我想要的目标.但我想了解第一种方法有什么问题.我希望有人能开导我.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |