SDK-Erweiterungen

SDK-Erweiterungen nutzen modulare Systeme Komponenten zum Hinzufügen von APIs für bestimmte zuvor veröffentlichte API-Levels beim öffentlichen SDK. Diese APIs sind an Geräte gesendet, wenn Endnutzer Modul-Updates über Google Play System Aktualisierungen. App-Kampagnen können Entwickelnde diese APIs in ihren Apps nutzen, um zusätzliche Funktionen, die ursprünglich im SDK nicht verfügbar waren, Versionen von Android.

API-Versionsverwaltung

Ab Android 11 (API-Level 30) enthalten Android-Geräte eine Reihe von SDKs Erweiterungen. Neue APIs sind zwar Teil einer API-Ebene, können jedoch auch in einer SDK-Erweiterung einer bestimmten Version enthalten sein. Beispiel: Der Parameter ACTION_PICK_IMAGES Die 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. SDK-Erweiterungsnamen entsprechen einer Ganzzahlkonstante, entweder eine Konstante von Build.VERSION_CODES oder eine die in der Klasse SdkExtensions definiert sind (z. B. SdkExtensions.AD_SERVICES.

Festlegen, welche SDK-Erweiterungen verwendet werden sollen

Bevor Sie SDK Extension APIs verwenden können, müssen Sie zuerst ermitteln, welche SDKs APIs enthalten, die die Anwendungsfälle deiner App unterstützen.

Auf den API-Referenzseiten für SDK Extension APIs ist das früheste SDK angegeben. Erweiterungsversion, mit der Ihre App auf eine API zugreifen kann. Wenn die Dokumentation eine Version der Android-Plattform angibt, auf die durch das API-Level verwiesen wird, Die API ist auch für alle Geräte mit dieser Android-Version oder höher verfügbar.

ACTION_PICK_IMAGES ist beispielsweise im öffentlichen SDK allgemein verfügbar ab Android 13 (API-Level 33), ist aber auch auf Geräten wieder als Android 11 (API-Level 30) verfügbar, solange das Gerät mindestens R Erweiterungen Version 2:

Bei APIs, die Teil von SDK-Erweiterungen sind, wird ihre Erweiterungsversion in der API angezeigt
Referenz
Dokumentation

Um diese API zu verwenden, musst du sie für ein SDK kompilieren, das mindestens das API-Level hat 33 oder Erweiterungsebene mindestens 2.

So verwenden Sie ein Erweiterungs-SDK:

  1. Die mindestens erforderliche Version der Erweiterungen findest du in der entsprechenden Funktion Dokumentation und API-Referenz für die APIs, die Sie verwenden möchten.
  2. Nachdem Sie die erforderliche Erweiterungsversion für den Funktionsumfang ermittelt haben, öffnen Sie den SDK-Manager in Android Studio.
  3. Wählen Sie den Eintrag „Android SDK Platform“ mit der entsprechenden Erweiterung aus. Version (oder eine höhere Version, da die APIs additiv sind). Hier einige Beispiele: Android SDK Platform 33, Extension Level 4
  4. Deklariere diese Werte in der build.gradle.kts oder build.gradle deiner App Datei:

    Cool

    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 der SDK-Erweiterung zur Laufzeit verfügbar sind, und Während der Entwicklung können Sie die Versionen der Erweiterung mit Android Debug abrufen. ADB-Befehle (Bridge-Befehle), wie in den folgenden Abschnitten beschrieben.

Während der Laufzeit prüfen

Deine App kann während der Laufzeit prüfen, ob SDK-Erweiterungen für eine bestimmte Plattformversion mithilfe des getExtensionVersion() . Beispielsweise würde der folgende Code überprüfen, ob die Erweiterung Version 2 Die SDK-Erweiterung für Android 11 (API-Level 30) ist verfügbar:

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 ist vergleichbar mit einer Prüfung basierend auf 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, isPhotoPickerAvailable würde aber Auf einigen Geräten wird „false“ zurückgegeben, obwohl die Erweiterungs-API verfügbar ist. Als führt, ist die SDK_INT-Prüfung nicht optimal und die Prüfung der Erweiterungsversion ist eine um die API-Verfügbarkeit zu prüfen. Alle Geräte mit SDK_INT mehr mindestens 33 (Android 13 oder höher) enthalten die Bildauswahl-APIs in der öffentliches SDK, aber es gibt Geräte mit SDK_INT unter 33 (z. B. Android 11, 12 und 12L), die auch auf die APIs zugreifen könnten, wenn sie die R-Erweiterung haben Versionen von mindestens 2.

In diesem Fall kann Ihre App durch eine Prüfung auf Erweiterungsversionen mehr Funktionen zur Verfügung. Weitere Informationen finden Sie unter SDK-Erweiterungsnamen und Konstanten finden Sie eine Liste aller Konstanten, mit denen Sie nach bestimmten SDK-Erweiterungen auf einem Gerät zu suchen.

Erweiterungen für Anzeigendienste

Ähnlich wie bei den allgemeinen SDK-Erweiterungen kann auch die AdServices API-Referenz gibt manchmal an, dass eine API Teil einer „Anzeigendienst-Erweiterung“ ist Version. Im Gegensatz zu den allgemeinen SDK-Erweiterungen verwenden Erweiterungen für Anzeigendienste die SdkExtensions.AD_SERVICES-Konstante, um zu ermitteln, 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 von Anzeigendienst-Erweiterungen und dazu, wie Sie finden Sie unter Erweiterungen für Anzeigendienste Dokumentation.

Dienstprogrammmethoden

In einigen Fällen verfügen SDK-Erweiterungen über Jetpack-Dienstprogrammmethoden, mit denen die der APIs für SDK-Erweiterungen. Sie können beispielsweise ein Jetpack- Bibliotheksfunktion auf, um nach PhotoPicker zu suchen Verfügbarkeit, das die bedingten Versionsprüfungen abstrahiert.

Support für Tools

In Android Studio Flamingo | 2022.2.1 oder höher, kann das Lint-Tool nach Probleme mit SDK-Erweiterungsversionen als Teil der NewAPI-Prüfung. Außerdem Android Studio kann automatisch die richtige Versionsüberprüfung für APIs generieren, die mit SDK-Erweiterungen eingeführt.

<ph type="x-smartling-placeholder">
</ph>
Das Lint-Tool kennzeichnet Instanzen, bei denen die Mindestanzahl von SDK-Erweiterungen Version, die zum Aufrufen einer API erforderlich ist, nicht erfüllt.

SDK-Erweiterungsnamen und -konstanten

In der folgenden Tabelle wird beschrieben, wie die verschiedenen Gruppen von SDK-Erweiterungen, die die in der API-Referenzdokumentation den Konstanten zugeordnet sind, mit denen Ihre App die API-Verfügbarkeit während der Laufzeit prüfen. Der allgemeine Satz von SDK-Erweiterungen für ist jedes öffentliche SDK den Werten Build.VERSION_CODES

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
Erweiterungen für Anzeigendienste SdkExtensions.AD_SERVICES Android 13 (API-Level 33) und höher

Mit ADB prüfen

Um zu prüfen, welche SDK-Erweiterungen mit ADB auf einem Gerät verfügbar sind, führe den folgenden Befehl:

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

In jeder Zeile wird eine SDK-Erweiterung angezeigt, die auf dem Gerät vorhanden ist, der entsprechenden Erweiterungsversion (in diesem Fall 3).