Change version of Code using Android Gradle

I am trying to automatically increase the version of Code in my build.gradle . But that will not work. Then I tried to just overwrite versionCode, for example. versionCode 20 is still not being updated. Checked both the original AndroidManifest.xml and packaged in apk.

Full build.gradle :

 import java.util.regex.Pattern buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5+' } } repositories { mavenCentral() mavenLocal() maven { url "http://mente.imtqy.com/facebook-api-android-aar" } } apply plugin: 'android' dependencies { //provided by android gradle plugin compile 'com.android.support:support-v4:+' compile 'com.google.android.gms:play-services:3.+' compile 'com.facebook:facebook-android-sdk: 3.0.2@aar ' compile 'org.codehaus.jackson:jackson-mapper-asl:1.+' compile 'org.twitter4j:twitter4j-core:3.+' compile fileTree(dir: 'libs', include: '*.jar') } def getVersionCode() { println "Hello getVersionCode" def manifestFile = file("AndroidManifest.xml") def pattern = Pattern.compile("versionCode=\"(\\d+)\"") def manifestText = manifestFile.getText() def matcher = pattern.matcher(manifestText) matcher.find() def version = ++Integer.parseInt(matcher.group(1)) println sprintf("Returning version %d", version) return version } android { defaultConfig { versionCode getVersionCode() } signingConfigs { release { ... } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } buildTypes { release { signingConfig signingConfigs.release } } buildToolsVersion "17.0" compileSdkVersion 17 } task wrapper(type: Wrapper) { gradleVersion = '1.6' } 

Also my debug lines from getVersionCode function are not printed. It looks like the defaultConfig section is defaultConfig ignored. I know there a working example here on SO. But still wondering why the built-in android.defaultConfig.versionCode does not work?

+2
source share
3 answers

Try changing the name of your function to something other than getVersionCode (). I ran into the same problem and changed my function name to something else and it worked

 def getVersionCodeFromFileAndIncrement() { println "Hello getVersionCodeFromFileAndIncrement" def manifestFile = file("AndroidManifest.xml") def pattern = Pattern.compile("versionCode=\"(\\d+)\"") def manifestText = manifestFile.getText() def matcher = pattern.matcher(manifestText) matcher.find() def version = ++Integer.parseInt(matcher.group(1)) println sprintf("Returning version %d", version) return "$version" } 
+3
source

if you want to have versdionCode, which increases every time I create an application, I use time.

def getBuildVersionCode () {

 def date = new Date() def formattedDate = date.format('yyyyMMdd') def formattedSeconds = date.format('HHmmssSSS') def formatInt = formattedDate as int; def SecondsInt = formattedSeconds as int; return (formatInt + SecondsInt) as int 

}

or maybe better:

 def getVersionCode() { def date = new Date() def formattedDate = date.format('yyyyMMddHHmmss') return formattedDate } 

defaultConfig {

  versionCode getBuildVersionCode() minSdkVersion 16 targetSdkVersion 18 

}

+2
source

This case has been described in the official version of android gradle documentation:

Note. . Do not use function names that may conflict with existing getters in this area. For example, instance defaultConfig {...} calling getVersionName () will automatically use the receiver defaultConfig.getVersionName () instead of the custom method.

+1
source

Source: https://habr.com/ru/post/1201716/


All Articles