Matrices de compatibilidad

En esta sección, se describen las matrices de compatibilidad de framework y dispositivos, y el esquema de la matriz de compatibilidad. Para reglas de coincidencia, consulta Búsqueda de coincidencias Reglas

Matriz de compatibilidad con el framework (FCM)

La matriz de compatibilidad con el marco de trabajo (FCM) describe los requisitos del de Terraform en el dispositivo en el que se ejecuta. La matriz de compatibilidad del framework consta del sistema la matriz de compatibilidad, la matriz de compatibilidad de productos, y la matriz de compatibilidad system_ext. Los requisitos de FCM deben cumplirse con el manifiesto del dispositivo (los requisitos se aplican en el tiempo de compilación, el tiempo de ejecución y VTS).

La FCM system_ext y el producto FCM son complementos de FCM específico para dispositivo (instalado en la partición del sistema).

  • El dispositivo FCM debe reflejar los requisitos de los módulos en el partición del sistema.
  • El FCM de system_ext debe reflejar los requisitos por módulos en la partición system_ext.
  • El producto FCM debe reflejar los requisitos de los módulos en el partición de producto.

Todos los FCM deben alinearse con las modificaciones del OEM en el framework del sistema, producto y system_ext. Por ejemplo, si una app instalada en la partición de producto usa una extensión de una interfaz HAL, el requisito de interfaz de HAL debe declararse en el producto FCM.

Ejemplo de archivo de matriz de compatibilidad del sistema:

<?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>

Para obtener más información, visita FCM. Lifecycle.

Matriz de compatibilidad de productos

El producto FCM es un archivo de matriz de compatibilidad del marco de trabajo del producto por cada partición. El objeto VINTF une el FCM del producto con los FCM del sistema y system_ext particiones en el entorno de ejecución.

Ejemplo de archivo de FCM del producto:

<?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>

Matriz de compatibilidad de system_ext

El FCM system_ext es un archivo de matriz de compatibilidad con el marco de trabajo en el archivo system_ext por cada partición. El objeto VINTF se une a FCM del sistema system_ext con los FCM del sistema y el producto particiones en el entorno de ejecución. Consulta la matriz de compatibilidad de productos. para ver un archivo de ejemplo de FCM system_ext.

Matriz de compatibilidad de dispositivos (DCM)

La matriz de compatibilidad de dispositivos describe un conjunto de requisitos espera del framework (requisitos aplicados en el momento del lanzamiento y de la OTA).

Ejemplo de archivo de 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>

Esquema de matriz de compatibilidad

En esta sección, se describe el significado de estas etiquetas XML. Algunos son “obligatorios” etiquetas pueden faltar del archivo fuente en el árbol de fuentes de Android y escribirse assemble_vintf al momento de la compilación. "Obligatorio" las etiquetas deben estar presentes en los archivos correspondientes del dispositivo.

?xml
Opcional. Solo proporciona información al analizador de XML.
compatibility-matrix.version
Obligatorio. Metaversión de esta matriz de compatibilidad. Describe los elementos de la matriz de compatibilidad. No está relacionado con la versión XML.
compatibility-matrix.type
Obligatorio. Tipo de esta matriz de compatibilidad:
  • "device": Matriz de compatibilidad del dispositivo.
  • "framework": Matriz de compatibilidad con el framework.
