自动增量版本code与摇篮额外的属性 [英] Autoincrement VersionCode with gradle extra properties
问题描述
我要建有摇篮的Android应用程序。到现在为止我用清单文件,以增加版本code,但我想从外部文件中读取的版本code和取决于它是否释放香味或调试味道增加版本code。我尝试了额外的属性,但不能拯救他们,这意味着下一次我建立它我得到了相同的版本code。 任何帮助将非常AP preciated!
project.ext {
devVersion code = 13
releaseVersion code = 1
}
buildscript {
库{
mavenCentral()
}
依赖{
类路径com.android.tools.build:gradle:0.6.+
}
}
应用插件:'机器人'
库{
mavenCentral()
}
依赖{
编制项目(:收割机)
编译com.android.support:appcompat-v7:18.0.+
编译com.android.support:support-v4:18.0.+
编译文件树(导演:库,包括:的* .jar)
}
高清getReleaseVersion code(){
高清版= project.releaseVersion code + 1
project.releaseVersion code =版本
的println的sprintf(返回版本%D版)
回版本
}
高清getDevVersion code(){
高清版= project.devVersion code + 1
project.devVersion code =版本
的println的sprintf(返回版本%D版)
回版本
}
高清getLastVersioName(版本code){
回到0.0。 +版本code
}
安卓{
compileSdkVersion 19
buildToolsVersion19.0.0
defaultConfig {
的minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
主要 {
manifest.srcFile的AndroidManifest.xml
java.srcDirs = ['src'中]
resources.srcDirs = ['src'中]
aidl.srcDirs = ['src'中]
renderscript.srcDirs = ['src'中]
res.srcDirs = ['水库']
assets.srcDirs = ['资产']
}
}
buildTypes {
推出 {
runProguard真
proguardFile getDefaultProguardFile('ProGuard的-的Android optimize.txt)
proguardFileproguard.cfg
调试的假
signingConfig空
zipAlign假
}
调试{
versionNameSuffix-DEBUG
}
}
productFlavors {
开发{
的packageName ='com.swisscom.docsafe.debug
版本code getDevVersion code()
VERSIONNAME getLastVersioName(project.devVersion code)
}
督促{
的packageName ='com.swisscom.docsafe
版本code getReleaseVersion code()
VERSIONNAME getLastVersioName(project.releaseVersion code)
}
}
}
任务包装(类型:包装){
gradleVersion ='1.8'
}
我想从外部文件中读取的版本code
我相信有任何数量的可能的解决方案;这里是:
安卓{
compileSdkVersion 18
buildToolsVersion18.1.0
高清versionPropsFile =文件(version.properties)
如果(versionPropsFile.canRead()){
高清性能versionProps =新特性()
versionProps.load(新的FileInputStream(versionPropsFile))
DEF code = versionProps ['VERSION_ code'。toInteger()+ 1
versionProps ['VERSION_ code'] = code.toString()
versionProps.store(versionPropsFile.newWriter(),NULL)
defaultConfig {
版本code code
VERSIONNAME1.1
的minSdkVersion 14
targetSdkVersion 18
}
}
其他 {
抛出新GradleException(无法读取version.properties!)
}
//安卓块的其余部分放在这里
}
这code预计,现有的 version.properties
文件,你会第一个构建之前,手工创建有 VERSION_ code = 8
。
这code简单地颠簸每个构建的版本code - 你需要扩展的技术来处理您的每味的版本code
。您可以看到整个样本项目演示此code。
I'm building an Android app with gradle. Until now I used the Manifest file to increase the versionCode, but I would like to read the versionCode from an external file and depending if it is the release flavor or the debug flavor increase the versionCode. I tried the extra properties, but you can't save them, which means that next time I build it I'm getting the same versionCode. Any help would be very much appreciated!
project.ext{
devVersionCode = 13
releaseVersionCode = 1
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.6.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile project(':Cropper')
compile "com.android.support:appcompat-v7:18.0.+"
compile "com.android.support:support-v4:18.0.+"
compile fileTree(dir: 'libs', include: '*.jar')
}
def getReleaseVersionCode() {
def version = project.releaseVersionCode + 1
project.releaseVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getDevVersionCode() {
def version = project.devVersionCode + 1
project.devVersionCode = version
println sprintf("Returning version %d", version)
return version
}
def getLastVersioName(versionCode) {
return "0.0." + versionCode
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 19
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
buildTypes {
release {
runProguard true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard.cfg'
debuggable false
signingConfig null
zipAlign false
}
debug {
versionNameSuffix "-DEBUG"
}
}
productFlavors {
dev {
packageName = 'com.swisscom.docsafe.debug'
versionCode getDevVersionCode()
versionName getLastVersioName(project.devVersionCode)
}
prod {
packageName = 'com.swisscom.docsafe'
versionCode getReleaseVersionCode()
versionName getLastVersioName(project.releaseVersionCode)
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '1.8'
}
I would like to read the versionCode from an external file
I am sure that there are any number of possible solutions; here is one:
android {
compileSdkVersion 18
buildToolsVersion "18.1.0"
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def code = versionProps['VERSION_CODE'].toInteger() + 1
versionProps['VERSION_CODE']=code.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode code
versionName "1.1"
minSdkVersion 14
targetSdkVersion 18
}
}
else {
throw new GradleException("Could not read version.properties!")
}
// rest of android block goes here
}
This code expects an existing version.properties
file, which you would create by hand before the first build to have VERSION_CODE=8
.
This code simply bumps the version code on each build -- you would need to extend the technique to handle your per-flavor version code.
You can see the entire sample project that demonstrates this code.
这篇关于自动增量版本code与摇篮额外的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!