Матрицы совместимости

В этом разделе описаны фреймворк и матрицы совместимости устройств, а также схема матрицы совместимости. Правила соответствия описаны в разделе Правила соответствия.

Матрица совместимости фреймворков (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_MAX
  • MAJOR.MINOR (эквивалентно MAJOR.MINOR-MINOR)

Для HAL-интерфейсов AIDL не должен присутствовать на устройствах с Android 11 и более ранними версиями ОС. Не обязательно на устройствах с более поздними версиями. Если формат указан, он должен быть одним из следующих:
  • VERSION_MIN-VERSION_MAX
  • VERSION (эквивалентно 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. Возможные значения:
  • string
  • int
  • range
  • tristate
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.