問題描述
我正在使用 gradle 構(gòu)建一個(gè) Android 應(yīng)用.到目前為止,我使用 Manifest 文件來增加 versionCode,但我想從外部文件中讀取 versionCode,并根據(jù)它是發(fā)布風(fēng)格還是調(diào)試風(fēng)格來增加 versionCode.我嘗試了額外的屬性,但你無法保存它們,這意味著下次我構(gòu)建它時(shí),我會(huì)得到相同的 versionCode.任何幫助將不勝感激!
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
我確信有許多可能的解決方案;這是一個(gè):
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
}
此代碼需要一個(gè)現(xiàn)有的 version.properties
文件,您將在第一次構(gòu)建之前手動(dòng)創(chuàng)建該文件以具有 VERSION_CODE=8
.
This code expects an existing version.properties
file, which you would create by hand before the first build to have VERSION_CODE=8
.
此代碼只是在每次構(gòu)建時(shí)增加版本代碼 - 您需要擴(kuò)展該技術(shù)以處理每個(gè)風(fēng)味的版本代碼.
This code simply bumps the version code on each build -- you would need to extend the technique to handle your per-flavor version code.
您可以看到 版本控制示例項(xiàng)目代碼.
這篇關(guān)于具有 gradle 額外屬性的自動(dòng)增量版本代碼的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!