Hier kommt eine Modernisierung meiner vorherigen Antwort, die unten zu sehen ist. Dieser läuft mit Gradle 4.4 und Android Studio 3.1.1 .
Was dieses Skript macht:
- Erstellt eine version.properties- Datei, falls keine vorhanden ist (nach oben abstimmen Paul Cantrells Antwort unten, woher ich die Idee habe, wenn Ihnen diese Antwort gefällt)
- Für jeden Build, jede Debug-Version oder jedes Mal, wenn Sie in Android Studio auf die Schaltfläche "Ausführen" klicken, erhöht sich die Anzahl VERSION_BUILD.
- Jedes Mal, wenn Sie eine Version zusammenstellen , erhöht sich Ihr Android- Versionscode für den Play Store und Ihre Patch-Nummer .
- Bonus: Nachdem der Build abgeschlossen ist, kopiere deine apk
projectDir/apk
, um sie zugänglicher zu machen.
Dieses Skript erstellt eine Versionsnummer, die aussieht, v1.3.4 (123)
und erstellt eine APK- Datei wie AppName-v1.3.4.apk .
Major version ⌄ ⌄ Build version
v1.3.4 (123)
Minor version ⌃|⌃ Patch version
Hauptversion: Muss für größere Änderungen manuell geändert werden.
Nebenversion: Muss für etwas weniger große Änderungen manuell geändert werden.
Patch-Version: Erhöht sich beim Ausführengradle assembleRelease
Build-Version: Erhöht jeden Build
Versionsnummer: Wie bei der Patch-Version gilt dies für den Versionscode, den der Play Store für jeden neuen Apk-Upload erhöht haben muss.
Ändern Sie einfach den Inhalt in den Kommentaren mit den Bezeichnungen 1 - 3 unten, und das Skript sollte den Rest erledigen. :) :)
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 {
...
}
}
================================================== ==
ERSTE ANTWORT:
Ich möchte, dass der Versionsname ebenfalls automatisch erhöht wird. Dies ist also nur eine Ergänzung zu der Antwort von CommonsWare, die für mich perfekt funktioniert hat. Das funktioniert bei mir
defaultConfig {
versionCode code
versionName "1.1." + code
minSdkVersion 14
targetSdkVersion 18
}
BEARBEITEN:
Da ich etwas faul bin, möchte ich, dass meine Versionierung so automatisch wie möglich funktioniert. Ich möchte eine Build-Version haben , die mit jedem Build zunimmt, während die Versionsnummer und der Versionsname nur zunehmen, wenn ich einen Release-Build erstelle.
Dies ist, was ich im letzten Jahr verwendet habe. Die Grundlagen stammen aus der Antwort von CommonsWare und meiner vorherigen Antwort sowie einigen weiteren. Dies führt zu folgender Versionierung:
Versionsname: 1.0.5 (123) -> Major.Minor.Patch (Build), Major und Minor werden manuell geändert.
In 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 und versionCode werden erhöht, wenn Sie Ihr Projekt über das Terminal mit 'assemble' , 'assembleRelease' oder 'aR' zusammenstellen , wodurch ein neuer Ordner in Ihrem Projektstamm mit dem Namen apk / RELEASE erstellt wird, sodass Sie nicht durch Build / Outputs schauen müssen / more / more / more um deine apk zu finden.
Ihre Versionseigenschaften müssten folgendermaßen aussehen:
VERSION_NUMBER=1
VERSION_BUILD=645
VERSION_PATCH=1
Beginnen Sie natürlich mit 0. :)