Модуль SDK Extensions определяет уровень SDK расширений устройства и предоставляет API для приложений, позволяющие запрашивать этот уровень. Этот модуль обновляемый, то есть он может получать обновления функциональности вне обычного цикла выпуска 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 из системы и других модулей, объединяет их и определяет переменные средыCLASSPATH.bin/derive_sdk: Собственный исполняемый файл, который запускается на ранней стадии загрузки устройства и считывает метаданные других модулей для установки системных свойств, связанных с SDK расширения (например,build.version.extensions.r).javalib/framework-sdkextension.jar: Этот файл находится в bootclasspath и предоставляет приложениям 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 binary. Точный алгоритм объединения, определяющий порядок записей classpath, описан в derive_classpath.cpp и может меняться со временем.