Kompatibilitätsmatrix

In diesem Abschnitt werden die Framework- und Gerätekompatibilitätsmatrizes sowie das Kompatibilitätsmatrix-Schema Für finden Sie unter Übereinstimmungen Regeln.

Framework-Kompatibilitätsmatrix (FCM)

Die Framework-Kompatibilitätsmatrix (FCM) beschreibt die Anforderungen des Framework auf dem Gerät, auf dem es ausgeführt wird. Die Framework-Kompatibilitätsmatrix besteht aus dem System, die Produktkompatibilitätsmatrix, und der system_ext-Kompatibilitätsmatrix. Die FCM-Anforderungen müssen im Gerätemanifest erfüllt werden (Anforderungen zur Build-Zeit, Laufzeit und in VTS erzwungen).

Die system_ext FCM und das Produkt FCM sind Ergänzungen des gerätespezifischen FCM (installiert in der Systempartition).

  • Die FCM-Funktion des Geräts sollte die Anforderungen der Module im Systempartition
  • Die FCM-Funktion „system_ext“ sollte den Anforderungen der Module in der Partition „system_ext“ entsprechen.
  • Das Produkt FCM sollte die Anforderungen der Module in der Produktaufteilung:

Alle FCMs sollten sich an den Änderungen am Framework des OEMs im System, Produkt, und system_ext. Beispiel: Eine in der Produktpartition installierte Anwendung verwendet eine Anbietererweiterung. einer HAL-Schnittstelle muss die HAL-Schnittstellenanforderung im Produkt-FCM.

Beispiel für eine Systemkompatibilitätsmatrixdatei:

<?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>

Weitere Informationen zu FCM Lebenszyklus:

Produktkompatibilitätsmatrix

Das Produkt-FCM ist eine Framework-Kompatibilitätsmatrix-Datei im Produkt. -Partition an. Das VINTF-Objekt verbindet das Produkt FCM mit FCMs im System und system_ext. zur Laufzeit zu erstellen.

Beispiel für eine FCM-Produktdatei:

<?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>

System_ext-Kompatibilitätsmatrix

Die FCM-Datei system_ext ist eine Framework-Kompatibilitätsmatrix-Datei im Verzeichnis system_ext. -Partition an. Das VINTF-Objekt verbindet die FCM „system_ext“ mit den FCMs im System und im Produkt. zur Laufzeit zu erstellen. Siehe Produktkompatibilitätsmatrix für eine FCM-Beispieldatei "system_ext".

Gerätekompatibilitätsmatrix (DCM)

Die Gerätekompatibilitätsmatrix beschreibt eine Reihe von Anforderungen, die das Gerät erfüllen muss. vom Framework erwartet (Anforderungen bei der Einführung und OTA-Zeit).

Beispiel für eine DCM-Datei:

<?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>

Schema der Kompatibilitätsmatrix

In diesem Abschnitt wird die Bedeutung dieser XML-Tags beschrieben. Einige „erforderliche“ Tags in der Quelldatei in der Android-Quellstruktur fehlen und assemble_vintf während der Build-Erstellung. „Erforderlich“ müssen Tags in den entsprechenden Dateien auf der .

?xml
Optional. Sie stellt nur Informationen für den XML-Parser bereit.
compatibility-matrix.version
Erforderlich. Metaversion dieser Kompatibilitätsmatrix. Beschreibt die Elemente die in der Kompatibilitätsmatrix erwartet werden. Kein Bezug zur XML-Version.
compatibility-matrix.type
Erforderlich. Typ dieser Kompatibilitätsmatrix: <ph type="x-smartling-placeholder">
    </ph>
  • "device": Gerätekompatibilitätsmatrix.
  • "framework": Framework-Kompatibilitätsmatrix.
