Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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 de FCM deben ser satisfechos por el manifiesto del dispositivo (requisitos exigidos en el tiempo de compilación, 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 de un OEM al marco en el sistema, el producto y las particiones system_ext. Por ejemplo, si una aplicación instalada en la partición del producto utiliza una extensión de 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>
        <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 de productos

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 de System_ext

System_ext FCM 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 ejemplo de archivo system_ext FCM.

Matriz de compatibilidad de dispositivos (DCM)

La matriz de compatibilidad del dispositivo describe un conjunto de requisitos que el dispositivo espera del marco (requisitos exigidos en el momento del lanzamiento y de la 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. Algunas etiquetas "obligatorias" pueden faltar en el archivo fuente en el árbol de fuentes de Android y estar escritas por 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
Necesario. Meta-versió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
Necesario. Tipo de esta matriz de compatibilidad:
  • "device" : matriz de compatibilidad de dispositivos.
  • "framework" : matriz de compatibilidad del framework.
manifest.level
Requerido para la matriz de compatibilidad del marco. Especifica la versión de la matriz de compatibilidad del marco (versión FCM) de este archivo. No debe declararse 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 solo 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 condición "y").
compatibility-matrix.hal.format
Opcional. El valor puede ser uno de:
  • "hidl" : HIDL HAL. Este es el predeterminado.
  • "aidl" : AIDL HAL . Solo válido en la meta-versión 2.0 de la matriz de compatibilidad.
  • "native" : HAL nativos.
compatibility-matrix.hal.optional
El atributo es opcional y el valor predeterminado es falso. Indica si esta HAL es opcional para el propietario de la matriz de compatibilidad (marco o dispositivo). Si una entrada <hal> está marcada como opcional, significa que el propietario puede trabajar con esta HAL, si está presente, pero no requiere que esté presente.
compatibility-matrix.hal.name
Necesario. 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
Requerido para HIDL y HAL nativos, se puede repetir sin duplicados. No se debe especificar para AIDL HAL. Una lista de rangos de versiones (ver coincidencias HAL ) que define qué versiones espera el propietario de la matriz de compatibilidad (marco o dispositivo).
compatibility-matrix.hal.interface
Opcional, se puede repetir. Una lista de interfaces requeridas de este HAL.
compatibility-matrix.hal.interface.name
Necesario. 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 solo cuando se cumplen las <conditions> .
compatibility-matrix.kernel.version
Necesario. 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. Solo cuando se cumplen las condiciones, se habilitan los requisitos establecidos en este fragmento de <kernel> .
compatibility-matrix.kernel.config
Opcional, se puede repetir. Enumera los elementos CONFIG que deben coincidir con esta versión del kernel. Cada elemento de CONFIG es un par clave-valor; Los elementos de configuración se distinguen por clave.
compatibility-matrix.kernel.config.key
Necesario. Nombre de clave del elemento CONFIG . Comienza con CONFIG_ .
compatibility-matrix.kernel.config.value
Necesario. Valor del elemento CONFIG . El formato depende del tipo:
  • string . Se omiten las citas.
  • 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 del 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 número entero de 64 bits sin signo.
  • tristate . Los valores válidos son y , m n .
compatibility-matrix.kernel.config.value.type
Necesario. Tipo del valor del elemento CONFIG , uno de los siguientes:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Necesario. Contiene todas las entradas relacionadas con la política. Utilizado solo por la matriz de compatibilidad del marco.
compatibility-matrix.sepolicy.sepolicy-version
Requerido, puede repetir. Describe el requisito de la versión sepolicy. Corresponde a manifest.sepolicy.version . Cada instancia de un elemento define un rango de versiones seguras.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Necesario. Declara la versión policydb la que trabaja el framework.
compatibility-matrix.avb.vbmeta-version
Opcional; utilizado solo 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 solo por la matriz de compatibilidad del dispositivo. Declara el requisito de la instantánea del proveedor de VNDK. Si falta, no se requiere VNDK en la imagen del sistema.
compatibility-matrix.vendor-ndk.version
Necesario. 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 solo por la matriz de compatibilidad del dispositivo. Declara el requisito de las aplicaciones del proveedor en las versiones del SDK del sistema. Si falta, no se requiere ningún SDK del sistema en la imagen del sistema.