İşte aşağıda görülebilecek olan önceki cevabımın modernizasyonu geliyor. Bu, Gradle 4.4 ve Android Studio 3.1.1 ile çalışıyor .
Bu komut dosyası ne yapar:
- Eğer yoksa bir version.properties dosyası oluşturur (aşağıdaki Paul Cantrell'in cevabına oy verin, bu cevabı beğendiyseniz fikrimi buradan edindim)
- Her derleme, hata ayıklama sürümü için veya Android Studio'da çalıştır düğmesine her bastığınızda VERSION_BUILD sayısı artar.
- Her sürümü bir araya getirdiğinizde , oyun mağazası için Android sürüm Kodunuz artar ve yama numaranız artar.
- Bonus: Oluşturma tamamlandıktan sonra,
projectDir/apk
daha erişilebilir hale getirmek için apk'nizi kopyalar .
Bu komut dosyası, AppName-v1.3.4.apkv1.3.4 (123)
gibi görünen ve bir apk dosyası oluşturan bir sürüm numarası oluşturacaktır .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Ana sürüm: Daha büyük değişiklikler için manuel olarak değiştirilmelidir.
Küçük sürüm: Biraz daha az büyük değişiklikler için manuel olarak değiştirilmelidir.
Yama sürümü: Çalışırken artargradle assembleRelease
Derleme sürümü: Her derlemeyi artırır
Sürüm Numarası: Yama sürümüyle aynı , bu, Play Store'un her yeni apk yüklemesi için artırması gereken sürüm kodu içindir.
Aşağıdaki 1 - 3 olarak etiketlenen yorumlardaki içeriği değiştirin ve komut dosyası gerisini halledecektir. :)
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 {
...
}
}
================================================== ==
İLK CEVAP:
VersionName'in de otomatik olarak artmasını istiyorum. Bu, benim için mükemmel bir şekilde çalışan CommonsWare'in cevabına sadece bir ek. İşte benim işime yarayan bu
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
DÜZENLE:
Biraz tembel olduğum için, sürüm oluşturma işlemimin olabildiğince otomatik çalışmasını istiyorum. İstediğim şey , her derlemede artan bir Derleme Sürümüne sahip olmak , Sürüm Numarası ve Sürüm Adı ise yalnızca bir sürüm derlemesi yaptığımda artıyor.
Geçen yıl boyunca kullandığım şey bu, temel bilgiler CommonsWare'in cevabından ve önceki cevabımdan ve biraz daha fazlası. Bu, aşağıdaki sürüm oluşturma ile sonuçlanır:
Sürüm Adı: 1.0.5 (123) -> Major.Minor.Patch (Build), Major ve Minor manuel olarak değiştirilir.
Build.gradle'da:
...
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!")
}
...
}
...
Projenizi uçbirim üzerinden 'assemble' , 'assembleRelease' veya 'aR' ile birleştirirseniz patch ve versionCode artar, bu da proje kökünüzde apk / RELEASE adlı yeni bir klasör oluşturur, böylece derleme / çıktılara bakmanıza gerek kalmaz. APK'nızı bulmak için / more / more / more.
Sürüm özelliklerinizin şöyle görünmesi gerekir:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Açıkçası 0 ile başlayın. :)