Модуль SDK Extensions определяет уровень SDK расширения устройства и предоставляет API для приложений, чтобы запрашивать уровень SDK расширения. Этот модуль является обновляемым, то есть он может получать обновления функциональности вне обычного цикла выпуска Android.
Расширения SDK отвечают за:
- Определение уровня SDK расширения устройства.
- Предоставление API-интерфейсов для приложений для запроса уровня SDK расширения.
- (Начиная с Android 12) Определение значений переменных среды
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
иSYSTEMSERVERCLASSPATH
.
Формат модуля
Модуль SDK Extensions ( com.android.sdkext
) имеет формат APEX и доступен для устройств под управлением Android 11 и выше.
Формат упаковки
Модуль SDK Extensions ( com.google.android.sdkext
) имеет формат APEX и содержит следующие компоненты:
(Начиная с Android 12)
bin/derive_classpath
: собственный двоичный файл, который запускается на ранней стадии процесса загрузки устройства. Он считывает отдельные файлы конфигурации classpath из системы и других модулей, объединяет их и определяет определение переменных средыCLASSPATH
.bin/derive_sdk
: собственный двоичный файл, который запускается на ранней стадии процесса загрузки устройства и считывает метаданные других модулей для установки системных свойств, связанных с расширением SDK (например,build.version.extensions.r
).javalib/framework-sdkextension.jar
: этот файл находится в bootclasspath, который предоставляет API-интерфейсы приложениям для запроса уровня SDK расширения.
Уровень SDK расширения Drivе
Программа derive_sdk
считывает метаданные, хранящиеся в виде двоичных файлов protobuf в подпути etc/sdkinfo.binarypb
внутри каждого модуля APEX. Подробную информацию о структуре protobuf см. в файле protobuf
.
Уровень SDK расширения чтения
Модуль SDK Extensions предоставляет класс java SdkExtensions
в пакете android.os.ext
. Используйте метод getExtensionVersion(int)
для чтения версии расширения SDK (например, getExtensionVersion(Build.VERSION_CODES.R)
).
Вывести пути к классам
Служба derive_classpath
считывает и объединяет отдельные файлы конфигурации в /system/etc/classpaths/
и /apex/*/etc/classpaths/
. Каждая конфигурация сохраняет сообщение protobuf из classpaths.proto
в двоичном формате proto. Точный алгоритм слияния, который определяет порядок записей classpath, описан в derive_classpath.cpp
и может со временем меняться.