I'm trying to auto increment versionCode in my build.gradle. But it doesn't work. Then I've tried to simply overwrite versionCode, e.g. versionCode 20 and still it's not updated. Checked both 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.github.io/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 out. Looks like defaultConfig section is ignored. I know there's working example here on SO. But still wondering why built-in android.defaultConfig.versionCode doesn't work?
解决方案
Try changing your function name to something else 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"
}