Cette section décrit les matrices de compatibilité du framework et des appareils, ainsi que le schéma de la matrice de compatibilité. Pour en savoir plus sur les règles de correspondance, consultez Règles de correspondance.
Matrice de compatibilité du framework (FCM)
La matrice de compatibilité du framework (FCM) décrit les exigences du framework sur l'appareil sur lequel il s'exécute. La matrice de compatibilité du framework se compose de la matrice de compatibilité du système, de la matrice de compatibilité des produits et de la matrice de compatibilité system_ext. Les exigences du FCM doivent être satisfaites par le fichier manifeste de l'appareil (exigences appliquées au moment de la compilation, de l'exécution et dans VTS).
Le FCM system_ext et le FCM produit sont des compléments du FCM spécifique à l'appareil (installé dans la partition système).
- Le FCM de l'appareil doit refléter les exigences des modules dans la partition système.
- Le FCM system_ext doit refléter les exigences par module dans la partition system_ext.
- Le FCM du produit doit refléter les exigences par module dans la partition de produit.
Tous les FCM doivent correspondre aux modifications apportées par un OEM au framework dans les partitions système, produit et system_ext. Par exemple, si une application installée dans la partition du produit utilise une extension du fournisseur d'une interface HAL, l'exigence d'interface HAL doit être déclarée dans le FCM du produit.
Exemple de fichier de matrice de compatibilité des systèmes:
<?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>
Pour en savoir plus, consultez la section Cycle de vie de FCM.
Matrice de compatibilité des produits
Le FCM du produit est un fichier de matrice de compatibilité de framework dans la partition du produit. L'objet VINTF joint le FCM du produit aux FCM des partitions système et system_ext au moment de l'exécution.
Exemple de fichier FCM pour les produits:
<?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>
Matrice de compatibilité System_ext
Le FCM system_ext est un fichier de matrice de compatibilité de framework dans la partition system_ext. L'objet VINTF joint le FCM system_ext aux FCM des partitions système et produit au moment de l'exécution. Consultez la matrice de compatibilité des produits pour obtenir un exemple de fichier FCM system_ext.
Matrice de compatibilité des appareils (DCM)
La matrice de compatibilité des appareils décrit un ensemble d'exigences que l'appareil attend du framework (exigences appliquées au lancement et au moment de la mise à jour OTA).
Exemple de fichier 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>
Schéma de la matrice de compatibilité
Cette section décrit la signification de ces balises XML. Certaines balises "obligatoires" peuvent être manquantes dans le fichier source de l'arborescence source Android et écrites par assemble_vintf
au moment de la compilation. Les balises "Obligatoire" doivent être présentes dans les fichiers correspondants sur l'appareil.
?xml
- Facultatif. Il ne fournit des informations qu'au moteur d'analyse XML.
compatibility-matrix.version
- Obligatoire. Méta-version de cette matrice de compatibilité. Décrit les éléments attendus dans la matrice de compatibilité. Ne correspond pas à la version XML.
compatibility-matrix.type
- Obligatoire. Type de cette matrice de compatibilité :
"device"
: matrice de compatibilité des appareils."framework"
: matrice de compatibilité des frameworks.
manifest.level
- Obligatoire pour la matrice de compatibilité des frameworks. Sous Android 12 et versions ultérieures, autorisé dans les fichiers de matrice de compatibilité du framework dans les partitions product et system_ext.
Indique la version de la matrice de compatibilité des frameworks (version FCM) de ce fichier. Ne déclarez pas cela dans la matrice de compatibilité du framework spécifique à l'appareil (par exemple,
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
). compatibility-matrix.hal
- Facultatif et peut être répété. Répertorie un seul HAL (HIDL ou natif) qui doit être présent par le propriétaire de la matrice de compatibilité (framework ou appareil). Les entrées HAL sont distinguées par un élément
<name>
. Il peut y avoir plusieurs entrées HAL portant le même nom (implique la condition "et"). compatibility-matrix.hal.format
- Facultatif. La valeur peut être l'une des suivantes :
"hidl"
: HAL HIDL Il s'agit de l'option par défaut."aidl"
: HAL AIDL. Valable uniquement pour la méta-version 2.0 de la matrice de compatibilité."native"
: HAL natifs.
compatibility-matrix.hal.optional
(Android 15 ou version antérieure)
L'attribut - est facultatif et est défini par défaut sur "false". Indique si cet HAL est facultatif pour le propriétaire de la matrice de compatibilité (framework ou appareil). Si une entrée
<hal>
est marquée comme facultative, cela signifie que le propriétaire peut travailler avec ce HAL, le cas échéant, mais qu'il n'est pas obligé de le faire. - Avertissement: Cet attribut est obsolète après Android 15 et n'a plus aucun effet. Si des HAL doivent être installés, cette exigence doit être appliquée lors des tests.
compatibility-matrix.hal.name
- Obligatoire. Nom complet du package de ce HAL. Exemples :
android.hardware.camera
(HIDL ou AIDL HAL)GLES
(HAL natif, nécessite un nom uniquement)
compatibility-matrix.hal.version
-
Liste des plages de versions (voir la section Correspondances HAL) qui définit les versions attendues par le propriétaire de la matrice de compatibilité (framework ou appareil).
Pour les HAL HIDL et natives, obligatoire, peut se répéter sans doublons. Le format est l'un des suivants :MAJOR.MINOR_MIN-MINOR_MAX
MAJOR.MINOR
(équivalent àMAJOR.MINOR-MINOR
)
Pour les HAL AIDL, ne doit pas être présent sur les appareils équipés d'Android 11 ou version antérieure. Facultatif sur les appareils exécutant des versions ultérieures. Le format, le cas échéant, est l'un des suivants :VERSION_MIN-VERSION_MAX
VERSION
(équivalent àVERSION-VERSION
)
1
. compatibility-matrix.hal.interface
- Facultatif, peut être répété. Liste des interfaces requises de ce HAL.
compatibility-matrix.hal.interface.name
- Obligatoire. Nom de l'interface.
compatibility-matrix.hal.interface.instance
- Facultatif, peut être répété. Liste des instances requises de cette interface.
compatibility-matrix.hal.interface.regex-instance
- Facultatif, peut être répété. Liste des modèles de nom d'instance requis sur cette interface. Utilisez le format Expression régulière étendue.
compatibility-matrix.kernel
- Facultatif, peut être répété. Spécifiez une liste de configurations de kernel requises par le framework pour chaque version de kernel.
Plusieurs<kernel>
avec le même<version>
peuvent exister pour impliquer une relation "et". Chaque<kernel>
est un "fragment" des exigences qui ne sont activées que lorsque les<conditions>
sont remplies. compatibility-matrix.kernel.version
- Obligatoire. Version du noyau. Il a le format suivant :
VERSION.MAJOR_REVISION.MINOR_REVISION
. La version et la révision majeure doivent correspondre exactement. La révision mineure définit la version LTS minimale du noyau attendue par le framework. compatibility-matrix.kernel.condition
- Facultatif. Ne doit pas exister pour le premier
<kernel>
de chaque version. Spécifie une liste de conditions. Lorsque les conditions sont remplies, les exigences indiquées dans ce fragment<kernel>
sont activées. compatibility-matrix.kernel.config
- Facultatif, peut être répété. Liste les éléments
CONFIG
qui doivent être mis en correspondance pour cette version de kernel. Chaque élémentCONFIG
est une paire clé-valeur. Les éléments de configuration sont distingués par une clé. compatibility-matrix.kernel.config.key
- Obligatoire. Nom de clé de l'élément
CONFIG
. Commence parCONFIG_
. compatibility-matrix.kernel.config.value
- Obligatoire. Valeur de l'élément
CONFIG
. Le format dépend du type :string
. Les guillemets sont omis.int
. Les valeurs décimales et hexadécimales (elles doivent commencer par0x
ou0X)
) sont acceptées. Interprétée comme un entier de 64 bits. Les débordements entraînent une troncature. (L'analyseur accepte les valeurs comprises entre -264 + 1 et 264 - 1. Le 65e bit est tronqué. Pour en savoir plus, consultez la page de manuel strtoull.)range
. Le format est[int]-[int]
, par exemple10-20
. Les valeurs hexadécimales sont acceptées et doivent commencer par0x
ou0X
. Deux limites doivent être des entiers non signés de 64 bits.tristate
. Les valeurs valides sonty
,m
etn
.
compatibility-matrix.kernel.config.value.type
- Obligatoire. Type de la valeur de l'élément
CONFIG
, parmi les suivants :string
int
range
tristate
compatibility-matrix.sepolicy
- Obligatoire. Contient toutes les entrées liées à sepolicy. Utilisé uniquement par la matrice de compatibilité du framework.
compatibility-matrix.sepolicy.sepolicy-version
- Obligatoire, peut être répété. Décrit l'exigence concernant la version de sepolicy.
Correspond à
manifest.sepolicy.version
. Chaque instance d'un élément définit une plage de versions de sepolicy. compatibility-matrix.sepolicy.kernel-sepolicy-version
- Obligatoire. Déclarer la version
policydb
avec laquelle le framework fonctionne. compatibility-matrix.avb.vbmeta-version
- Facultatif ; utilisé uniquement par la matrice de compatibilité du framework. Déclarer la version AVB utilisée pour signer
system.img
. Obsolète dans Android 10. compatibility-matrix.vendor-ndk
- Facultatif. Utilisé uniquement par la matrice de compatibilité des appareils. Déclarer l'exigence de l'instantané du fournisseur VNDK En l'absence de cette valeur, aucune exigence VNDK n'est appliquée à l'image système.
compatibility-matrix.vendor-ndk.version
- Obligatoire. Entier positif qui déclare une version VNDK requise par l'image du fournisseur.
compatibility-matrix.vendor-ndk.library
- Facultatif, peut être répété. Déclarer un ensemble de bibliothèques VNDK requises par l'image du fournisseur. Sémantique identique à celle de
manifest.vendor-ndk.library
. compatibility-matrix.system-sdk.version
- Facultatif, peut se répéter ; utilisé uniquement par la matrice de compatibilité des appareils. Déclarer l'exigence des applications du fournisseur sur les versions du SDK système. En l'absence de cette valeur, aucune exigence de SDK système n'est appliquée à l'image système.