Kompatibilitätsmatrix

In diesem Abschnitt werden die Framework- und Gerätekompatibilitätsmatrizen sowie das Schema der Kompatibilitätsmatrix beschrieben. Informationen zu Abgleichsregeln finden Sie unter Abgleichsregeln.

Framework Compatibility Matrix (FCM)

In der Framework Compatibility Matrix (FCM) werden die Anforderungen des Frameworks an das Gerät beschrieben, auf dem es ausgeführt wird. Die Framework-Kompatibilitätsmatrix besteht aus der Systemkompatibilitätsmatrix, der Produktkompatibilitätsmatrix und der system_ext-Kompatibilitätsmatrix. Die Anforderungen des FCM müssen vom Gerätemanifest erfüllt werden (Anforderungen, die zur Buildzeit, Laufzeit und im VTS erzwungen werden).

Die system_ext-FCM und die product-FCM ergänzen die gerätespezifischen FCM, die in der Systempartition installiert sind.

  • Die FCM des Geräts sollte den Anforderungen der Module in der Systempartition entsprechen.
  • Der FCM für „system_ext“ sollte die Anforderungen der Module in der Partition „system_ext“ widerspiegeln.
  • Die FCM des Produkts sollte die Anforderungen der Module in der Produktpartition widerspiegeln.

Alle FCMs müssen mit den Änderungen eines OEMs am Framework in den Partitionen „system“, „product“ und „system_ext“ übereinstimmen. Wenn beispielsweise eine in der Produktpartition installierte App eine Anbietererweiterung einer HAL-Schnittstelle verwendet, sollte die Anforderung an die HAL-Schnittstelle im FCM des Produkts deklariert werden.

Beispieldatei für die Systemkompatibilitätsmatrix:

<?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 finden Sie im FCM-Lebenszyklus.

Produktkompatibilitätsmatrix

Die Produkt-FCM ist eine Framework-Kompatibilitätsmatrixdatei in der Produktpartition. Das VINTF-Objekt verbindet die FCMs des Produkts zur Laufzeit mit den FCMs in den Partitionen „system“ und „system_ext“.

Beispiel für eine FCM-Datei für Produkte:

<?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 für system_ext ist eine Framework-Kompatibilitätsmatrixdatei in der Partition „system_ext“. Das VINTF-Objekt verbindet die system_ext-FCM mit den FCMs in den System- und Produktpartitionen zur Laufzeit. Eine Beispiel-FCM-Datei für system_ext finden Sie in der Produktkompatibilitätsmatrix.

Gerätekompatibilitätsmatrix (DCM)

Die Gerätekompatibilitätsmatrix beschreibt eine Reihe von Anforderungen, die das Gerät vom Framework erwartet (Anforderungen, die beim Start und bei der Over-the-air-Aktualisierung erzwungen werden).

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 können in der Quelldatei im Android-Quellbaum fehlen und werden bei der Buildzeit von assemble_vintf geschrieben. In den entsprechenden Dateien auf dem Gerät müssen „erforderliche“ Tags vorhanden sein.

?xml
Optional. Sie liefert nur Informationen für den XML-Parser.
compatibility-matrix.version
Erforderlich. Metaversion dieser Kompatibilitätsmatrix. Hier werden die Elemente beschrieben, die in der Kompatibilitätsmatrix erwartet werden. Hat nichts mit der XML-Version zu tun.
compatibility-matrix.type
Erforderlich. Art dieser Kompatibilitätsmatrix:
  • "device": Matrix der Gerätekompatibilität.
  • "framework": Framework-Kompatibilitätsmatrix.
manifest.level
Erforderlich für die Framework-Kompatibilitätsmatrix. Unter Android 12 und höher in den Framework-Kompatibilitätsmatrixdateien in den Partitionen „product“ und „system_ext“ zulässig. Gibt die Version der Framework Compatibility Matrix (FCM-Version) dieser Datei an. Geben Sie dies nicht in der gerätespezifischen Framework-Kompatibilitätsmatrix an (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) erforderlich ist. HAL-Einträge werden durch ein <name>-Element gekennzeichnet. Es kann mehrere HAL-Einträge mit demselben Namen geben (impliziert die Bedingung „und“).
compatibility-matrix.hal.format
Optional. Folgende Werte sind möglich:
  • "hidl": HIDL HALs. Das ist die Standardeinstellung.
  • "aidl": AIDL HALs Nur gültig für die Metaversion 2.0 der Kompatibilitätsmatrix.
  • "native": native HALs.
compatibility-matrix.hal.optional (Android 15 oder niedriger)
Das
-Attribut ist optional und standardmäßig auf „falsch“ eingestellt. Gibt an, ob diese HAL für den Inhaber der Kompatibilitätsmatrix (Framework oder Gerät) optional ist. Wenn ein <hal>-Eintrag als optional gekennzeichnet ist, kann der Eigentümer mit dieser HAL arbeiten, sofern vorhanden, sie muss aber nicht vorhanden sein.
Warnung: Dieses Attribut wird nach Android 15 eingestellt und hat keine Auswirkungen mehr. Wenn HALs installiert werden müssen, sollte diese Anforderung in Tests erzwungen werden.
compatibility-matrix.hal.name
Erforderlich. Vollständiger Paketname dieser HAL. Beispiele:
  • android.hardware.camera (HIDL- oder AIDL-HAL)
  • GLES (native HAL, nur Name erforderlich)
