Matrices de compatibilité

Cette section décrit le framework et les matrices de compatibilité le schéma de la matrice de compatibilité. Pour des règles de correspondance, reportez-vous à la section Mise en correspondance Règles.

Matrice de compatibilité des frameworks (FCM)

La matrice de compatibilité du framework (FCM) décrit les exigences du sur l'appareil sur lequel il s'exécute. La matrice de compatibilité du framework est constituée du système la matrice de compatibilité des produits, et la matrice de compatibilité system_ext. Les exigences de FCM doivent être satisfaites par le fichier manifeste de l'appareil (exigences lors de la compilation, de l'exécution et dans VTS).

FCM system_ext et FCM du produit sont des compléments de FCM propre à l'appareil (installé dans la partition système).

  • Le FCM de l'appareil doit refléter les exigences des modules du partition système.
  • Le FCM system_ext doit refléter les exigences des modules de la partition system_ext.
  • FCM du produit doit refléter les exigences des modules du partition des produits.

Tous les FCM doivent s'aligner sur les modifications apportées par un OEM au framework et system_ext. Par exemple, si une application installée dans la partition de produits utilise une extension de fournisseur d'une interface HAL, l'exigence d'interface HAL doit être déclarée dans le produit FCM.

Exemple de fichier de matrice de compatibilité système:

<?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 page FCM Lifecycle

Matrice de compatibilité des produits

FCM est un fichier de matrice de compatibilité avec le framework partition. L'objet VINTF joint le produit FCM aux FCM dans le système et le champ system_ext. des partitions au moment de l'exécution.

Exemple de fichier FCM de produit:

<?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 situé dans partition. L'objet VINTF joint le FCM system_ext aux FCM dans le système et le produit. des partitions 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 attentes 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 valeurs "obligatoires" tags peut être absente du fichier source de l'arborescence source Android et écrite par assemble_vintf au moment de la compilation. "Obligatoire" les tags doivent être présents dans les fichiers correspondants sur le appareil.

?xml
Facultatif. Elle ne fournit des informations qu'à l'analyseur XML.
compatibility-matrix.version
Obligatoire. Métaversion de cette matrice de compatibilité Décrit les éléments attendue dans la matrice de compatibilité. Sans rapport avec la version XML.
compatibility-matrix.type
Obligatoire. Type de cette matrice de compatibilité: <ph type="x-smartling-placeholder">
    </ph>
  • "device": matrice de compatibilité des appareils
  • "framework": matrice de compatibilité des frameworks
manifest.level
Requis pour la matrice de compatibilité du framework. Sur Android 12 et versions ultérieures, autorisée dans les fichiers de matrice de compatibilité du framework dans les partitions "product" et "system_ext". Spécifie la version de la matrice de compatibilité des frameworks (version FCM) de ce fichier. Ne pas déclarer dans la matrice de compatibilité du framework spécifique à l'appareil (par exemple, DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE, par exemple).
compatibility-matrix.hal
Facultatif et peut être répété. Liste un seul HAL (HIDL ou natif) qui est requise par le propriétaire de la matrice de compatibilité (framework ou appareil) à l'heure actuelle. Les entrées HAL se distinguent par un élément <name>. plusieurs entrées HAL peuvent avoir le même nom (ce qui implique une condition "et").
compatibility-matrix.hal.format
Facultatif. La valeur peut être l'une des suivantes: <ph type="x-smartling-placeholder">
    </ph>
  • "hidl": HIDL HAL. Il s'agit de l'option par défaut.
  • "aidl": HAL AIDL. Uniquement valide sur la méta-version 2.0 de la matrice de compatibilité.
  • "native": HAL natives.
compatibility-matrix.hal.optional
L'attribut est facultatif et est défini par défaut sur "false". Indique si cette HAL est facultatif pour le propriétaire de la matrice de compatibilité (framework ou appareil). Si un L'entrée <hal> est marquée comme facultative, ce qui signifie que le propriétaire peut fonctionne avec ce HAL, s'il est présent, mais ne nécessite pas qu'il soit présent.
compatibility-matrix.hal.name
Obligatoire. Nom de package complet de ce HAL. Exemples: <ph type="x-smartling-placeholder">
    </ph>
  • android.hardware.camera (HIDL ou AIDL HAL)
  • GLES (HAL natif, nom uniquement requis)
