Модуль 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 и может со временем измениться.