[英]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.