Moduł rozszerzeń pakietu SDK określa poziom rozszerzenia pakietu SDK na urządzeniu i udostępnia aplikacjom interfejsy API do sprawdzania tego poziomu. Ten moduł można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem wydawania Androida.
Rozszerzenia pakietu SDK odpowiadają za:
- Określanie poziomu pakietu SDK rozszerzenia urządzenia.
- Udostępnianie interfejsów API, za pomocą których aplikacje mogą wysyłać zapytania o poziom pakietu SDK rozszerzenia.
- (Od Androida 12) Określanie wartości zmiennych środowiskowych
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
iSYSTEMSERVERCLASSPATH
.
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
: natywny plik binarny, który jest uruchamiany na wczesnym etapie procesu rozruchu urządzenia. Odczytuje poszczególne pliki konfiguracyjne ścieżki klas z systemu i innych modułów, scala je i definiuje definicjęCLASSPATH
zmiennych środowiskowych.bin/derive_sdk
: natywny plik binarny, który jest uruchamiany na 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 (np.build.version.extensions.r
).javalib/framework-sdkextension.jar
: ten plik znajduje się na ścieżce rozruchowej, która udostępnia aplikacjom interfejsy API do sprawdzania poziomu pakietu SDK rozszerzenia.
Określanie poziomu pakietu SDK rozszerzenia
Program derive_sdk
odczytuje metadane przechowywane jako binarne pliki protobuf w podścieżce etc/sdkinfo.binarypb
w każdym module APEX. Szczegółowe informacje o strukturze protobuf znajdziesz w pliku protobuf
.
Odczytywanie poziomu pakietu SDK rozszerzenia
Moduł rozszerzeń SDK udostępnia klasę JavaSdkExtensions
w pakiecie android.os.ext
. Użyj metody getExtensionVersion(int)
, aby odczytać wersję rozszerzenia pakietu SDK (np. getExtensionVersion(Build.VERSION_CODES.R)
).
Pobieranie ś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 wiadomość protobuf z classpaths.proto
w binarnym formacie proto. Dokładny algorytm scalania, który określa kolejność wpisów ścieżki klas, jest opisany w derive_classpath.cpp
i może się z czasem zmieniać.