manifest.level
Erforderlich für die Framework-Kompatibilitätsmatrix. Unter Android 12 und höher in Framework-Kompatibilitätsmatrix-Dateien in den Partitionen „product“ und „system_ext“ zulässig. Gibt die Version der Framework-Kompatibilitätsmatrix (FCM-Version) dieser Datei an. Nicht deklarieren in der gerätespezifischen Framework-Kompatibilitätsmatrix (z.B. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)
compatibility-matrix.hal
Optional und kann wiederholt werden. Listet eine einzelne HAL (HIDL oder nativ) auf, die vom Inhaber der Kompatibilitätsmatrix (Framework oder Gerät) verlangt, vorhanden ist. HAL-Einträge sind durch ein <name>-Element gekennzeichnet. Es kann mehrere HAL-Einträge mit demselben Namen geben (impliziert die Bedingung "and").
compatibility-matrix.hal.format
Optional. Folgende Werte sind möglich: <ph type="x-smartling-placeholder">
    </ph>
  • "hidl": HIDL HALs. Das ist die Standardeinstellung.
  • "aidl": AIDL HALs Gilt nur für die Meta-Version 2.0 der Kompatibilitätsmatrix.
  • "native": native HALs.
compatibility-matrix.hal.optional
Das Attribut ist optional und standardmäßig auf „false“ festgelegt. Gibt an, ob dieser HAL optional für den Eigentümer der Kompatibilitätsmatrix (Framework oder Gerät). Wenn ein Der Eintrag „<hal>“ ist als optional markiert, d. h., der Inhaber kann kann mit diesem HAL verwendet werden, falls vorhanden, er muss aber nicht vorhanden sein.
compatibility-matrix.hal.name
Erforderlich. Vollständiger Paketname dieses HAL. Beispiele: <ph type="x-smartling-placeholder">
    </ph>
  • android.hardware.camera (HIDL oder AIDL HAL)
  • GLES (natives HAL, nur Name erforderlich)
compatibility-matrix.hal.version
Eine Liste der Versionsbereiche (siehe HAL-Übereinstimmungen) das definiert, welche Versionen der Eigentümer der Kompatibilitätsmatrix (Framework oder Gerät) erwartet.

Für HIDL- und native HALs (erforderlich) kann die Wiederholung ohne Duplikate möglich sein. Das Format ist eines der folgenden: <ph type="x-smartling-placeholder">
    </ph>
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (entspricht MAJOR.MINOR-MINOR)

Für AIDL HALs dürfen sie nicht auf Geräten mit Android vorhanden sein 11 und niedriger. Optional auf Geräten auf denen neuere Versionen ausgeführt werden. Wenn angegeben, hat das Format eines der folgenden Formate: <ph type="x-smartling-placeholder">
    </ph>
  • VERSION_MIN-VERSION_MAX
  • VERSION (entspricht VERSION-VERSION)
