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 aMAJOR . 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 aVERSION - VERSION
)
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 elementoCONFIG
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 conCONFIG_
. -
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 con0x
o0X)
. 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 ejemplo10-20
. Se aceptan valores hexadecimales y deben comenzar con0x
o0X
. Dos límites deben ser un entero de 64 bits sin signo. -
tristate
. Los valores válidos sony
,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.