Please answer my question in more detail. How it is recommended to update version of application before build?
On Saturday, December 13, 2014 2:16:41 AM UTC+3, Yuri Denison wrote: > > Xavier, > Thank you for your answer. > > I'm a little misunderstood with your suggestion: > 1. It seems to me that using the env variable for this is bad style and if > I use extra property: > defaultConfig { > minSdkVersion rootProject.minSdkVersion as int > targetSdkVersion rootProject.targetSdkVersion as int > versionName rootProject.appVersion.toString() > versionCode rootProject.appVersionCode > } > than when should I update these properties? How can I understand, which > part of version should be updated before taskGraph is ready? > > 2. I understand that running tasks in sequence > $./gradlew increase*Version saveVersion > ... > $./gradlew release > > will solve the problem, but the goal is to release any new version with > executing only one command. > > > > On Friday, December 12, 2014 9:12:04 PM UTC+3, Xavier Ducrohet wrote: >> >> 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.d...@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+u...@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.