Rozszerzenia SDK

Rozszerzenia pakietu SDK wykorzystują modułowe komponenty systemu, aby dodawać interfejsy API do publicznego pakietu SDK dla niektórych wcześniej opublikowanych poziomów interfejsu API. Te interfejsy API są dostarczane na urządzenia, gdy użytkownicy otrzymują aktualizacje modułów w ramach aktualizacji systemu Google Play. Deweloperzy aplikacji mogą używać tych interfejsów API w swoich aplikacjach, aby udostępniać dodatkowe funkcje, które nie były pierwotnie dostępne w pakiecie SDK dla tych starszych wersji Androida.

Obsługa wersji interfejsu API

Od Androida 11 (poziom API 30) urządzenia z Androidem zawierają zestaw rozszerzeń pakietu SDK. Gdy dodawane są nowe interfejsy API, są one uwzględniane na poziomie interfejsu API, ale mogą też być uwzględniane w rozszerzeniu pakietu SDK w określonej wersji. Na przykład interfejs API ACTION_PICK_IMAGES selektora zdjęć został dodany do publicznego pakietu SDK w Androidzie 13 (poziom API 33), ale jest też dostępny w rozszerzeniach pakietu SDK od wersji 2 rozszerzeń R. Nazwy rozszerzeń pakietu SDK odpowiadają stałej całkowitej – stałej z Build.VERSION_CODES lub stałej zdefiniowanej w klasie SdkExtensions (np. SdkExtensions.AD_SERVICES).

Określanie, których rozszerzeń pakietu SDK chcesz używać

Zanim zaczniesz korzystać z interfejsów API rozszerzenia pakietu SDK, musisz najpierw określić, które pakiety SDK zawierają interfejsy API obsługujące przypadki użycia Twojej aplikacji.

Na stronach dokumentacji API rozszerzenia pakietu SDK podana jest najwcześniejsza wersja rozszerzenia pakietu SDK, której aplikacja może używać do uzyskiwania dostępu do interfejsu API. Jeśli w dokumentacji podano też wersję platformy Android (odniesienie do poziomu API), to ten interfejs API jest też dostępny na wszystkich urządzeniach z tą wersją Androida lub nowszą.

Na przykład ACTION_PICK_IMAGES jest ogólnie dostępny w publicznym pakiecie SDK od Androida 13 (API na poziomie 33), ale jest też dostępny na urządzeniach z Androidem 11 (API na poziomie 30), o ile urządzenie ma co najmniej R Extensions w wersji 2:

Interfejsy API, które są częścią rozszerzeń pakietu SDK, wyświetlają swoją wersję rozszerzenia w dokumentacji referencyjnej interfejsu API.

Aby korzystać z tego interfejsu API, musisz skompilować aplikację z użyciem pakietu SDK na poziomie API 33 lub wyższym albo na poziomie rozszerzenia 2 lub wyższym.

Aby użyć pakietu SDK rozszerzenia:

  1. Sprawdź minimalną wersję rozszerzeń, której potrzebujesz, w dokumentacji funkcji i dokumentacji interfejsu API, z których chcesz korzystać.
  2. Po określeniu wymaganej wersji rozszerzenia dla zestawu funkcji otwórz narzędzie SDK Manager w Androidzie Studio.
  3. Wybierz wpis Android SDK Platform z odpowiednią wersją rozszerzenia (lub wyższą, ponieważ interfejsy API są dodatkowe). Na przykład: Android SDK Platform 33, Extension Level 4.
  4. Zadeklaruj te wartości w pliku build.gradle.kts lub build.gradle aplikacji:

    Dynamiczny

    android {
        compileSdk 33
        compileSdkExtension 4
        ...
    }

    Kotlin

    android {
        compileSdk = 33
        compileSdkExtension = 4
        ...
    }

Sprawdzanie, czy rozszerzenia pakietu SDK są dostępne

Aplikacja może sprawdzać, które wersje rozszerzenia pakietu SDK są dostępne w czasie działania, a podczas tworzenia możesz wyszukiwać wersje rozszerzenia za pomocą poleceń Android Debug Bridge (adb), jak opisano w kolejnych sekcjach.

Sprawdzanie w czasie działania

Aplikacja może w czasie działania sprawdzić, czy rozszerzenia pakietu SDK są dostępne dla danej wersji platformy, korzystając z metody getExtensionVersion(). Na przykład ten kod sprawdzi, czy jest dostępna wersja 2 lub nowsza rozszerzenia pakietu SDK Androida 11 (interfejs API na poziomie 30):

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;
}

Jest to podobne do sprawdzania na podstawie 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;
}

