Ini dia modernisasi jawaban saya sebelumnya yang dapat dilihat di bawah. Yang ini berjalan dengan Gradle 4.4 dan Android Studio 3.1.1 .
Apa yang dilakukan skrip ini:
- Membuat file version.properties jika tidak ada (pilih jawaban Paul Cantrell di bawah ini, dari mana saya mendapat ide jika Anda menyukai jawaban ini)
- Untuk setiap build, rilis debug, atau setiap kali Anda menekan tombol run di Android Studio, jumlah VERSION_BUILD meningkat.
- Setiap kali Anda merakit rilis, versionCode Android Anda untuk play store meningkat dan nomor patch Anda meningkat.
- Bonus: Setelah build selesai, salin apk Anda
projectDir/apk
agar lebih mudah diakses.
Skrip ini akan membuat nomor versi yang mirip v1.3.4 (123)
dan membuat file apk seperti AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Versi utama: Harus diubah secara manual untuk perubahan yang lebih besar.
Versi minor: Harus diubah secara manual untuk perubahan yang sedikit lebih kecil.
Versi patch: Meningkat saat dijalankangradle assembleRelease
Versi build: Meningkatkan setiap build
Nomor Versi: Sama seperti versi Patch , ini untuk kode versi yang perlu ditingkatkan oleh Play Store untuk setiap unggahan apk baru.
Ubah saja konten di komentar berlabel 1 - 3 di bawah dan skrip akan melakukan sisanya. :)
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 {
...
}
}
================================================== ==
JAWABAN AWAL:
Saya ingin versionName meningkat secara otomatis juga. Jadi ini hanyalah tambahan dari jawaban CommonsWare yang bekerja dengan sempurna untuk saya. Inilah yang berhasil untuk saya
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
EDIT:
Karena saya agak malas, saya ingin pembuatan versi saya bekerja secara otomatis. Yang saya inginkan adalah memiliki Versi Build yang bertambah dengan setiap build, sedangkan Nomor Versi dan Nama Versi hanya meningkat ketika saya membuat build rilis.
Inilah yang telah saya gunakan selama setahun terakhir, dasar-dasarnya berasal dari jawaban CommonsWare dan jawaban saya sebelumnya, ditambah lagi. Ini menghasilkan versi berikut:
Nama Versi: 1.0.5 (123) -> Major.Minor.Patch (Build), Major dan Minor diubah secara manual.
Dalam build.gradle:
...
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!")
}
...
}
...
Patch dan versionCode ditingkatkan jika Anda merakit proyek Anda melalui terminal dengan 'assemble' , 'assembleRelease' atau 'aR' yang membuat folder baru di root proyek Anda yang disebut apk / RELEASE sehingga Anda tidak perlu melihat-lihat build / outputs / more / more / more untuk menemukan apk Anda.
Properti versi Anda harus terlihat seperti ini:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Jelas dimulai dengan 0. :)