Matrices de compatibilidad

Esta sección describe las matrices de compatibilidad de dispositivos y marcos y el esquema de la matriz de compatibilidad . Para conocer las reglas de coincidencia, consulte Reglas de coincidencia .

Matriz de compatibilidad del marco (FCM)

La matriz de compatibilidad del marco (FCM) describe los requisitos del marco en el dispositivo en el que se ejecuta. La matriz de compatibilidad del marco consta de la matriz de compatibilidad del sistema, la matriz de compatibilidad del producto y la matriz de compatibilidad system_ext . Los requisitos del FCM deben cumplirse mediante el manifiesto del dispositivo (requisitos aplicados en el momento de la compilación, el tiempo de ejecución y en VTS).

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

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

Todos los FCM deben alinearse con las modificaciones del OEM al marco en las particiones sistema, producto y system_ext. Por ejemplo, si una aplicación instalada en la partición del producto utiliza una extensión del proveedor de una interfaz HAL, el requisito de la interfaz HAL debe declararse en el FCM del producto.

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 detalles, consulte Ciclo de vida de FCM .

Matriz de compatibilidad del producto

El FCM del producto es un archivo de matriz de compatibilidad del marco en la partición del producto. El objeto VINTF une el FCM del producto con los FCM en las particiones system y system_ext en tiempo de ejecución.

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

El FCM system_ext es un archivo de matriz de compatibilidad de marco en la partición system_ext. El objeto VINTF une el FCM system_ext con los FCM en las particiones del sistema y del producto en tiempo de ejecución. Consulte la matriz de compatibilidad de productos para ver un archivo FCM system_ext de ejemplo.

Matriz de compatibilidad de dispositivos (DCM)

La matriz de compatibilidad del dispositivo describe un conjunto de requisitos que el dispositivo espera del marco (requisitos aplicados en el momento del lanzamiento y en el momento de OTA).

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

Esta sección describe el significado de estas etiquetas XML. Es posible que falten algunas etiquetas "requeridas" en el archivo fuente en el árbol de fuentes de Android y que se escriban mediante assemble_vintf en el momento de la compilación. Las etiquetas "requeridas" deben estar presentes en los archivos correspondientes del dispositivo.

?xml
Opcional. Solo proporciona información al analizador XML.
compatibility-matrix.version
Requerido. Metaversión de esta matriz de compatibilidad. Describe los elementos esperados en la matriz de compatibilidad. No relacionado con la versión XML.
compatibility-matrix.type
Requerido. Tipo de esta matriz de compatibilidad:
  • "device" : matriz de compatibilidad de dispositivos.
  • "framework" : matriz de compatibilidad del marco.
