यहाँ मेरे पिछले उत्तर का आधुनिकीकरण आता है जिसे नीचे देखा जा सकता है। यह ग्रैडल 4.4 और एंड्रॉइड स्टूडियो 3.1.1 के साथ चल रहा है ।
यह स्क्रिप्ट क्या करती है:
- एक वर्जन बनाता है । यदि कोई मौजूद नहीं है, तो एक फाइल फाइल करें । (नीचे पॉल कैंटरेल के वोट का जवाब दें, जहां मुझे यह विचार पसंद आया।
- प्रत्येक बिल्ड, डीबग रिलीज़ या किसी भी समय आप Android स्टूडियो में रन बटन दबाते हैं VERSION_BUILD संख्या बढ़ जाती है।
- हर बार जब आप प्ले स्टोर में बढ़ोतरी के लिए अपना एंड्रॉइड वर्जनकोड जारी करते हैं और आपका पैच नंबर बढ़ जाता है।
- बोनस: बिल्ड के पूरा
projectDir/apk
हो जाने के बाद इसे अधिक सुलभ बनाने के लिए आपकी एपीके को कॉपी किया जाता है ।
यह स्क्रिप्ट एक वर्जन नंबर बनाएगी, जो एपीकेनेम-v1.3.4.apk कीv1.3.4 (123)
तरह दिखने वाली एक एपीके फाइल बनाएगी ।
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
प्रमुख संस्करण: बड़े परिवर्तनों के लिए मैन्युअल रूप से बदलना होगा।
मामूली संस्करण: थोड़ा कम बड़े परिवर्तनों के लिए मैन्युअल रूप से बदलना होगा।
पैच संस्करण: बढ़ते समय बढ़ता हैgradle assembleRelease
बिल्ड वर्जन: हर बिल्ड को बढ़ाता है
वर्जन नंबर: पैच वर्जन के समान , यह उस वर्जन कोड के लिए होता है जिसे प्ले स्टोर को प्रत्येक नए एपीके अपलोड के लिए बढ़ाना होगा।
नीचे दी गई टिप्पणियों में सामग्री को केवल 1 - 3 में बदलें और स्क्रिप्ट को बाकी काम करना चाहिए। :)
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
def versionPropsFile = file('version.properties')
def value = 0
Properties versionProps = new Properties()
if (!versionPropsFile.exists()) {
versionProps['VERSION_PATCH'] = "0"
versionProps['VERSION_NUMBER'] = "0"
versionProps['VERSION_BUILD'] = "-1" // I set it to minus one so the first build is 0 which isn't super important.
versionProps.store(versionPropsFile.newWriter(), null)
}
def runTasks = gradle.startParameter.taskNames
if ('assembleRelease' in runTasks) {
value = 1
}
def mVersionName = ""
def mFileName = ""
if (versionPropsFile.canRead()) {
versionProps.load(new FileInputStream(versionPropsFile))
versionProps['VERSION_PATCH'] = (versionProps['VERSION_PATCH'].toInteger() + value).toString()
versionProps['VERSION_NUMBER'] = (versionProps['VERSION_NUMBER'].toInteger() + value).toString()
versionProps['VERSION_BUILD'] = (versionProps['VERSION_BUILD'].toInteger() + 1).toString()
versionProps.store(versionPropsFile.newWriter(), null)
// 1: change major and minor version here
mVersionName = "v1.0.${versionProps['VERSION_PATCH']}"
// 2: change AppName for your app name
mFileName = "AppName-${mVersionName}.apk"
defaultConfig {
minSdkVersion 21
targetSdkVersion 27
applicationId "com.example.appname" // 3: change to your package name
versionCode versionProps['VERSION_NUMBER'].toInteger()
versionName "${mVersionName} Build: ${versionProps['VERSION_BUILD']}"
}
} else {
throw new FileNotFoundException("Could not read version.properties!")
}
if ('assembleRelease' in runTasks) {
applicationVariants.all { variant ->
variant.outputs.all { output ->
if (output.outputFile != null && output.outputFile.name.endsWith('.apk')) {
outputFileName = mFileName
}
}
}
}
task copyApkFiles(type: Copy){
from 'build/outputs/apk/release'
into '../apk'
include mFileName
}
afterEvaluate {
assembleRelease.doLast {
tasks.copyApkFiles.execute()
}
}
signingConfigs {
...
}
buildTypes {
...
}
}
================================================== ==
संपादकीय जवाब:
मैं चाहता हूं कि वर्जननाम अपने आप ही बढ़ जाए। तो यह कॉमन्सवेयर के जवाब का एक जोड़ है जो मेरे लिए पूरी तरह से काम करता है। मेरे लिए यही काम करता है
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
संपादित करें:
जैसा कि मैं थोड़ा आलसी हूं मैं चाहता हूं कि मेरी वर्जनिंग अपने आप ही काम करे। मैं चाहता हूं कि एक बिल्ड संस्करण हो, जो प्रत्येक बिल्ड के साथ बढ़ता है, जबकि संस्करण संख्या और संस्करण का नाम केवल तब बढ़ता है जब मैं एक रिलीज बिल्ड बनाता हूं।
यह वह है जो मैं पिछले एक साल से उपयोग कर रहा हूं, मूल बातें कॉमन्सवेयर के उत्तर और मेरे पिछले उत्तर, और कुछ और हैं। यह निम्नलिखित संस्करण में परिणाम देता है:
संस्करण का नाम: 1.0.5 (123) -> मेजर.माइनर.पच (बिल्ड), मेजर और माइनर मैन्युअल रूप से बदले जाते हैं।
बिल्ड.ग्रेड में:
...
android {
compileSdkVersion 23
buildToolsVersion '23.0.1'
def versionPropsFile = file('version.properties')
if (versionPropsFile.canRead()) {
def Properties versionProps = new Properties()
versionProps.load(new FileInputStream(versionPropsFile))
def value = 0
def runTasks = gradle.startParameter.taskNames
if ('assemble' in runTasks || 'assembleRelease' in runTasks || 'aR' in runTasks) {
value = 1;
}
def versionMajor = 1
def versionMinor = 0
def versionPatch = versionProps['VERSION_PATCH'].toInteger() + value
def versionBuild = versionProps['VERSION_BUILD'].toInteger() + 1
def versionNumber = versionProps['VERSION_NUMBER'].toInteger() + value
versionProps['VERSION_PATCH'] = versionPatch.toString()
versionProps['VERSION_BUILD'] = versionBuild.toString()
versionProps['VERSION_NUMBER'] = versionNumber.toString()
versionProps.store(versionPropsFile.newWriter(), null)
defaultConfig {
versionCode versionNumber
versionName "${versionMajor}.${versionMinor}.${versionPatch} (${versionBuild}) Release"
minSdkVersion 14
targetSdkVersion 23
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def fileNaming = "apk/RELEASES"
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
output.outputFile = new File(getProject().getRootDir(), "${fileNaming}-${versionMajor}.${versionMinor}.${versionPatch}-${outputFile.name}")
}
}
}
}
} else {
throw new GradleException("Could not read version.properties!")
}
...
}
...
पैच और versionCode यदि आप के साथ टर्मिनल के माध्यम से अपनी परियोजना को इकट्ठा बढ़ जाती है 'इकट्ठा' , 'assembleRelease' या 'एआर' जो अपनी परियोजना जड़ apk बुलाया / विज्ञप्ति में एक नया फ़ोल्डर बनाता है तो आप का निर्माण / आउटपुट के माध्यम से देखने के लिए की जरूरत नहीं है / / अधिक / अधिक / अपने APK को खोजने के लिए।
आपके संस्करण गुणों को इस तरह देखना होगा:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
जाहिर है 0. के साथ शुरू :)