Od 27 marca 2025 r. zalecamy używanie android-latest-release
zamiast aosp-main
do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Rozszerzenia SDK
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
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ń na poziomie pakietu SDK rozszerzenia.
- (od Androida 12) określanie wartości zmiennych środowiskowych
BOOTCLASSPATH
, DEX2OATBOOTCLASSPATH
i SYSTEMSERVERCLASSPATH
.
Moduł rozszerzeń pakietu SDK (com.android.sdkext
) jest w formacie APEX i jest dostępny na urządzeniach z Androidem 11 lub nowszym.
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 środowiskowych CLASSPATH
.
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ład build.version.extensions.r
).
javalib/framework-sdkextension.jar
: ten plik znajduje się na ścieżce ładowania i ujawnia interfejsy API aplikacjom, które wysyłają zapytania do 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)
.
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.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 2025-07-27 UTC."],[],[],null,["# SDK Extensions\n\nThe SDK Extensions module decides the extension SDK level of the device and\nprovides APIs for apps to query the extension SDK level. This module is\nupdatable, meaning it can receive updates to functionality outside of the normal\nAndroid release cycle.\n\nSDK Extensions is responsible for:\n\n- Deciding the extension SDK level of the device.\n- Providing APIs for apps to query the extension SDK level.\n- (Starting Android 12) Determining the values for the `BOOTCLASSPATH`, `DEX2OATBOOTCLASSPATH`, and `SYSTEMSERVERCLASSPATH` environment variables.\n\nModule format\n-------------\n\nThe SDK Extensions module (`com.android.sdkext`) is in\n[APEX](/docs/core/ota/apex) format and is available for devices\nrunning Android 11 or higher.\n\nPackage format\n--------------\n\nThe SDK Extensions module (`com.google.android.sdkext`) is in\n[APEX](/devices/tech/ota/apex) format and\ncontains the following components:\n\n- (Starting Android 12) `bin/derive_classpath`: A\n native binary that runs early in the device boot\n process. It reads individual classpath configs files from the system and\n other modules, merges them, and defines the definition of `CLASSPATH`\n environment variables.\n\n- `bin/derive_sdk`: A native binary that runs early in the device boot process\n and reads metadata of other modules to set system properties related to the\n extension SDK (for example, `build.version.extensions.r`).\n\n- `javalib/framework-sdkextension.jar`: This file is on the bootclasspath that\n exposes APIs to apps to query the extension SDK level.\n\nDerive extension SDK level\n--------------------------\n\nThe `derive_sdk` program reads metadata stored as binary protobuf files in the\n`etc/sdkinfo.binarypb` subpath inside each APEX module. For details on protobuf\nstructure, refer to the\n[`protobuf`](https://android.googlesource.com/platform/external/protobuf.git)\nfile.\n\nRead extension SDK level\n------------------------\n\nThe SDK Extensions module exposes an\n[`SdkExtensions`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/)\njava class in the `android.os.ext` package. Use the `getExtensionVersion(int)`\nmethod to read the version of an SDK extension (for example,\n`getExtensionVersion(Build.VERSION_CODES.R)`).\n\nDerive classpaths\n-----------------\n\nThe `derive_classpath` service reads and merges individual config files in\n`/system/etc/classpaths/` and `/apex/*/etc/classpaths/`. Each config stores\nprotobuf message from [`classpaths.proto`](https://android.googlesource.com/platform/packages/modules/common/+/android16-release/proto/classpaths.proto)\nin a proto binary format. The exact merging algorithm that determines the order\nof the classpath entries is described in\n[`derive_classpath.cpp`](https://android.googlesource.com/platform/packages/modules/SdkExtensions/+/android16-release/derive_classpath/derive_classpath.cpp)\nand might change over time."]]