Wenn kein Wert angegeben ist, wird standardmäßig 1 verwendet.
compatibility-matrix.hal.interface
Optional, kann wiederholt werden. Eine Liste der erforderlichen Schnittstellen dieses HAL.
compatibility-matrix.hal.interface.name
Erforderlich. Name der Schnittstelle.
compatibility-matrix.hal.interface.instance
Optional, kann wiederholt werden. Eine Liste der erforderlichen Instanzen dieser Schnittstelle.
compatibility-matrix.hal.interface.regex-instance
Optional, kann wiederholt werden. Eine Liste der erforderlichen Muster für Instanznamen auf diesem . Verwenden Sie Erweitert Regulärer Ausdruck.
compatibility-matrix.kernel
Optional, kann wiederholt werden. Geben Sie eine Liste der Kernel-Konfigurationen an, die das Framework die für jede Kernel-Version erforderlich sind.
Mehrere <kernel> mit derselben <version> können existieren, um „und“ zu implizieren, Beziehung. Jede <kernel> ist ein „Fragment“ der Anforderungen, die nur aktiviert sind, wenn <conditions> erfüllt.
compatibility-matrix.kernel.version
Erforderlich. Kernel-Version. Format lautet VERSION.MAJOR_REVISION.MINOR_REVISION Version und Hauptversion müssen genau übereinstimmen. Durch die Nebenversion wird definiert, mindestens die LTS-Version des vom Framework erwarteten Kernels.
compatibility-matrix.kernel.condition
Optional. Darf jeweils zum ersten <kernel> nicht vorhanden sein Version. Gibt eine Liste von Bedingungen an. Wenn die Bedingungen erfüllt sind, die in diesem <kernel>-Fragment angegebenen Anforderungen erfüllt sind.
compatibility-matrix.kernel.config
Optional, kann wiederholt werden. Listet CONFIG Elemente auf, die sein müssen die dieser Kernel-Version zugeordnet ist. Jedes CONFIG-Element ist ein Schlüssel/Wert-Paar Paar; Konfigurationselemente werden durch Schlüssel unterschieden.
compatibility-matrix.kernel.config.key
Erforderlich. Schlüsselname des CONFIG-Elements. Beginnt mit CONFIG_
compatibility-matrix.kernel.config.value
Erforderlich. Wert des CONFIG-Elements. Das Format hängt vom Typ ab: <ph type="x-smartling-placeholder">
    </ph>
  • string Anführungszeichen werden weggelassen.
  • int Dezimal- und hexadezimal (muss mit 0x beginnen) oder 0X)-Werte akzeptiert. Wird als 64-Bit-Ganzzahl interpretiert. Überlauf wird abgeschnitten. (Parser akzeptiert Werte aus -264 + 1 bis 264 – 1 wird das 65. Bit abgeschnitten; finden Sie in der Strtoull Manpage.
  • range Das Format ist [int]-[int], z.B. 10-20 Hexadezimalwerte sind zulässig und müssen mit 0x oder 0X. Zwei Grenzen müssen 64-Bit-Werte ohne Vorzeichen sein Integer
  • tristate Gültige Werte sind y, m und n.
compatibility-matrix.kernel.config.value.type
Erforderlich. Typ des Werts des CONFIG-Elements, einer der folgenden: <ph type="x-smartling-placeholder">
    </ph>
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Erforderlich. Enthält alle sepolicy-bezogenen Einträge. Wird nur vom Framework-Kompatibilitätsmatrix.
compatibility-matrix.sepolicy.sepolicy-version
Erforderlich, kann wiederholt werden. Beschreibt die Anforderung an die sepolicy-Version. Entspricht manifest.sepolicy.version. Jede Instanz eines -Element definiert eine Reihe von sepolicy-Versionen.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Erforderlich. Deklariert die policydb-Version, die das Framework funktioniert
compatibility-matrix.avb.vbmeta-version
Optional: die nur von der Framework-Kompatibilitätsmatrix verwendet werden. Deklariert die AVB Version, mit der system.img signiert wurde. In Android eingestellt 10.
compatibility-matrix.vendor-ndk
Optional: die nur von der Gerätekompatibilitätsmatrix verwendet werden. Deklariert die Anforderungen des VNDK-Anbieter-Snapshots. Fehlt diese Angabe, wird keine VNDK-Anforderung erfüllt auf das System-Image.
compatibility-matrix.vendor-ndk.version
Erforderlich. Eine positive Ganzzahl, die eine VNDK-Version angibt, die für das Bild des Anbieters.
compatibility-matrix.vendor-ndk.library
Optional, kann wiederholt werden. Deklariert eine Reihe von VNDK-Bibliotheken, die für das Bild des Anbieters. Dieselbe Semantik wie bei manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Optional, kann wiederholt werden; die nur von der Gerätekompatibilitätsmatrix verwendet werden. Erklärungen Anforderungen von Anbieter-Apps für System SDK-Versionen erfüllt werden. Fehlt das System, ist kein System-SDK vorhanden. Anforderungen an das System-Image.