В этом разделе описаны фреймворк и матрицы совместимости устройств, а также схема матрицы совместимости. Правила соответствия описаны в разделе Правила соответствия.
Матрица совместимости фреймворков (FCM)
Матрица совместимости фреймворка (FCM) описывает требования фреймворка к устройству, на котором он работает. Матрица совместимости фреймворка состоит из матрицы совместимости системы, матрицы совместимости продукта и матрицы совместимости system_ext. Требования FCM должны быть удовлетворены манифестом устройства (требования, применяемые во время сборки, выполнения и в VTS).
FCM system_ext и FCM product дополняют FCM устройства (установленный в системном разделе).
- Матрица FCM устройства должна отражать требования модулей в системном разделе.
- Файл system_ext FCM должен отражать требования модулей в разделе system_ext.
- В FCM товара должны быть отражены требования к модулям в разделе товара.
Все FCM должны соответствовать изменениям, внесенным производителем в фреймворк в разделах system, product и system_ext. Например, если приложение, установленное в разделе продукта, использует расширение поставщика интерфейса HAL, требование к интерфейсу HAL должно быть объявлено в файле FCM продукта.
Пример файла матрицы совместимости систем:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework" level="3"> <hal> <name>android.hardware.camera</name> <version>1.0</version> <version>3.1-4</version> <interface> <name>ICameraProvider</name> <instance>default</instance> <regex-instance>[a-z_]+/[0-9]+</regex-instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <version>1.0</version> <interface> <name>INfc</name> <instance>default</instance> </interface> </hal> <hal optional="true"> <name>android.hardware.graphics.composer</name> <version>2.1</version> <interface> <name>IComposer</name> <instance>default</instance> </interface> </hal> <hal format="aidl" optional="true"> <name>android.hardware.light</name> <version>1-2</version> <interface> <name>ILights</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>GL</name> <version>1.1</version> <version>3.0</version> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <kernel version="3.18.51"> <!-- common configs --> </kernel> <kernel version="3.18.51"> <!-- arm specific configs --> <condition> <config> <key>CONFIG_ARM</key> <value type="tristate">y</value> </config> <condition> <config> <key>CONFIG_A</key> <value type="string"></value> </config> <config> <key>CONFIG_B</key> <value type="tristate">y</value> </config> </kernel> <kernel version="4.1.22"> <!-- common configs --> <config> <key>CONFIG_A</key> <value type="string">foo</value> </config> <config> <key>CONFIG_B2</key> <value type="int">1024</value> </config> </kernel> <sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy> <avb> <vbmeta-version>2.1</vbmeta-version> </avb> <xmlfile format="dtd"> <name>media_profile</name> <version>1.0</version> <path>/system/etc/media_profile_V1_0.dtd</path> </xmlfile> </compatibility-matrix>
Подробнее о жизненном цикле FCM…
Матрица совместимости продуктов
FCM-файл продукта – это файл матрицы совместимости фреймворка в разделе продукта. Объект VINTF объединяет FCM продукта с FCM в разделах system и system_ext во время выполнения.
Пример файла FCM для товаров:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework"> <hal> <name>vendor.foo.camera</name> <version>1.0</version> <interface> <name>IBetterCamera</name> <instance>default</instance> </interface> </hal> </compatibility-matrix>
Матрица совместимости system_ext
Файл FCM system_ext – это матрица совместимости фреймворка, расположенная в разделе system_ext. Объект VINTF во время выполнения объединяет FCM из system_ext с FCM из разделов system и product. Пример файла FCM system_ext можно найти в матрице совместимости продуктов.
Матрица совместимости устройств (DCM)
Матрица совместимости устройств описывает набор требований, которые устройство предъявляет к фреймворку (требования, действующие при запуске и обновлении по воздуху).
Пример файла DCM:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="device"> <hal> <name>android.hidl.manager</name> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <version>1.0</version> <interface> <name>IMemory</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.allocator</name> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.framework.sensor</name> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </compatibility-matrix>
Схема матрицы совместимости
В этом разделе описано значение этих тегов XML. Некоторые обязательные теги могут отсутствовать в исходном файле в дереве исходного кода Android и записываться assemble_vintf во время сборки. Теги, помеченные как "Обязательные", должны присутствовать в соответствующих файлах на устройстве.
?xml- Необязательный параметр. Он предоставляет информацию только для парсера XML.
compatibility-matrix.version- Обязательный параметр. Метаверсия этой матрицы совместимости. Описывает элементы, ожидаемые в матрице совместимости. Не связано с версией XML.
compatibility-matrix.type- Обязательный параметр. Тип этой матрицы совместимости:
"device"– таблица совместимости устройств."framework": матрица совместимости фреймворков.
manifest.level- Требуется для матрицы совместимости фреймворков. В Android 12 и более поздних версий: разрешено в файлах матрицы совместимости фреймворка в разделах product и system_ext.
Указывает версию матрицы совместимости фреймворка (FCM) для этого файла. Не указывайте это в матрице совместимости фреймворка с устройством (например, в файле
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE). compatibility-matrix.hal- Необязательный элемент, может повторяться. Содержит список HAL (HIDL или нативных), которые должны присутствовать в матрице совместимости (фреймворке или устройстве). Записи HAL различаются элементом
<name>. Записей HAL с одним и тем же названием может быть несколько (условие "и"). compatibility-matrix.hal.format- Необязательный параметр. Возможные значения:
"hidl": HAL HIDL. Это значение используется по умолчанию."aidl": AIDL HALs. Действительно только для метаверсии матрицы совместимости 2.0."native"– собственные HAL.
compatibility-matrix.hal.optional(Android 15 или более ранней версии)- Атрибут необязательный, по умолчанию имеет значение false. Указывает, является ли этот HAL необязательным для владельца матрицы совместимости (фреймворка или устройства). Если запись
<hal>помечена как необязательная, это означает, что владелец может работать с этим HAL, если он присутствует, но не требует его наличия. - Внимание! Этот атрибут устарел и не действует в Android 15 и более поздних версиях. Если требуется установить какие-либо HAL, это требование должно быть принудительно применено в тестах.
compatibility-matrix.hal.name- Обязательный параметр. Полное название пакета этого HAL. Примеры:
android.hardware.camera(HIDL или AIDL HAL)GLES(нативный HAL, требуется только имя)
compatibility-matrix.hal.version-
Список диапазонов версий (см. Соответствие HAL), определяющий, какие версии ожидает владелец матрицы совместимости (фреймворк или устройство).
Для HIDL и нативных HAL требуется указать хотя бы один элемент. Можно повторять без дубликатов. Формат может быть одним из следующих:MAJOR.MINOR_MIN-MINOR_MAXMAJOR.MINOR(эквивалентноMAJOR.MINOR-MINOR)
Для HAL-интерфейсов AIDL не должен присутствовать на устройствах с Android 11 и более ранними версиями ОС. Не обязательно на устройствах с более поздними версиями. Если формат указан, он должен быть одним из следующих:VERSION_MIN-VERSION_MAXVERSION(эквивалентноVERSION-VERSION)
1. compatibility-matrix.hal.interface- Необязательный элемент, может повторяться. Список необходимых интерфейсов HAL.
compatibility-matrix.hal.interface.name- Обязательный параметр. Название интерфейса.
compatibility-matrix.hal.interface.instance- Необязательный элемент, может повторяться. Список обязательных экземпляров этого интерфейса.
compatibility-matrix.hal.interface.regex-instance- Необязательный, может повторяться. Список обязательных шаблонов названий экземпляров в этом интерфейсе. Используйте формат Расширенное регулярное выражение.
compatibility-matrix.kernel- Необязательный, может повторяться. Укажите список конфигураций ядра, которые фреймворк требует для каждой версии ядра.
Несколько элементов<kernel>с одинаковым значением<version>могут существовать, чтобы обозначить логическую связь "и". Каждый<kernel>– это фрагмент требований, которые включаются только при выполнении<conditions>. compatibility-matrix.kernel.version- Обязательный параметр. Версия ядра. Формат:
VERSION.MAJOR_REVISION.MINOR_REVISION. Версия и основная редакция должны точно совпадать. Промежуточная версия определяет минимальную версию ядра с долгосрочной поддержкой (LTS), которая требуется для фреймворка. compatibility-matrix.kernel.condition- Необязательный параметр. Не должно существовать в течение первых
<kernel>каждой версии. Указывает список условий. Когда условия выполняются, требования, указанные в этом фрагменте<kernel>, включаются. compatibility-matrix.kernel.config- Необязательный элемент, может повторяться. Список элементов
CONFIG, которые должны соответствовать этой версии ядра. Каждый элементCONFIGпредставляет собой пару "ключ-значение". Элементы конфигурации различаются по ключу. compatibility-matrix.kernel.config.key- Обязательный параметр. Название ключа для элемента
CONFIG. Начинается сCONFIG_. compatibility-matrix.kernel.config.value- Обязательный параметр. Значение элемента
CONFIG. Формат зависит от типа:string. Цитаты опущены.int. Поддерживаются десятичные и шестнадцатеричные значения (должны начинаться с0xили0X)). Интерпретируется как 64-битовое целое число. При переполнении происходит усечение. (Парсер принимает значения от -264 + 1 до 264 - 1, 65-й бит усекается; подробности можно найти на странице руководства strtoull.)range. Формат:[int]-[int], например10-20. Допускаются шестнадцатеричные значения, которые должны начинаться с0xили0X. Две границы должны быть беззнаковыми 64-битными целыми числами.tristate. Допустимые значения:y,mиn.
compatibility-matrix.kernel.config.value.type- Обязательный параметр. Тип значения элемента
CONFIG. Возможные значения:stringintrangetristate
compatibility-matrix.sepolicy- Обязательный параметр. Содержит все записи, связанные с sepolicy. Используется только в матрице совместимости фреймворков.
compatibility-matrix.sepolicy.sepolicy-version- Обязательный, может повторяться. Описывает требования к версии sepolicy.
Соответствует
manifest.sepolicy.version. Каждый экземпляр элемента определяет диапазон версий sepolicy. compatibility-matrix.sepolicy.kernel-sepolicy-version- Обязательный параметр. Указывает
policydbверсию, с которой работает фреймворк. compatibility-matrix.avb.vbmeta-version- Необязательный элемент. Используется только матрицей совместимости фреймворка. Объявляет версию AVB, которая использовалась для подписи
system.img. Устарело в Android 10. compatibility-matrix.vendor-ndk- Необязательный атрибут, используется только в таблице совместимости устройств. Объявляет требование к снимку VNDK. Если его нет, то к образу системы не предъявляются требования VNDK.
compatibility-matrix.vendor-ndk.version- Обязательный параметр. Положительное целое число, которое объявляет версию VNDK, необходимую для образа поставщика.
compatibility-matrix.vendor-ndk.library- Необязательный элемент, можно повторять. Объявляет набор библиотек VNDK, необходимых для образа поставщика. Семантика такая же, как у
manifest.vendor-ndk.library. compatibility-matrix.system-sdk.version- Необязательный элемент, может повторяться. Используется только матрицей совместимости устройств. Заявляет требования к версиям системного SDK для приложений поставщиков. Если он отсутствует, то к образу системы не предъявляется никаких требований, связанных с System SDK.