Die Versionsverwaltung ist ein wichtiger Bestandteil Ihrer Upgrade- und Wartungsstrategie für Apps. Versionierung ist aus folgenden Gründen wichtig:
- Nutzer benötigen bestimmte Informationen zur App-Version, die auf ihren Geräten installiert ist, und zu den Upgrade-Versionen, die für die Installation verfügbar sind.
- Andere Apps, einschließlich anderer Apps, die Sie als Suite veröffentlichen, müssen das System nach der Version Ihrer App abfragen, um die Kompatibilität zu ermitteln und Abhängigkeiten zu identifizieren.
- Dienste, in denen Sie Ihre App(s) veröffentlichen, müssen möglicherweise auch die Version Ihrer App abfragen, damit sie sie Nutzern anzeigen können. Ein Veröffentlichungsdienst muss möglicherweise auch die App-Version prüfen, um die Kompatibilität zu ermitteln und Upgrade-/Downgrade-Beziehungen herzustellen.
Das Android-System prüft die Versionsinformationen Ihrer App, um Downgrades zu verhindern. Das System verwendet keine Informationen zur App-Version, um Einschränkungen für Upgrades oder die Kompatibilität von Drittanbieter-Apps zu erzwingen. Ihre App muss alle Versionsbeschränkungen durchsetzen und Nutzer darüber informieren.
Das Android-System erzwingt die Kompatibilität mit der Systemversion, die durch die minSdk
-Einstellung in den Build-Dateien angegeben wird. Mit dieser Einstellung kann eine App die Mindestsystem-API angeben, mit der sie kompatibel ist.
Weitere Informationen zu API-Anforderungen finden Sie unter Anforderungen an das API-Level (SDK-Version) angeben.
Die Anforderungen an die Versionsverwaltung variieren je nach Projekt. Viele Entwickler halten Semantic Versioning jedoch für eine gute Grundlage für eine Versionsstrategie.
App-Versionsinformationen festlegen
Um die Versionsinformationen für Ihre App zu definieren, legen Sie Werte für die Versionseinstellungen in den Gradle-Build-Dateien fest:
Groovy
android { namespace 'com.example.testapp' compileSdk 33 defaultConfig { applicationId "com.example.testapp" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" ... } ... } ...
Kotlin
android { namespace = "com.example.testapp" compileSdk = 33 defaultConfig { applicationId = "com.example.testapp" minSdk = 24 targetSdk = 33 versionCode = 1 versionName = "1.0" ... } ... } ...
Versionseinstellungen
Legen Sie Werte für beide verfügbaren Versionseinstellungen fest: versionCode
und versionName
.
versionCode
- Eine positive Ganzzahl, die als interne Versionsnummer verwendet wird.
Anhand dieser Nummer lässt sich feststellen, ob eine Version neuer als eine andere ist. Höhere Zahlen weisen auf neuere Versionen hin. Das ist nicht die Versionsnummer, die Nutzern angezeigt wird. Diese wird durch die Einstellung
versionName
festgelegt. Das Android-System verwendet den WertversionCode
, um Downgrades zu verhindern. Nutzer können also kein APK mit einem niedrigerenversionCode
als die derzeit auf ihrem Gerät installierte Version installieren.Der Wert ist eine positive Ganzzahl, damit andere Apps ihn programmatisch auswerten können, z. B. um eine Upgrade- oder Downgrade-Beziehung zu prüfen. Sie können den Wert auf eine beliebige positive Ganzzahl festlegen. Achten Sie jedoch darauf, dass bei jedem nachfolgenden Release Ihrer App ein höherer Wert verwendet wird.
Hinweis:Der größte Wert, der für
versionCode
bei Google Play zulässig ist, ist 2100000000.Sie können kein APK mit einem
versionCode
in den Play Store hochladen, das Sie bereits für eine frühere Version verwendet haben.Hinweis:In einigen Fällen kann es sinnvoll sein, eine Version Ihrer App mit einer niedrigeren
versionCode
als die aktuelle Version hochzuladen. Wenn Sie beispielsweise mehrere APKs veröffentlichen, haben Sie möglicherweiseversionCode
-Bereiche für bestimmte APKs voreingestellt. Weitere Informationen zum Zuweisen vonversionCode
-Werten für mehrere APKs finden Sie unter Versionscodes zuweisen.Normalerweise veröffentlichen Sie die erste Version Ihrer App mit
versionCode
auf 1 gesetzt und erhöhen den Wert dann mit jeder Version monoton, unabhängig davon, ob es sich um eine Haupt- oder Nebenversion handelt. Das bedeutet, dass derversionCode
-Wert nicht unbedingt der für den Nutzer sichtbaren App-Release-Version entspricht. Apps und Veröffentlichungsdienste dürfen diesen Versionswert Nutzern nicht anzeigen. versionName
Ein String, der als Versionsnummer für Nutzer angezeigt wird. Diese Einstellung kann als Rohstring oder als Verweis auf eine Stringressource angegeben werden.
Der Wert ist ein String, sodass Sie die App-Version als String im Format <major>.<minor>.<point> oder als beliebige andere Art von absoluter oder relativer Versions-ID beschreiben können. Der
versionName
ist der einzige Wert, der Nutzern angezeigt wird.
Versionswerte definieren
Sie können Standardwerte für diese Einstellungen definieren, indem Sie sie in den defaultConfig {}
-Block einfügen, der im android {}
-Block der build.gradle
- oder build.gradle.kts
-Datei Ihres Moduls verschachtelt ist. Sie können diese Standardwerte dann für verschiedene Versionen Ihrer App überschreiben, indem Sie separate Werte für einzelne Build-Typen oder Produktvarianten definieren. Die folgende Datei zeigt die Einstellungen versionCode
und versionName
im Block defaultConfig {}
sowie den Block productFlavors {}
.
Diese Werte werden dann während des Build-Prozesses in die Manifestdatei Ihrer App eingefügt.
Groovy
android { ... defaultConfig { ... versionCode 2 versionName "1.1" } productFlavors { demo { ... versionName "1.1-demo" } full { ... } } }
Kotlin
android { ... defaultConfig { ... versionCode = 2 versionName = "1.1" } productFlavors { create("demo") { ... versionName = "1.1-demo" } create("full") { ... } } }
Im defaultConfig {}
-Block dieses Beispiels gibt der Wert versionCode
an, dass das aktuelle APK den zweiten Release der App enthält, und der String versionName
gibt an, dass er Nutzern als Version 1.1 angezeigt wird. In dieser Datei werden auch zwei Produktvarianten definiert: „demo“ und „full“. Da für die Produktvariante „demo“ versionName
als „1.1-demo“ definiert ist, wird für den „demo“-Build dieser versionName
-Wert anstelle des Standardwerts verwendet.
Im Block für die Produktvariante „full“ wird versionName
nicht definiert. Daher wird der Standardwert „1.1“ verwendet.
Hinweis:Wenn die App-Version direkt im <manifest>
-Element definiert ist, überschreiben die Versionswerte in der Gradle-Build-Datei die Einstellungen im Manifest. Wenn Sie diese Einstellungen in den Gradle-Build-Dateien definieren, können Sie außerdem unterschiedliche Werte für verschiedene Versionen Ihrer App angeben. Um mehr Flexibilität zu erhalten und ein potenzielles Überschreiben beim Zusammenführen des Manifests zu vermeiden, sollten Sie diese Attribute aus dem <manifest>
-Element entfernen und Ihre Versionseinstellungen stattdessen in den Gradle-Build-Dateien definieren.
Das Android-Framework bietet eine API, mit der Sie das System nach Versionsinformationen zu Ihrer App abfragen können. Verwenden Sie die Methode
PackageManager.getPackageInfo(java.lang.String, int)
, um Versionsinformationen abzurufen.
API-Level-Anforderungen (SDK-Version) angeben
Wenn Ihre App eine bestimmte Mindestversion der Android-Plattform erfordert, können Sie diese Version als API-Level-Einstellung in der Datei build.gradle
oder build.gradle.kts
der App angeben. Beim Erstellen werden diese Einstellungen in das Manifest Ihrer App eingefügt. Durch die Angabe von API-Level-Anforderungen wird sichergestellt, dass Ihre App nur auf Geräten installiert werden kann, auf denen eine kompatible Version der Android-Plattform ausgeführt wird.
Hinweis:Wenn Sie API-Level-Anforderungen direkt im Manifest Ihrer App angeben, werden die entsprechenden Einstellungen in den Build-Dateien die Einstellungen in der Manifestdatei überschreiben. Wenn Sie diese Einstellungen in den Gradle-Build-Dateien definieren, können Sie außerdem unterschiedliche Werte für verschiedene Versionen Ihrer App angeben. Um mehr Flexibilität zu erhalten und ein potenzielles Überschreiben beim Zusammenführen des Manifests zu vermeiden, sollten Sie diese Attribute aus dem <uses-sdk>
-Element entfernen und Ihre API-Level-Einstellungen stattdessen in den Gradle-Build-Dateien definieren.
Es gibt zwei Einstellungen für die API-Ebene:
minSdk
: Die Mindestversion der Android-Plattform, auf der die App ausgeführt wird, angegeben durch die API-Level-Kennung der Plattform.targetSdk
: Das API-Level, das mit der Konstanten<SDK_INT>
verknüpft ist, für die die App entwickelt wurde. In einigen Fällen kann die App dadurch Manifestelemente oder Verhaltensweisen verwenden, die im Ziel-API-Level definiert sind, anstatt nur auf die Elemente oder Verhaltensweisen beschränkt zu sein, die für das Mindest-API-Level definiert sind.
Es ist nicht möglich, anzugeben, dass eine App entweder auf eine Nebenversion des SDK ausgerichtet ist oder diese erfordert. Wenn Sie neue APIs aufrufen möchten, die eine höhere Haupt- oder Nebenversion des SDK als Ihr minSdkVersion
erfordern, können Sie einen Codeblock mit einem Check für eine Neben- oder Hauptversion mithilfe der Konstanten SDK_INT_FULL
schützen.
if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) { // Use APIs introduced in a major or minor SDK version }
Wenn Sie Standardanforderungen für das API-Level in einer build.gradle
- oder build.gradle.kts
-Datei angeben möchten, fügen Sie dem defaultConfig{}
-Block, der im android {}
-Block verschachtelt ist, eine oder mehrere API-Level-Einstellungen hinzu. Sie können diese Standardwerte auch für verschiedene Versionen Ihrer App überschreiben, indem Sie die Einstellungen zu Build-Typen oder Produktvarianten hinzufügen.
In der folgenden Datei werden Standardeinstellungen für minSdk
und targetSdk
im Block defaultConfig {}
angegeben und minSdk
für eine Produktvariante überschrieben:
Groovy
android { ... defaultConfig { ... minSdk 21 targetSdk 33 } productFlavors { main { ... } afterNougat { ... minSdk 24 } } }
Kotlin
android { ... defaultConfig { ... minSdk = 21 targetSdk = 33 } productFlavors { create("main") { ... } create("afterNougat") { ... minSdk = 24 } } }
Bei der Vorbereitung der Installation Ihrer App prüft das System den Wert dieser Einstellungen und vergleicht ihn mit der Systemversion. Wenn der Wert von minSdk
größer als die Systemversion ist, verhindert das System die Installation der App.
Wenn Sie diese Einstellungen nicht angeben, geht das System davon aus, dass Ihre App mit allen Plattformversionen kompatibel ist. Dies entspricht dem Festlegen von minSdk
auf 1
.
Weitere Informationen finden Sie unter Was ist das API-Level?. Informationen zu Gradle-Buildeinstellungen finden Sie unter Build-Varianten konfigurieren.