Модуль SDK Extensions определяет уровень расширения SDK устройства и предоставляет приложениям API для запроса уровня расширения SDK. Этот модуль является обновляемым, то есть он может получать обновления функциональности вне обычного цикла выпуска Android.
SDK Extensions отвечает за:
- Определение уровня расширения SDK устройства.
- Предоставление API для приложений для запроса уровня SDK расширения.
- (Начиная с Android 12) Определение значений переменных среды
BOOTCLASSPATH
,DEX2OATBOOTCLASSPATH
иSYSTEMSERVERCLASSPATH
.
Формат модуля
Модуль SDK Extensions ( com.android.sdkext
) имеет формат APEX и доступен для устройств под управлением Android 11 или более поздней версии.
Формат упаковки
Модуль расширений SDK ( com.google.android.sdkext
) имеет формат APEX и содержит следующие компоненты:
(Начиная с Android 12)
bin/derive_classpath
: собственный двоичный файл, который запускается на ранних этапах процесса загрузки устройства. Он считывает отдельные файлы конфигурации пути к классам из системы и других модулей, объединяет их и определяет определение переменных средыCLASSPATH
.bin/derive_sdk
: собственный двоичный файл, который запускается на ранних этапах процесса загрузки устройства и считывает метаданные других модулей для установки свойств системы, связанных с SDK расширения (например,build.version.extensions.r
).javalib/framework-sdkextension.jar
: этот файл находится в пути к классу загрузки, который предоставляет приложениям API-интерфейсы для запроса уровня SDK расширения.
Получить уровень SDK расширения
Программа 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. Точный алгоритм слияния, определяющий порядок записей пути к классам, описан в файле derive_classpath.cpp
и может меняться со временем.