Модуль 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
. Для чтения версии расширения SDK используйте метод getExtensionVersion(int)
(например, getExtensionVersion(Build.VERSION_CODES.R)
).
Вывести пути к классам
Служба derive_classpath
считывает и объединяет отдельные файлы конфигурации в /system/etc/classpaths/
и /apex/*/etc/classpaths/
. Каждый файл конфигурации сохраняет сообщение protobuf из classpaths.proto
в двоичном формате proto. Точный алгоритм слияния, определяющий порядок записей classpath, описан в derive_classpath.cpp
и может со временем измениться.