compatibility-matrix.hal.version
La liste des plages de versions (voir correspondances HAL) qui définit les versions du propriétaire de la matrice de compatibilité (framework ou appareil) s'attend.

Pour les HAL natives et HIDL, obligatoire, peut être répété sans doublons. Le format doit être l'un des suivants: <ph type="x-smartling-placeholder">
    </ph>
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (équivalent à MAJOR.MINOR-MINOR).

Pour les HAL AIDL, ne doit pas être présent sur les appareils exécutant Android 11 et versions antérieures. Facultatif sur les appareils les versions ultérieures. S'il est spécifié, le format est l'un des suivants: <ph type="x-smartling-placeholder">
    </ph>
  • VERSION_MIN-VERSION_MAX
  • VERSION (équivalent à VERSION-VERSION).
Si aucune valeur n'est spécifiée, la valeur par défaut est 1.
compatibility-matrix.hal.interface
Facultatif, peut être répété. Liste des interfaces requises pour 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é. Une liste des formats de nom d'instance requis pour de commande. Utilisez Étendu Expression régulière.
compatibility-matrix.kernel
Facultatif, peut être répété. Spécifiez la liste des configurations de noyau que le framework sur chaque version de noyau.
Plusieurs <kernel> avec le même <version> peuvent existent pour impliquer « et » relation. Chaque <kernel> est un "fragment" des exigences qui ne sont activées que lorsque les <conditions> sont sont satisfaites.
compatibility-matrix.kernel.version
Obligatoire. Version du noyau. La valeur Format est VERSION.MAJOR_REVISION.MINOR_REVISION La version et la révision majeure doivent correspondre exactement. Le paramètre "Révision mineure" définit version LTS minimale du noyau attendue par le framework.
compatibility-matrix.kernel.condition
Facultatif. Ne doit pas exister les premiers <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 correspondant à cette version de noyau. Chaque élément CONFIG est une clé-valeur paire ; les éléments de configuration sont distingués par clé.
compatibility-matrix.kernel.config.key
Obligatoire. Nom de clé de l'élément CONFIG. Commence par CONFIG_
compatibility-matrix.kernel.config.value
Obligatoire. Valeur de l'élément CONFIG. Le format dépend du type: <ph type="x-smartling-placeholder">
    </ph>
  • string Les guillemets sont omis.
  • int Décimal et hexadécimal (doit commencer par 0x) ou 0X) valeurs sont acceptées. Interprété comme un entier de 64 bits. et les dépassements de capacité provoquent la troncation. (L'analyseur accepte les valeurs comprises entre -264 + 1 à 264 : 1, le 65e bit est tronqué. Pour en savoir plus, consultez Strtoull page de manuel.)
  • range Le format est [int]-[int].Ex. : 10-20 Les valeurs hexadécimales sont acceptées et doivent commencer par 0x ou 0X. Les deux limites doivent être des plages de 64 bits non signées entier.
  • tristate Les valeurs valides sont y, m et n
compatibility-matrix.kernel.config.value.type
Obligatoire. Type de la valeur de l'élément CONFIG, au choix: <ph type="x-smartling-placeholder">
    </ph>
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Obligatoire. Contient toutes les entrées liées à la règle sepolicy. Utilisé uniquement par de compatibilité du framework.
compatibility-matrix.sepolicy.sepolicy-version
Obligatoire, peut être répété. Décrit les exigences liées à la version de sepolicy. Correspond à manifest.sepolicy.version. Chaque instance d'une définit une plage de versions de sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Obligatoire. Déclare la version policydb avec laquelle le framework fonctionne. .
compatibility-matrix.avb.vbmeta-version
Facultatif : utilisée uniquement par la matrice de compatibilité du framework. Déclare la valeur AVB version 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éclare la valeur de l'instantané du fournisseur VNDK. Si ce champ n'est pas renseigné, le VNDK n'est pas exigé sur l'image système.
compatibility-matrix.vendor-ndk.version
Obligatoire. Entier positif qui déclare la version du VNDK requise par le image du fournisseur.
compatibility-matrix.vendor-ndk.library
Facultatif, peut être répété. Déclare un ensemble de bibliothèques VNDK requises par la classe l'image du fournisseur. Même sémantique que manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Facultatif, peut être répété ; utilisé uniquement par la matrice de compatibilité des appareils. Déclare les exigences des applis des fournisseurs sur les versions du SDK système. Si ce champ est manquant, aucun SDK système est effectuée sur l'image système.