Rozszerzenia SDK

Moduł rozszerzeń pakietu SDK określa poziom rozszerzenia pakietu SDK na urządzeniu i zapewnia aplikacjom interfejsy API do wykonywania zapytań dotyczących poziomu rozszerzenia pakietu SDK. Ten moduł można aktualizować, co oznacza, że można aktualizować jego funkcje poza normalnym cyklem publikacji Androida.

Rozszerzenia pakietu SDK odpowiadają za:

  • określenie poziomu pakietu SDK rozszerzenia na urządzeniu;
  • Udostępnianie interfejsów API aplikacjom do wykonywania zapytań o poziom pakietu SDK rozszerzenia.
  • (od Androida 12) określanie wartości zmiennych środowiskowych BOOTCLASSPATH, DEX2OATBOOTCLASSPATHSYSTEMSERVERCLASSPATH.

Format modułu

Moduł rozszerzeń pakietu SDK (com.android.sdkext) jest w formacie APEX i jest dostępny na urządzeniach z Androidem 11 lub nowszym.

Format pakietu

Moduł rozszerzeń pakietu SDK (com.google.android.sdkext) jest w formacie APEX i zawiera te komponenty:

  • (od Androida 12) bin/derive_classpath: plik binarny natywny, który jest uruchamiany we wczesnym etapie procesu uruchamiania urządzenia. Czyta pliki konfiguracji ścieżki dostępu z systemu i innych modułów, łączy je i określa definicję zmiennych środowiskowych CLASSPATH.

  • bin/derive_sdk: natywny plik binarny, który jest uruchamiany we wczesnym etapie procesu uruchamiania urządzenia i odczytuje metadane innych modułów, aby ustawić właściwości systemu związane z pakietem SDK rozszerzenia (na przykład build.version.extensions.r).

  • javalib/framework-sdkextension.jar: ten plik znajduje się na ścieżce ładowania, która udostępnia interfejsy API aplikacjom do wykonywania zapytań na poziomie pakietu SDK rozszerzenia.

Wyznacz poziom rozszerzenia w pakiecie SDK

Program derive_sdk odczytuje metadane zapisane jako pliki binarne protobuf w ścieżce podrzędnej etc/sdkinfo.binarypb w każdym module APEX. Szczegółowe informacje o strukturze prototypu znajdziesz w pliku protobuf.

Odczyt na poziomie rozszerzenia w pakiecie SDK

Moduł rozszerzeń pakietu SDK udostępnia klasę Java SdkExtensions w pakiecie android.os.ext. Aby odczytać wersję rozszerzenia pakietu SDK (np. getExtensionVersion(Build.VERSION_CODES.R)), użyj metody getExtensionVersion(int).

Tworzenie ścieżek klas

Usługa derive_classpath odczytuje i złączy poszczególne pliki konfiguracji w folderach /system/etc/classpaths//apex/*/etc/classpaths/. Każda konfiguracja przechowuje wiadomość protobuf z classpaths.protow formacie binarnym proto. Dokładny algorytm scalania, który określa kolejność wpisów w ścieżce klas, opisano w artykule derive_classpath.cpp. Może on ulec zmianie z czasem.