Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Matrices de compatibilidad

Esta sección describe las matrices de marco y de compatibilidad dispositivo y el esquema de matriz de compatibilidad . Para las reglas de concordancia, vea las reglas de coincidencia .

Matriz de compatibilidad de marcos (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 marco consiste en la matriz compatibilty 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 aplicados 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 dispositivo debe reflejar las necesidades de los módulos de la partición del sistema .
  • El FCM system_ext debe reflejar los requisitos por módulos en la partición system_ext.
  • El FCM producto debe reflejar los requisitos de los módulos de la partición producto .

Todos los FCM deben alinearse con las modificaciones de un OEM al marco en las particiones system, product y 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>
        <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 más detalles, véase el FCM del ciclo de vida .

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. Ver matriz de compatibilidad del producto para un ejemplo system_ext archivo 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 lanzamiento y en el momento 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 "requeridas" pueden ser no aparece en el archivo de origen en el árbol de código fuente de Android y escritos por assemble_vintf en tiempo de 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. 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
Requerido. Tipo de esta matriz de compatibilidad:
  • "device" : matriz de compatibilidad de los dispositivos.
  • "framework" : matriz de compatibilidad marco.
manifest.level
Requerido para la matriz de compatibilidad del marco. En Android 12 y superior, se permite en los archivos de matriz de compatibilidad del marco 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 declarar esto en matriz de compatibilidad 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. Entradas HAL se distinguen por un <name> elemento; puede haber varias entradas HAL con el mismo nombre (implica condición "y").
compatibility-matrix.hal.format
Opcional. El valor puede ser uno de los siguientes:
  • "hidl" : HAL HIDL. Este es el predeterminado.
  • "aidl" : AIDL HAL . Solo válido en la meta-versión 2.0 de la matriz de compatibilidad.
  • "native" : HAL nativas.
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 un <hal> entrada se marca como opcionales, que 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 nativa, requiere sólo de nombre)
compatibility-matrix.hal.version
Una lista de rangos de versión (ver partidos HAL ) que define qué versiones el propietario de la matriz de compatibilidad (marco o dispositivo) espera.

Para HIDL y HAL nativos, obligatorio, 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. Utilizar la expresión regular extendida formato.
compatibility-matrix.kernel
Opcional, se puede repetir. Especifique una lista de configuraciones de kernel que el marco requiere en cada versión de kernel.
Múltiple <kernel> con el mismo <version> puede existir dar a entender "y" relación. Cada <kernel> es un "fragmento" de los requisitos que se activa sólo cuando <conditions> se cumplen.
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 por primera <kernel> de cada versión. Especifica una lista de condiciones. Sólo cuando se cumplan las condiciones son los requisitos indicados en este <kernel> fragmento está activado.
compatibility-matrix.kernel.config
Opcional, se puede repetir. Listas CONFIG elementos que deben coincidir para que esta versión del núcleo. Cada CONFIG elemento es un par clave-valor; Los elementos de configuración se distinguen por clave.
compatibility-matrix.kernel.config.key
Requerido. Nombre de la clave del CONFIG artículo. Comienza con CONFIG_ .
compatibility-matrix.kernel.config.value
Requerido. Valor de la CONFIG artículo. El formato depende del tipo:
  • string . Se omiten las citas.
  • int . Decimal y hexadecimal (deben comenzar con 0x o 0X) se aceptan los valores. Interpretado como un entero de 64 bits; los desbordamientos dan como resultado el truncamiento. (Analizador acepta valores de -2 64 + 1 a 2 64 - 1 bit 65a se trunca; para más detalles se refieren a la página hombre strtoull .)
  • range . El formato es [int]-[int] , por ejemplo 10-20 . Los valores hexadecimales son aceptadas 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 y n .
compatibility-matrix.kernel.config.value.type
Requerido. Tipo del valor de la CONFIG artículo, uno de:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Requerido. 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
Requerido. Declara el policydb versión del marco trabaja.
compatibility-matrix.avb.vbmeta-version
Opcional; utilizado solo por la matriz de compatibilidad del marco. Declara la versión AVB utilizado 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
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 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 exige ningún SDK del sistema en la imagen del sistema.