Moduł rozszerzeń SDK decyduje o poziomie rozszerzenia SDK urządzenia i udostępnia interfejsy API dla aplikacji, które mogą wysyłać zapytania o poziom rozszerzenia SDK. Moduł ten można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcjonalności poza normalnym cyklem wydawniczym Androida.
SDK Extensions odpowiada za:
- Decydowanie o poziomie rozszerzenia SDK urządzenia.
- Udostępnianie interfejsów API dla aplikacji do wysyłania zapytań na poziomie pakietu SDK rozszerzenia.
- (Począwszy od Androida 12) Określanie wartości zmiennych środowiskowych
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
iSYSTEMSERVERCLASSPATH
.
Format modułu
Moduł rozszerzeń SDK ( com.android.sdkext
) jest w formacie APEX i jest dostępny dla urządzeń z systemem Android 11 lub nowszym.
Format pakietu
Moduł rozszerzeń SDK ( com.google.android.sdkext
) ma format APEX i zawiera następujące komponenty:
(Począwszy od Androida 12)
bin/derive_classpath
: Natywny plik binarny uruchamiany na początku procesu uruchamiania urządzenia. Odczytuje poszczególne pliki konfiguracyjne ścieżki klas z systemu i innych modułów, łączy je i definiuje definicję zmiennych środowiskowychCLASSPATH
.bin/derive_sdk
: Natywny plik binarny, który działa na początku procesu uruchamiania urządzenia i odczytuje metadane innych modułów w celu ustawienia właściwości systemu związanych z pakietem SDK rozszerzenia (na przykładbuild.version.extensions.r
).javalib/framework-sdkextension.jar
: ten plik znajduje się w ścieżce klasy rozruchowej, która udostępnia interfejsy API aplikacjom w celu wysyłania zapytań na poziomie zestawu SDK rozszerzenia.
Poziom pakietu SDK rozszerzenia pochodnego
Program derive_sdk
odczytuje metadane przechowywane jako binarne pliki protobuf w podścieżce etc/sdkinfo.binarypb
wewnątrz każdego modułu APEX. Szczegółowe informacje na temat struktury protobuf można znaleźć w pliku protobuf
.
Odczyt poziomu pakietu SDK rozszerzenia
Moduł SDK Extensions udostępnia klasę Java SdkExtensions
w pakiecie android.os.ext
. Użyj metody getExtensionVersion(int)
, aby odczytać wersję rozszerzenia SDK (na przykład getExtensionVersion(Build.VERSION_CODES.R)
).
Wyprowadzanie ścieżek klas
Usługa derive_classpath
odczytuje i łączy poszczególne pliki konfiguracyjne w /system/etc/classpaths/
i /apex/*/etc/classpaths/
. Każda konfiguracja przechowuje wiadomość protobuf z classpaths.proto
w proto formacie binarnym. Dokładny algorytm scalania, który określa kolejność wpisów ścieżki klas, opisano w derive_classpath.cpp
i może on z czasem ulegać zmianom.