manifest.level
Obligatorio para la matriz de compatibilidad del marco de trabajo. En Android 12 y versiones posteriores, permitidos en los archivos de matrices de compatibilidad del framework en las particiones product y system_ext. Especifica la versión de la matriz de compatibilidad con el framework (versión de FCM) de este archivo. No declarar en la matriz de compatibilidad del framework específico del dispositivo (es decir, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
Opcional y se puede repetir. Enumera una sola HAL (HIDL o nativa) que está que requiere el propietario de la matriz de compatibilidad (framework o dispositivo) presente. Las entradas de la HAL se distinguen por un elemento <name>. puede haber varias entradas de la HAL con el mismo nombre (implica la condición "y").
compatibility-matrix.hal.format
Opcional. El valor puede ser uno de los siguientes:
  • "hidl": HAL de HIDL Es el valor predeterminado.
  • "aidl": HAL de AIDL. Solo es válida en la metaversión 2.0 de la matriz de compatibilidad.
  • "native": HAL nativas
compatibility-matrix.hal.optional
El atributo es opcional y su valor predeterminado es falso. indica si esta HAL está opcional para el propietario de la matriz de compatibilidad (framework o dispositivo). Si un <hal> entrada se marca como opcional, lo que significa que el propietario puede Funcionará con esta HAL, si está presente, pero no requiere que lo esté.
compatibility-matrix.hal.name
Obligatorio. Es el nombre completo del paquete de esta HAL. Ejemplos:
  • android.hardware.camera (HIDL o HAL del AIDL)
  • GLES (HAL nativa; solo requiere nombre)
compatibility-matrix.hal.version
Una lista de rangos de versiones (consulta coincidencias del HAL) que define las versiones que el propietario de la matriz de compatibilidad (framework o del dispositivo) espera.

En el caso del HIDL y las HALs nativas, se requiere, se pueden repetir sin duplicados. El formato es uno de los siguientes:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (equivalente a MAJOR.MINOR-MINOR)

En el caso de las HAL del AIDL, no debe estar presente en dispositivos que ejecuten Android 11 o menos. Opcional en los dispositivos que ejecutan versiones posteriores. Si se especifica, el formato es uno de los siguientes:
  • VERSION_MIN-VERSION_MAX
  • VERSION (equivalente a VERSION-VERSION)
Si no se especifica, el valor predeterminado es 1.
compatibility-matrix.hal.interface
Opcional; se puede repetir. Lista de interfaces obligatorias de esta HAL.
compatibility-matrix.hal.interface.name
Obligatorio. Nombre de la interfaz.
compatibility-matrix.hal.interface.instance
Opcional; se puede repetir. Una lista de las instancias necesarias de esta interfaz.
compatibility-matrix.hal.interface.regex-instance
Opcional; se puede repetir. Una lista de patrones de nombres de instancias obligatorios en esta interfaz de usuario. Usa Extensión Formato de expresión regular.
compatibility-matrix.kernel
Opcional; se puede repetir. Especifica una lista de parámetros de configuración de kernel requiere en cada versión de kernel.
Si se usan varios <kernel> con el mismo <version>, se pueden existen para implicar relación. Cada <kernel> es un "fragmento" de los requisitos que se habilitan solo cuando <conditions> son que se cumplen.
compatibility-matrix.kernel.version
Obligatorio. Versión de kernel. El Formato es VERSION.MAJOR_REVISION.MINOR_REVISION La versión y la revisión principal deben coincidir exactamente. Una revisión menor define la la versión mínima de LTS del kernel que espera el framework.
compatibility-matrix.kernel.condition
Opcional. No debe existir durante los primeros <kernel> de cada uno versión. Especifica una lista de condiciones. Cuando se cumplen las condiciones, están habilitados los requisitos establecidos en este fragmento <kernel>.
compatibility-matrix.kernel.config
Opcional; se puede repetir. Enumera CONFIG elementos que deben que coinciden con esta versión de kernel. Cada elemento CONFIG es un par clave-valor. vincular; los elementos de configuración se distinguen por clave.
compatibility-matrix.kernel.config.key
Obligatorio. Es el nombre de la clave del elemento CONFIG. Comienza con CONFIG_
compatibility-matrix.kernel.config.value
Obligatorio. Valor del elemento CONFIG. El formato depende del tipo:
  • string Se omiten las comillas.
  • int Decimales y hexadecimales (debe comenzar con 0x) o 0X)valores. Se interpreta como un número entero de 64 bits. los desbordamientos dan lugar a un truncamiento. (El analizador acepta valores de -264 + 1). a 264: 1, 65 bit está truncado; para obtener más información, consulta la falta página man).
  • range El formato es [int]-[int], p.ej., 10-20 Se aceptan valores hexadecimales y deben comenzar con 0x o 0X. Los dos límites deben ser una arquitectura de 64 bits entero.
  • tristate Los valores válidos son y, m y n
compatibility-matrix.kernel.config.value.type
Obligatorio. Tipo del valor del elemento CONFIG, uno de los siguientes:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Obligatorio. Contiene todas las entradas relacionadas con la política. Solo las usa el matriz de compatibilidad con el framework.
compatibility-matrix.sepolicy.sepolicy-version
Obligatorio; se puede repetir. Describe los requisitos de la versión de sepolicy. Corresponde a manifest.sepolicy.version. Cada instancia de un define un rango de versiones de sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Obligatorio. Declara la versión de policydb en la que funciona el framework. tus datos.
compatibility-matrix.avb.vbmeta-version
Opcional que solo usa la matriz de compatibilidad del framework. Declara el AVB versión que se usa para firmar system.img. Obsoleto en Android 10.
compatibility-matrix.vendor-ndk
Opcional que solo usa la matriz de compatibilidad de dispositivos. Declara el Requisito de la instantánea del proveedor del VNDK. Si falta, no se cumplirá ningún requisito del VNDK. en la imagen del sistema.
compatibility-matrix.vendor-ndk.version
Obligatorio. Número entero positivo que declara una versión del VNDK requerida por el imagen del proveedor.
compatibility-matrix.vendor-ndk.library
Opcional; se puede repetir. Declara un conjunto de bibliotecas de VNDK que requiere la imagen del proveedor. La misma semántica que manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Opcional, se puede repetir. que solo usa la matriz de compatibilidad de dispositivos. Declara el requisito de las apps de proveedores en las versiones del SDK del sistema. Si falta, no se muestra el SDK del sistema en la imagen del sistema.