[英]Change versionCode using Android Gradle
我正在尝试在build.gradle
自动增加versionCode。 但它不起作用。 然后我试图简单地覆盖versionCode,例如versionCode 20
,但它仍未更新。 检查了原始AndroidManifest.xml
并打包在apk中。
完整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'
}
此外,我的getVersionCode函数的调试行也没有打印出来。 看起来defaultConfig
节被忽略了。 我知道这里有一个有效的例子 。 但仍然想知道为什么内置android.defaultConfig.versionCode
不起作用?
尝试将函数名称更改为getVersionCode()以外的其他名称。 我遇到了同样的问题,并将函数名称更改为其他名称,并且它起作用了
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"
}
这个案例在官方的android gradle插件ducumentation中描述 :
注意:请勿使用可能与给定范围内的现有getter冲突的函数名称。 例如,调用getVersionName()的实例defaultConfig {...}将自动使用defaultConfig.getVersionName()的getter而不是自定义方法。
如果你想要一个versdionCode,那么每次构建应用程序时都会增加,我会使用时间。
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
}
也许是更好的一个:
def getVersionCode() {
def date = new Date()
def formattedDate = date.format('yyyyMMddHHmmss')
return formattedDate
}
defaultConfig {
versionCode getBuildVersionCode() minSdkVersion 16 targetSdkVersion 18
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.