manifest.level
Requerido para la matriz de compatibilidad del marco. En Android 12 y versiones posteriores, se permiten archivos de matriz de compatibilidad de framework en las particiones product y system_ext. Especifica la versión de la matriz de compatibilidad del marco (versión FCM) de este archivo. No declare esto en la matriz de compatibilidad del marco específico del dispositivo (es decir, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Opcional y se puede repetir. Enumera un único HAL (HIDL o nativo) que el propietario de la matriz de compatibilidad (marco o dispositivo) requiere que esté presente. Las entradas HAL se distinguen por un elemento <name> ; puede haber varias entradas HAL con el mismo nombre (implica la condición "y").
compatibility-matrix.hal.format
Opcional. El valor puede ser uno de:
  • "hidl" : HAL HIDL. Este es el valor predeterminado.
  • "aidl" : HAL AIDL . Sólo válido en la metaversión 2.0 de la matriz de compatibilidad.
  • "native" : HAL nativos.
compatibility-matrix.hal.optional
El atributo es opcional y por defecto es falso. Indica si este HAL es opcional para el propietario de la matriz de compatibilidad (framework o dispositivo). Si una entrada <hal> está marcada como opcional, significa que el propietario puede trabajar con este HAL, si está presente, pero no requiere que esté presente.
compatibility-matrix.hal.name
Requerido. Nombre completo del paquete de este HAL. Ejemplos:
  • android.hardware.camera (HIDL o AIDL HAL)
  • GLES (HAL nativo, solo requiere nombre)
compatibility-matrix.hal.version
Una lista de rangos de versiones (consulte Coincidencias de HAL ) que define qué versiones espera el propietario de la matriz de compatibilidad (marco o dispositivo).

Para HIDL y HAL nativo, se requiere y se puede repetir sin duplicados. El formato es uno de los siguientes:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (equivalente a MAJOR . MINOR - MINOR )

Para AIDL HAL, no debe estar presente en dispositivos con Android 11 y versiones anteriores. Opcional en 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. Una lista de interfaces requeridas de este HAL.
compatibility-matrix.hal.interface.name
Requerido. Nombre de la interfaz.
compatibility-matrix.hal.interface.instance
Opcional, se puede repetir. Una lista de instancias requeridas de esta interfaz.
compatibility-matrix.hal.interface.regex-instance
Opcional, se puede repetir. Una lista de patrones de nombres de instancias requeridos en esta interfaz. Utilice el formato de expresión regular extendida .
compatibility-matrix.kernel
Opcional, se puede repetir. Especifique una lista de configuraciones del kernel que el marco requiere en cada versión del kernel.
Pueden existir varios <kernel> con la misma <version> para implicar una relación "y". Cada <kernel> es un "fragmento" de los requisitos que se habilitan sólo cuando se cumplen <conditions> .
compatibility-matrix.kernel.version
Requerido. Versión del núcleo. El formato es VERSION . MAJOR_REVISION . MINOR_REVISION . La versión y la revisión principal deben coincidir exactamente. La revisión menor define la versión LTS mínima del kernel que espera el marco.
compatibility-matrix.kernel.condition
Opcional. No debe existir para el primer <kernel> de cada versión. Especifica una lista de condiciones. Cuando se cumplen las condiciones, se habilitan los requisitos establecidos en este fragmento <kernel> .
compatibility-matrix.kernel.config
Opcional, se puede repetir. Enumera los elementos CONFIG que deben coincidir con esta versión del kernel. Cada elemento CONFIG es un par clave-valor; Los elementos de configuración se distinguen por clave.
compatibility-matrix.kernel.config.key
Requerido. Nombre clave del elemento CONFIG . Comienza con CONFIG_ .
compatibility-matrix.kernel.config.value
Requerido. Valor del elemento CONFIG . El formato depende del tipo:
  • string . Se omiten las comillas.
  • int . Se aceptan valores decimales y hexadecimales (deben comenzar con 0x o 0X) . Interpretado como un entero de 64 bits; los desbordamientos dan como resultado el truncamiento. (El analizador acepta valores de -2 64 + 1 a 2 64 - 1, el bit 65 está truncado; para obtener más detalles, consulte la página de manual de strtoull ).
  • range . El formato es [int]-[int] , por ejemplo 10-20 . Se aceptan valores hexadecimales y deben comenzar con 0x o 0X . Dos límites deben ser un entero de 64 bits sin signo.
  • tristate . Los valores válidos son y , m n .
compatibility-matrix.kernel.config.value.type
Requerido. Tipo de valor del elemento CONFIG , uno de:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Requerido. Contiene todas las entradas relacionadas con la política de seguridad. Utilizado únicamente por la matriz de compatibilidad del marco.
compatibility-matrix.sepolicy.sepolicy-version
Requerido, se puede repetir. Describe el requisito de la versión de política segura. Corresponde a manifest.sepolicy.version . Cada instancia de un elemento define un rango de versiones de política.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Requerido. Declara la versión policydb con la que funciona el marco.
compatibility-matrix.avb.vbmeta-version
Opcional; utilizado sólo por la matriz de compatibilidad del marco. Declara la versión de AVB utilizada para firmar system.img . En desuso en Android 10.
compatibility-matrix.vendor-ndk
Opcional; utilizado únicamente por la matriz de compatibilidad de dispositivos. Declara el requisito de la instantánea del proveedor de VNDK. Si falta, no se exige ningún VNDK en la imagen del sistema.
compatibility-matrix.vendor-ndk.version
Requerido. Un entero positivo que declara una versión de VNDK requerida por la imagen del proveedor.
compatibility-matrix.vendor-ndk.library
Opcional, se puede repetir. Declara un conjunto de bibliotecas VNDK requeridas por la imagen del proveedor. Misma semántica que manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
Opcional, se puede repetir; utilizado únicamente por la matriz de compatibilidad de dispositivos. Declara el requisito de las aplicaciones del proveedor en las versiones del SDK del sistema. Si falta, no se exige ningún SDK del sistema en la imagen del sistema.