簡體   English   中英

帶有Gradle Release插件的Android構建

[英]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執行

  1. 將更改gradle.properties中的版本
  2. 將執行構建過程,但這是不好的解決方法,尤其是對於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'
    }
}

免責聲明:我已經創建了要點。

完整的要旨。 https://gist.github.com/ascariandrea/9991499

這是我使用的一種變通方法,它將任務的執行分為多個gradle執行。 它適用於svn,但可以進行調整:

https://stackoverflow.com/a/26659974/256770

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM