SDK-Erweiterungen nutzen modulare Systemkomponenten, um dem öffentlichen SDK APIs für bestimmte zuvor veröffentlichte API-Levels hinzuzufügen. Diese APIs werden auf Geräten bereitgestellt, wenn Endnutzer Modulupdates über Google Play-Systemupdates erhalten. App-Entwickler können diese APIs in ihren Apps verwenden, um zusätzliche Funktionen bereitzustellen, die im SDK ursprünglich nicht für diese vorherigen Android-Versionen verfügbar waren.
API-Versionsverwaltung
Ab Android 11 (API-Level 30) enthalten Android-Geräte eine Reihe von SDK-Erweiterungen. Neue APIs, die hinzugefügt werden, sind in einem API-Level enthalten. Sie können aber auch in einer SDK-Erweiterung einer bestimmten Version enthalten sein. Die ACTION_PICK_IMAGES
API für die Bildauswahl wurde dem öffentlichen SDK in Android 13 (API-Level 33) hinzugefügt, ist aber auch über SDK-Erweiterungen ab Version 2 von R-Erweiterungen verfügbar.
Die Namen der SDK-Erweiterungen entsprechen einer Ganzzahlkonstante – entweder eine Konstante aus Build.VERSION_CODES
oder eine, die in der SdkExtensions
-Klasse definiert ist (z. B. SdkExtensions.AD_SERVICES
).
Bestimmen, welche SDK-Erweiterungen verwendet werden sollen
Bevor Sie SDK Extension APIs verwenden können, müssen Sie zuerst bestimmen, welche SDKs die APIs enthalten, die die Anwendungsfälle Ihrer App unterstützen.
Auf den API-Referenzseiten für SDK Extension APIs ist die früheste SDK-Erweiterungsversion angegeben, mit der Ihre App auf eine API zugreifen kann. Wenn in der Dokumentation auch eine Android-Plattformversion angegeben ist (die durch das API-Level referenziert wird), ist diese API auch für alle Geräte verfügbar, auf denen diese Android-Version oder höher ausgeführt wird.
Beispielsweise ist ACTION_PICK_IMAGES
allgemein im öffentlichen SDK ab Android 13 (API-Level 33) verfügbar, aber auch auf Geräten ab Android 11 (API-Level 30), sofern auf dem Gerät mindestens R-Erweiterungen der Version 2 installiert sind:
Wenn Sie diese API verwenden möchten, müssen Sie die Kompilierung für ein SDK vornehmen, das mindestens API-Level 33 oder Erweiterungsebene 2 ist.
So verwenden Sie ein Erweiterungs-SDK:
- Suchen Sie in der Dokumentation zur Funktion und in der API-Referenz für die APIs, die Sie verwenden möchten, nach der erforderlichen Mindestversion der Erweiterungen.
- Nachdem du die erforderliche Erweiterungsversion für deine Funktionen ermittelt hast, öffne den SDK Manager in Android Studio.
- Wählen Sie den Eintrag „Android SDK Platform“ mit der entsprechenden Erweiterungsversion aus (oder eine höhere Version, da die APIs additiv sind). Beispiel: Android SDK Platform 33, Erweiterung Level 4.
Deklarieren Sie diese Werte in der Datei
build.gradle.kts
oderbuild.gradle
Ihrer App:Groovig
android { compileSdk 33 compileSdkExtension 4 ... }
Kotlin
android { compileSdk = 33 compileSdkExtension = 4 ... }
Verfügbarkeit von SDK-Erweiterungen prüfen
Ihre App kann prüfen, welche Versionen von SDK-Erweiterungen zur Laufzeit verfügbar sind. Während der Entwicklung können Sie die Erweiterungsversionen mit den ADB-Befehlen (Android Debug Bridge) abrufen, wie in den folgenden Abschnitten beschrieben.
Zur Laufzeit prüfen
Mit der Methode getExtensionVersion()
kann deine App zur Laufzeit prüfen, ob SDK-Erweiterungen für eine bestimmte Plattformversion verfügbar sind. Mit dem folgenden Code wird beispielsweise geprüft, ob die Erweiterungsversion 2 oder höher für die Android 11 SDK-Erweiterung (API-Level 30) verfügbar ist:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2 // Safely use extension APIs that are available with Android 11 (API level 30) Extensions Version 2, such as Photo Picker. }
Java
public static final boolean isPhotoPickerAvailable() { return SdkExtensions.getExtensionVersion(Build.VERSION_CODES.R) >= 2; }
Dies entspricht in etwa einer Prüfung auf Grundlage von Build.VERSION.SDK_INT
:
Kotlin
fun isPhotoPickerAvailable(): Boolean { return Build.VERSION.SDK_INT >= 33 }
Java
public static final boolean isPhotoPickerAvailable() { return Build.VERSION.SDK_INT >= 33; }
Diese SDK_INT
-Prüfung ist weiterhin sicher und gültig, aber isPhotoPickerAvailable
gibt auf einigen Geräten „false“ zurück, obwohl die Erweiterungs-API verfügbar ist. Daher ist die SDK_INT
-Prüfung nicht optimal und die Prüfung der Erweiterungsversion ist eine bessere Möglichkeit, die API-Verfügbarkeit zu prüfen. Alle Geräte mit SDK_INT
größer oder gleich 33
(Android 13 oder höher) haben die Photo Picker APIs im öffentlichen SDK. Es gibt jedoch Geräte mit SDK_INT
kleiner als 33 (z. B. Android 11, 12 und 12L), die ebenfalls auf die APIs zugreifen können, wenn sie mindestens eine R-Erweiterungsversion von 2
haben.
In diesem Fall kann eine Überprüfung der Erweiterungsversion dazu beitragen, dass Ihre App mehr Nutzern zusätzliche Funktionen zur Verfügung stellt. Unter SDK-Erweiterungsnamen und -Konstanten finden Sie eine Liste aller Konstanten, mit denen Sie auf einem Gerät nach bestimmten SDK-Erweiterungen suchen können.
Anzeigendienste-Erweiterungen
Ähnlich wie bei den allgemeinen SDK-Erweiterungen gibt die API-Referenz AdServices
manchmal an, dass eine API Teil einer Version von „Ad Services Extensions“ ist.
Im Gegensatz zu den allgemeinen SDK-Erweiterungen verwenden Anzeigendiensterweiterungen die Konstante SdkExtensions.AD_SERVICES
, um zu bestimmen, welche Version auf einem Gerät installiert ist:
Kotlin
fun isAdServicesAvailable(): Boolean { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4 }
Java
public static final boolean isAdServicesAvailable() { return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4; }
Weitere Informationen zu den Funktionen in Ad Services-Erweiterungen und zu den ersten Schritten finden Sie in der Dokumentation zu Ad Services-Erweiterungen.
Dienstprogrammmethoden
In einigen Fällen verfügen SDK-Erweiterungen über Jetpack-Dienstprogrammmethoden, mit denen die Verfügbarkeit der SDK Extension APIs geprüft werden kann. Beispielsweise können Sie eine Jetpack-Bibliotheksfunktion zur Prüfung der Verfügbarkeit von PhotoPicker verwenden, bei der die bedingten Versionsprüfungen wegfallen.
Support für Tools
Ab Android Studio Flamingo 2022.2.1 kann das Lint-Tool im Rahmen der NewAPI-Prüfung nach Problemen mit Versionen der SDK-Erweiterung suchen. Außerdem kann Android Studio automatisch die korrekten Versionsprüfungen für APIs generieren, die über SDK-Erweiterungen gestartet werden.
Namen und Konstanten von SDK-Erweiterungen
In der folgenden Tabelle wird beschrieben, wie die verschiedenen in der API-Referenzdokumentation aufgeführten SDK-Erweiterungen Konstanten zugeordnet werden, mit denen Ihre App die API-Verfügbarkeit zur Laufzeit prüfen kann. Die allgemeinen SDK-Erweiterungen für jedes öffentliche SDK sind den Werten von Build.VERSION_CODES
zugeordnet.
Name der SDK-Erweiterung | Konstante | Berechtigte Geräte |
---|---|---|
R-Erweiterungen | VERSION_CODES.R |
Android 11 (API-Level 30) und höher |
S-Erweiterungen | VERSION_CODES.S |
Android 12 (API-Level 31) und höher |
T-Erweiterungen | VERSION_CODES.TIRAMISU |
Android 13 (API-Level 33) und höher |
Anzeigendienste-Erweiterungen | SdkExtensions.AD_SERVICES |
Android 13 (API-Level 33) und höher |
Mit ADB prüfen
Führen Sie den folgenden Befehl aus, um mit ADB zu prüfen, welche SDK-Erweiterungen auf einem Gerät verfügbar sind:
adb shell getprop | grep build.version.extensions
Nachdem Sie den Befehl ausgeführt haben, sieht die Ausgabe in etwa so aus:
[build.version.extensions.r]: [3] # Android 11 (API level 30) and higher
[build.version.extensions.s]: [3] # Android 12 (API level 31) and higher
[build.version.extensions.t]: [3] # Android 13 (API level 33) and higher
Jede Zeile zeigt eine SDK-Erweiterung, die auf dem Gerät vorhanden ist, zusammen mit der entsprechenden Erweiterungsversion (in diesem Fall 3).