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

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

Матрица совместимости фреймворка (FCM)

Матрица совместимости фреймворка (FCM) описывает требования фреймворка к устройству, на котором он работает. Матрица совместимости платформы состоит из матрицы совместимости системы, матрицы совместимости продуктов и матрицы совместимости system_ext . Требования FCM должны удовлетворяться манифестом устройства (требования применяются во время сборки, выполнения и в VTS).

FCM system_ext и FCM продукта являются дополнениями FCM для конкретных устройств (устанавливаются в системный раздел).

  • FCM устройства должен отражать требования модулей в системном разделе .
  • FCM system_ext должен отражать требования модулей в разделе system_ext.
  • FCM продукта должен отражать требования по модулям в разделе продукта .

Все FCM должны согласовываться с модификациями инфраструктуры OEM в разделах 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_ext FCM.

Матрица совместимости устройств (DCM)

Матрица совместимости устройств описывает набор требований, которые устройство ожидает от платформы (требования, выполняемые при запуске и во время OTA).

Пример файла 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" : матрица совместимости "framework" .
manifest.level
Требуется для матрицы совместимости фреймворка. Задает версию матрицы совместимости платформы (версия FCM) этого файла. Не следует объявлять в матрице совместимости фреймворка, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE устройства (например, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Необязательно и можно повторить. Перечисляет один HAL (HIDL или собственный), который требуется владельцу матрицы совместимости (структура или устройство). Записи HAL выделяются элементом <name> ; может быть несколько записей HAL с одинаковым именем (подразумевает условие «и»).
compatibility-matrix.hal.format
По желанию. Значение может быть одним из:
  • "hidl" : HIDL HALs. Это значение по умолчанию.
  • "aidl" : AIDL HAL . Действительно только для мета-версии 2.0 матрицы совместимости.
  • "native" : родные HAL.
compatibility-matrix.hal.optional
Атрибут является необязательным и по умолчанию имеет значение false. Указывает, является ли этот HAL необязательным для владельца матрицы совместимости (платформы или устройства). Если запись <hal> помечена как необязательная, это означает, что владелец может работать с этим 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 )

Для AIDL HAL не должны присутствовать на устройствах под управлением 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-битное целое число; переполнение приводит к усечению. (Синтаксический анализатор принимает значения от -2 64 + 1 2 64 - 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
Обязательный. Содержит все записи, связанные с политикой. Используется только матрицей совместимости фреймворка.
compatibility-matrix.sepolicy.sepolicy-version
Обязательно, могу повторить. Описывает требования к версии sepolicy. Соответствует manifest.sepolicy.version . Каждый экземпляр элемента определяет диапазон версий отдельной политики.
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. Если он отсутствует, к образу системы не предъявляется никаких требований к системному SDK.