Hello.
I have implemented autoincrement app version feature in my root build.gradle

I have 3 release tasks (suppose the base version is 1.0.3):
release - update version to 2.0.0 and create release apk
releaseBeta - update version to 1.1.0 and create release apk
releaseNightly - update version to 1.0.4 and create release apk

Everything worked fine with gradle 1.12 and 0.12.+ plugin.
After switching to new gradle 2.2.1 and 1.0.0 plugin the problem occurred:
new apks have old version

Please help me to understand what's wrong with it.

Here is my code:
- VersionUtils is just helper class to operate with version strings

import java.util.regex.Matcher
import java.util.regex.Pattern

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:1.0.0"
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}

ext {
    deliveryDir = 'delivery'
    appVersion = new Version(project: this, subprojects: subprojects, 
versionName: versionName)
}

subprojects {
    repositories {
        jcenter()
    }
}

subprojects.each { subproject ->
    subproject.configurations.all {
        resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
        resolutionStrategy.cacheDynamicVersionsFor 0, 'seconds'
    }
    evaluationDependsOn(subproject.path)
}

subprojects.findAll { project -> project.hasProperty('android') && project.
android.hasProperty('applicationVariants') }.each { project ->
    def deliverToLocal = task("deliverToLocal_${project.name}") {
        ext.outputDir = "${deliveryDir}/${project.name}"
        description = "Deliver ${project.name} binaries to ${outputDir} 
folder"

        dependsOn project.assembleRelease
        doLast {
            deliverBinariesFor project, outputDir
        }
    }

    task("release_${project.name}", dependsOn: deliverToLocal) << {
        description = "Release ${project.name} application"
    }
}

task clearDeliveryDir << {
    delete deliveryDir
    delete 'build'
}

def deliverBinariesFor(def project, def outputDir) {
    project.android.applicationVariants.all { variant ->
        copy {
            variant.outputs.each { output ->
                from output.outputFile
            }
            from "${project.buildDir}/outputs/proguard/release/mapping.txt"
            from 
"${project.buildDir}/outputs/lint-results-release-fatal.html"
            into outputDir
        }
        copy {
            from("${project.buildDir}/outputs") {
                include 'lint-results*_files/*.css'
                include 'lint-results*_files/*.png'
            }
            into "${outputDir}/lint-result-release-fatal"
        }
    }
}

task deliverToExternal(dependsOn: [tasks.findAll { task -> task.name.
startsWith('release_') }]) << {}

//---------------release app---------------------------

task increaseMajorVersion << {
    appVersion.increaseMajor()
}

task increaseBetaVersion << {
    appVersion.increaseBeta()
}

task increaseNightlyVersion << {
    appVersion.increaseNightly()
}

task saveVersion << {
    appVersion.save()
}

clearDeliveryDir.mustRunAfter increaseMajorVersion
clearDeliveryDir.mustRunAfter increaseBetaVersion
clearDeliveryDir.mustRunAfter increaseNightlyVersion
deliverToExternal.mustRunAfter clearDeliveryDir
saveVersion.mustRunAfter deliverToExternal

task releaseMajor(dependsOn: [increaseMajorVersion, clearDeliveryDir, 
deliverToExternal, saveVersion]) {
    description 'Release a new version of application, create tag and 
increase version'

    doLast {
        println "${appVersion} released"
    }
}

task releaseBeta(dependsOn: [increaseBetaVersion, clearDeliveryDir, 
deliverToExternal, saveVersion]) {
    description 'Release a new version of application, create tag and 
increase version'

    doLast {
        println "${appVersion} released"
    }
}

task releaseNightly(dependsOn: [increaseNightlyVersion, clearDeliveryDir, 
deliverToExternal, saveVersion]) {
    description 'Release a new version of application, create tag and 
increase version'

    doLast {
        println "${appVersion} released"
    }
}

//-------------------Utils----------------

class Version {
    def project
    def subprojects
    String versionName
    boolean release

    String toString() { return VersionUtils.toString(versionName) }

    Version increaseMajor() { versionName = VersionUtils.increaseMajor(
versionName); apply(); this }

    Version increaseBeta() { versionName = VersionUtils.increaseBeta(
versionName); apply(); this }

    Version increaseNightly() { versionName = VersionUtils.increaseNightly(
versionName); apply(); this }

    void apply() {
        subprojects.findAll { project -> project.hasProperty('android') && 
project.android.hasProperty('applicationVariants') }.each { project ->
            project.android.defaultConfig.versionName = this.toString()
            project.android.defaultConfig.versionCode = VersionUtils.
makeVersionCode(this.toString(), project.android.defaultConfig.minSdkVersion
.mApiLevel as int)
            
            println "${product.name} versionName = 
${project.android.defaultConfig.versionName}, versionCode = 
${project.android.defaultConfig.versionCode}"
            
        }
    }

    void save() {
        project.ant.propertyfile(file: 'gradle.properties') {
            entry(key: "versionName", value: versionName)
        }
        project.ant.replaceregexp(file: 'gradle.properties', match: /^#[^ 
].*\s*/, replace: "", flags: "g")
    }
}






-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adt-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to