Rozszerzenia SDK

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 i SYSTEMSERVERCLASSPATH .

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 środowiskowych CLASSPATH .

  • 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ład build.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.