compatibility-matrix.hal.version
Eine Liste von Versionsbereichen (siehe HAL-Übereinstimmungen), die definiert, welche Versionen der Inhaber der Kompatibilitätsmatrix (Framework oder Gerät) erwartet.

Für HIDL- und native HALs erforderlich, kann ohne Duplikate wiederholt werden. Das Format ist eines der folgenden:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (entspricht MAJOR.MINOR-MINOR)

Für AIDL HALs darf diese Datei nicht auf Geräten mit Android 11 oder niedriger vorhanden sein. Optional auf Geräten mit neueren Versionen. Wenn angegeben, ist das Format eines der folgenden:
  • 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 dieser 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 dieser Benutzeroberfläche. Verwenden Sie das Format Erweiterter regulärer Ausdruck.
compatibility-matrix.kernel
Optional, kann wiederholt werden. Geben Sie eine Liste der Kernelkonfigurationen an, die das Framework für jede Kernelversion benötigt.
Mehrere <kernel> mit derselben <version> können vorhanden sein, um eine „und“-Beziehung zu implizieren. Jede <kernel> ist ein „Fragment“ der Anforderungen, das nur aktiviert wird, wenn <conditions> erfüllt sind.
compatibility-matrix.kernel.version
Erforderlich. Kernel-Version. Format ist VERSION.MAJOR_REVISION.MINOR_REVISION. Version und Hauptversion müssen genau übereinstimmen. Die Minor-Revision definiert die Mindest-LTS-Version des Kernels, die vom Framework erwartet wird.
compatibility-matrix.kernel.condition
Optional. Für die ersten <kernel> der jeweiligen Version darf keine Datei vorhanden sein. Gibt eine Liste von Bedingungen an. Wenn die Bedingungen erfüllt sind, werden die in diesem <kernel>-Fragment angegebenen Anforderungen aktiviert.
compatibility-matrix.kernel.config
Optional, kann wiederholt werden. Listet CONFIG-Elemente auf, die für diese Kernelversion abgeglichen werden müssen. Jedes CONFIG-Element ist ein Schlüssel/Wert-Paar. Konfigurationselemente werden anhand des Schlüssels unterschieden.
compatibility-matrix.kernel.config.key
Erforderlich. Der 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:
  • string. Anführungszeichen werden weggelassen.
  • int. Dezimal- und Hexadezimalwerte (müssen mit 0x oder 0X) beginnen) sind zulässig. Wird als 64‑Bit-Ganzzahl interpretiert. Bei Überlauf wird die Zahl abgeschnitten. (Der Parser akzeptiert Werte von -264 + 1 bis 264 − 1, das 65. Bit wird abgeschnitten. Weitere Informationen finden Sie in der man-Seite für strtoull.)
  • range. Format ist [int]-[int], z.B. 10-20. Hexadezimalwerte sind zulässig und müssen mit 0x oder 0X beginnen. Zwei Grenzen müssen vorzeichenlose 64‑Bit-Ganzzahlen sein.
  • tristate. Gültige Werte sind y, m und n.
compatibility-matrix.kernel.config.value.type
Erforderlich. Der Werttyp des CONFIG-Elements. Mögliche Werte:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Erforderlich. Enthält alle sepolicy-bezogenen Einträge. Wird nur von der Framework-Kompatibilitätsmatrix verwendet.
compatibility-matrix.sepolicy.sepolicy-version
Erforderlich, kann wiederholt werden. Beschreibt die Anforderung an die Sepolicy-Version. Entspricht manifest.sepolicy.version. Jede Instanz eines Elements definiert einen Bereich von SEPolicy-Versionen.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Erforderlich. Gibt die policydb-Version an, mit der das Framework funktioniert.
compatibility-matrix.avb.vbmeta-version
Optional; wird nur von der Framework-Kompatibilitätsmatrix verwendet. Deklariert die AVB-Version, die zum Signieren von system.img verwendet wird. In Android 10 eingestellt.
compatibility-matrix.vendor-ndk
Optional; wird nur von der Gerätekompatibilitätsmatrix verwendet. Hier wird die Anforderung des VNDK-Anbieter-Snapshots deklariert. Wenn sie fehlt, wird keine VNDK-Anforderung an das System-Image gestellt.
compatibility-matrix.vendor-ndk.version
Erforderlich. Eine positive Ganzzahl, die eine VNDK-Version angibt, die vom Anbieter-Image benötigt wird.
compatibility-matrix.vendor-ndk.library
Optional, kann wiederholt werden. Hiermit werden eine Reihe von VNDK-Bibliotheken deklariert, die vom Anbieter-Image benötigt werden. Gleiche Semantik wie manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Optional, kann wiederholt werden; wird nur von der Gerätekompatibilitätsmatrix verwendet. Hier wird die Anforderung von Anbieter-Apps an System-SDK-Versionen deklariert. Wenn das System-SDK fehlt, wird keine Anforderung an das System-Image gestellt.