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
,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
: 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 środowiskowychCLASSPATH
.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ładbuild.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/
i /apex/*/etc/classpaths/
. Każda konfiguracja przechowuje wiadomość protobuf z classpaths.proto
w 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.