Moduł rozszerzeń pakietu SDK określa poziom rozszerzenia pakietu SDK urządzenia i zapewnia aplikacjom interfejsy API do wysyłania zapytań o poziom rozszerzenia pakietu SDK. Ten moduł można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem wersji Androida.
Rozszerzenia SDK odpowiadają za:
- określenie poziomu pakietu SDK rozszerzenia na urządzeniu;
- udostępnianie interfejsów API aplikacjom do wykonywania zapytań dotyczących poziomu 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 poszczególne 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 bootclasspath, 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 protobusta 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)
.
Wyodrębnianie ścieżek klas
Usługa derive_classpath
odczytuje i scala poszczególne pliki konfiguracji w /system/etc/classpaths/
i /apex/*/etc/classpaths/
. Każda konfiguracja przechowuje wiadomość proto w formacie binarnym proto classpaths.proto
. Dokładny algorytm scalania, który określa kolejność wpisów ścieżki klasy, jest opisany w zadaniu derive_classpath.cpp
i może się z czasem zmieniać.