Moduł SDK Extensions decyduje o poziomie SDK rozszerzenia urządzenia i udostępnia interfejsy API dla aplikacji do wysyłania zapytań do poziomu SDK rozszerzenia. Ten moduł można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem wydawniczym Androida.
SDK Extensions odpowiada za:
- Decydowanie o poziomie SDK rozszerzenia urządzenia.
- Dostarczanie interfejsów API dla aplikacji do wysyłania zapytań na poziomie SDK rozszerzenia.
- (Uruchamianie systemu Android 12) Określanie wartości zmiennych środowiskowych
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
iSYSTEMSERVERCLASSPATH
.
Format modułu
Moduł SDK Extensions ( com.android.sdkext
) jest w formacie APEX i jest dostępny dla urządzeń z systemem Android 11 lub nowszym.
Format opakowania
Moduł SDK Extensions ( com.google.android.sdkext
) jest w formacie APEX i zawiera następujące komponenty:
(Począwszy od Androida 12)
bin/derive_classpath
: Natywny plik binarny, który jest uruchamiany na wczesnym etapie procesu uruchamiania urządzenia. Odczytuje poszczególne pliki konfiguracyjne ścieżek klas z systemu i innych modułów, łączy je i definiuje definicję zmiennych środowiskowychCLASSPATH
.bin/derive_sdk
: natywny plik binarny, który jest uruchamiany na wczesnym etapie procesu rozruchu urządzenia i odczytuje metadane innych modułów w celu ustawienia właściwości systemu związanych z zestawem SDK rozszerzenia (na przykładbuild.version.extensions.r
).javalib/framework-sdkextension.jar
: ten plik znajduje się w ścieżce bootclasspath, która udostępnia interfejsy API aplikacjom w celu wysłania zapytania do poziomu zestawu SDK rozszerzenia.
Pochodny poziom SDK rozszerzenia
Program derive_sdk
odczytuje metadane przechowywane jako binarne pliki protobuf w etc/sdkinfo.binarypb
sdkinfo.binarypb wewnątrz każdego modułu APEX. Aby uzyskać szczegółowe informacje na temat struktury protobuf, zapoznaj się z plikiem protobuf
.
Odczytywanie poziomu SDK rozszerzenia
Moduł SDK Extensions udostępnia klasę java SdkExtensions
w pakiecie android.os.ext
. Użyj metody getExtensionVersion(int)
, aby odczytać wersję rozszerzenia zestawu SDK (na przykład getExtensionVersion(Build.VERSION_CODES.R)
).
Wyprowadzanie ścieżek klas
Usługa derive_classpath
odczytuje i scala poszczególne pliki konfiguracyjne w /system/etc/classpaths/
i /apex/*/etc/classpaths/
. Każda konfiguracja przechowuje komunikat protobuf z classpaths.proto
w formacie binarnym proto. Dokładny algorytm scalania, który określa kolejność wpisów ścieżki klasy, jest opisany w derive_classpath.cpp
i może się zmieniać w czasie.