Ta SDK_INT weryfikacja jest nadal bezpieczna i prawidłowa, ale isPhotoPickerAvailable może zwracać wartość false na niektórych urządzeniach, nawet jeśli interfejs API rozszerzenia jest dostępny. W rezultacie SDK_INT weryfikacja nie jest optymalna, a sprawdzanie wersji rozszerzenia jest lepszym sposobem na sprawdzenie dostępności interfejsu API. Wszystkie urządzenia z wartością SDK_INT większą lub równą 33 (Android 13 lub nowszy) mają interfejsy API selektora zdjęć w publicznym pakiecie SDK, ale istnieją urządzenia z wartością SDK_INT mniejszą niż 33 (np. Android 11, 12 i 12L), które również mogą uzyskać dostęp do interfejsów API, jeśli mają wersje rozszerzenia R co najmniej 2.

W takim przypadku sprawdzenie wersji rozszerzenia może pomóc aplikacji w udostępnianiu dodatkowych funkcji większej liczbie użytkowników. Listę wszystkich stałych, których możesz użyć do sprawdzania, czy na urządzeniu są dostępne określone rozszerzenia SDK, znajdziesz w sekcji Nazwy i stałe rozszerzeń SDK.

Rozszerzenia usług reklamowych

Podobnie jak w przypadku ogólnego zestawu rozszerzeń pakietu SDK, AdServicesdokumentacja interfejsu API czasami wskazuje, że interfejs API jest częścią wersji „Rozszerzenia usług reklamowych”. W przeciwieństwie do ogólnych rozszerzeń pakietu SDK rozszerzenia usług reklamowych używają stałej SdkExtensions.AD_SERVICES do określania wersji na urządzeniu:

Kotlin

fun isAdServicesAvailable(): Boolean {
    return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4
}

Java

public static final boolean isAdServicesAvailable() {
    return SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 4;
}

Więcej informacji o funkcjach rozszerzeń usług reklamowych i o tym, jak zacząć z nich korzystać, znajdziesz w dokumentacji rozszerzeń usług reklamowych.

Metody narzędziowe

W niektórych przypadkach rozszerzenia pakietu SDK mają metody narzędziowe Jetpack do sprawdzania dostępności interfejsów API rozszerzeń pakietu SDK. Możesz na przykład użyć funkcji biblioteki Jetpack, aby sprawdzić dostępność selektora zdjęć, która abstrahuje od warunkowych sprawdzeń wersji.

Pomoc dotycząca narzędzi

W Androidzie Studio Flamingo | 2022.2.1 lub nowszym narzędzie lint może skanować pod kątem problemów z wersjami rozszerzeń pakietu SDK w ramach sprawdzania NewAPI. Dodatkowo Android Studio może automatycznie generować prawidłowe sprawdzanie wersji interfejsów API uruchamianych za pomocą rozszerzeń pakietu SDK.

Narzędzie lint oznacza przypadki, w których nie została spełniona minimalna wersja rozszerzeń pakietu SDK wymagana do wywołania interfejsu API.

Nazwy i stałe rozszerzeń pakietu SDK

W tabeli poniżej znajdziesz informacje o tym, jak różne zestawy rozszerzeń pakietu SDK wymienione w dokumentacji API są powiązane ze stałymi, których aplikacja może używać do sprawdzania dostępności interfejsu API w czasie działania. Ogólny zestaw rozszerzeń pakietu SDK dla każdego publicznego pakietu SDK jest mapowany na wartości Build.VERSION_CODES.

Nazwa rozszerzenia pakietu SDK Stała Urządzenia objęte promocją
Rozszerzenia R VERSION_CODES.R Android 11 (poziom 30 interfejsu API) lub nowszy
Rozszerzenia S VERSION_CODES.S Android 12 (poziom 31 interfejsu API) lub nowszy
T Extensions VERSION_CODES.TIRAMISU Android 13 (poziom 33 interfejsu API) lub nowszy
U Extensions VERSION_CODES.UPSIDE_DOWN_CAKE Android 14 (poziom 34 interfejsu API) lub nowszy
Rozszerzenia V VERSION_CODES.VANILLA_ICE_CREAM Android 15 (poziom 35 interfejsu API) lub nowszy
B Rozszerzenia VERSION_CODES.BAKLAVA Android 16 (poziom 36 interfejsu API) lub nowszy
Rozszerzenia C VERSION_CODES.CINNAMON_BUN Android 17 (poziom 37 interfejsu API) lub nowszy
Rozszerzenia usług reklamowych SdkExtensions.AD_SERVICES Android 13 (poziom 33 interfejsu API) lub nowszy

Sprawdzanie za pomocą narzędzia adb

Aby sprawdzić, które rozszerzenia pakietu SDK są dostępne na urządzeniu za pomocą adb, uruchom to polecenie:

adb shell getprop | grep build.version.extensions

Po uruchomieniu polecenia zobaczysz dane wyjściowe podobne do tych:

[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

Każdy wiersz zawiera rozszerzenie pakietu SDK, które jest obecne na urządzeniu, oraz jego wersję (w tym przypadku 3).