[英]Android build with Gradle Release plugin
我想在Android Project
使用Gradle Release Plugin 。
我配置了它,一切正常,除了一件事:
Gradle Release Plugin
在其任务之一中更改了gradle.properties
文件中的项目版本,但是此更改不会影响Android Project's
versionName
,因为正如我在运行任何任务之前使用println()
gradle对其进行初始化所发现的那样。
初始化后,是否可以在某些gradle任务中更改Android Project
versionName
?
这是我的build.gradle
一部分
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
minSdkVersion 14
targetSdkVersion 19
versionCode 213
versionName version // to change it, please visit gradle.properties file
println('Project version: ' + version) // this line executed BEFORE any gradle task :(
}
...
}
我只能看到一个解决方案:不同的Gradle执行
Gradle Release Plugin
从版本2.1.0开始, gradle-release插件将在单独的过程中执行构建。 这样可以确保版本在整个构建过程中以及对于所有其他从一开始就依赖版本设置的插件都是正确的。
2.1.0
...
常见:在发布期间重构了构建过程以在单独的过程中运行。 这有望解决某些其他插件(如新的maven-publish或bintray插件)中的所有问题。
常见:添加了beforeReleaseBuild和afterReleaseBuild挂钩,它们都与构建本身在同一进程中运行。
...
将此函数插入build.gradle
task('increaseVersionCode') << {
def manifestFile = file("src/main/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)
}
task('incrementVersionName') << {
def manifestFile = file("src/main/AndroidManifest.xml")
def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\"")
def manifestText = manifestFile.getText()
def matcherVersionNumber = patternVersionNumber.matcher(manifestText)
matcherVersionNumber.find()
def majorVersion = Integer.parseInt(matcherVersionNumber.group(1))
def minorVersion = Integer.parseInt(matcherVersionNumber.group(2))
def pointVersion = Integer.parseInt(matcherVersionNumber.group(3))
def buildVersion = Integer.parseInt(matcherVersionNumber.group(4))
def mNextVersionName = majorVersion + "." + minorVersion + "." + pointVersion + "." + (buildVersion + 1)
def manifestContent = matcherVersionNumber.replaceAll("versionName=\"" + mNextVersionName + "\"")
manifestFile.write(manifestContent)
}
tasks.whenTaskAdded { task ->
if (task.name == 'generateReleaseBuildConfig') {
task.dependsOn 'increaseVersionCode'
task.dependsOn 'incrementVersionName'
}
}
免责声明:我已经创建了要点。
这是我使用的一种变通方法,它将任务的执行分为多个gradle执行。 它适用于svn,但可以进行调整:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.