Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

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

Матрица совместимости каркаса (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>
        <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 ).
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
Требуется для HIDL и собственных HAL, может повторяться без дубликатов. Не может быть указано для AIDL HAL. Список диапазонов версий (см. Совпадения HAL ), который определяет, какие версии ожидает владелец матрицы совместимости (платформа или устройство).
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. Если он отсутствует, для образа системы не требуется System SDK.