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 <[email protected]>
>> 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 [email protected].
>>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.