It looks like your tasks are changing the model, which is really not what
you want to do. The mode should be considered immutable in the execution
phase.

We did do change some things with our handling of the version code (to
support splits). What it does now is that when the variants are created, we
merge the flavors (accessible through the variant API), and this is where
we read the version code from.

So, again, you are changing the model during execution which is too late,
and may or may not work (we actually kind of want to secure this a bit more
in the future, similar to the recent change where the Product Flavor, and
build types in the Variant API are read-only).

What you should be doing is either:
- inject the version code through an env variable or dynamic project
property
- read version from a file and have another job regularly update the value
in the file.

On Fri, Dec 12, 2014 at 8:52 AM, Yuri Denison <yuri.deni...@gmail.com>
wrote:
>
> 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.
>


-- 
Xavier Ducrohet
Android SDK Tech Lead
Google Inc.
http://developer.android.com | http://tools.android.com

Please do not send me questions directly. Thanks!

-- 
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