Rozszerzenia SDK

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Moduł rozszerzeń SDK decyduje o poziomie rozszerzenia SDK urządzenia i udostępnia interfejsy API dla aplikacji do wysyłania zapytań o poziom rozszerzenia SDK. Ten moduł można aktualizować, co oznacza, że ​​może otrzymywać aktualizacje funkcji poza normalnym cyklem wydawniczym Androida.

Rozszerzenia SDK są odpowiedzialne za:

  • Decydowanie o poziomie rozszerzenia SDK urządzenia.
  • Udostępnianie aplikacjom interfejsów API do wysyłania zapytań o poziom rozszerzenia SDK.
  • (Uruchamianie systemu Android 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 ) jest w formacie APEX i zawiera następujące komponenty:

  • (Począwszy od systemu Android 12) bin/derive_classpath : natywny plik binarny uruchamiany na początku procesu rozruchu urządzenia. Odczytuje poszczególne ścieżki klas, konfiguruje pliki z systemu i innych modułów, łączy je i definiuje definicję zmiennych środowiskowych CLASSPATH .

  • bin/derive_sdk : natywny plik binarny uruchamiany na początku procesu rozruchu urządzenia i odczytujący metadane innych modułów w celu ustawienia właściwości systemu związanych z rozszerzeniem SDK (na przykład build.version.extensions.r ).

  • javalib/framework-sdkextension.jar : ten plik znajduje się w ścieżce bootclass, która udostępnia aplikacjom interfejsy API w celu zapytania o poziom rozszerzenia SDK.

Wyprowadzanie poziomu SDK rozszerzenia

derive_sdk odczytuje metadane przechowywane jako binarne pliki protobuf w etc/sdkinfo.binarypb w każdym module APEX. Szczegółowe informacje na temat struktury protobuf można znaleźć w pliku protobuf .

Odczytywanie poziomu 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 scala poszczególne pliki konfiguracyjne w /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, jest opisany w derive_classpath.cpp i może się zmieniać w czasie.