SDK-Erweiterungen

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:

Bei APIs, die Teil von SDK Extensions sind, wird die jeweilige Erweiterungsversion in der API-Referenzdokumentation angezeigt.

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:

  1. 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.
  2. Nachdem du die erforderliche Erweiterungsversion für deine Funktionen ermittelt hast, öffne den SDK Manager in Android Studio.
  3. 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.
  4. Deklarieren Sie diese Werte in der Datei build.gradle.kts oder build.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.

Das Lint-Tool meldet Instanzen, in denen die für den Aufruf einer API erforderliche Mindestversion für SDK-Erweiterungen nicht erreicht wurde.

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).