Kompatibilitätsmatrizen

In diesem Abschnitt werden die Framework- und Gerätekompatibilitätsmatrizen und das Kompatibilitätsmatrixschema beschrieben. Übereinstimmungsregeln finden Sie unter Übereinstimmungsregeln .

Rahmenkompatibilitätsmatrix (FCM)

Die Framework Compatibility Matrix (FCM) beschreibt die Anforderungen des Frameworks an das Gerät, auf dem es läuft. Die Rahmenkompatibilitä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, zur Laufzeit und in VTS erzwungen werden).

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

  • Der Geräte-FCM sollte die Anforderungen der Module in der Systempartition widerspiegeln.
  • Der system_ext-FCM sollte die Anforderungen von Modulen in der system_ext-Partition widerspiegeln.
  • Der Produkt-FCM sollte die Anforderungen durch Module in der Produktpartition widerspiegeln.

Alle FCMs sollten mit den Modifikationen eines OEM am Framework in den System-, Produkt- und System_ext-Partitionen übereinstimmen. Wenn beispielsweise eine in der Produktpartition installierte App eine Anbietererweiterung einer HAL-Schnittstelle verwendet, sollte die HAL-Schnittstellenanforderung im Produkt-FCM 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 Einzelheiten finden Sie unter FCM-Lebenszyklus .

Produktkompatibilitätsmatrix

Der Produkt-FCM ist eine Framework-Kompatibilitätsmatrixdatei in der Produktpartition. Das VINTF-Objekt verbindet zur Laufzeit den Produkt-FCM mit den FCMs in den Partitionen system und system_ext.

Beispielprodukt-FCM-Datei:

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

Gerätekompatibilitätsmatrix (DCM)

Die Gerätekompatibilitätsmatrix beschreibt eine Reihe von Anforderungen, die das Gerät vom Framework erwartet (Anforderungen, die zum Start- und OTA-Zeitpunkt erzwungen werden).

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

Dieser Abschnitt beschreibt die Bedeutung dieser XML-Tags. Einige „erforderliche“ Tags können in der Quelldatei in der Android-Quellstruktur fehlen und zur Erstellungszeit von assemble_vintf geschrieben werden. „Erforderliche“ Tags müssen in den entsprechenden Dateien auf dem Gerät vorhanden sein.

?xml
Optional. Es liefert nur Informationen an den XML-Parser.
compatibility-matrix.version
Erforderlich. Meta-Version dieser Kompatibilitätsmatrix. Beschreibt die in der Kompatibilitätsmatrix erwarteten Elemente. Unabhängig von der XML-Version.
compatibility-matrix.type
Erforderlich. Typ dieser Kompatibilitätsmatrix:
  • "device" : Gerätekompatibilitätsmatrix.
  • "framework" : Framework-Kompatibilitätsmatrix.
manifest.level
Erforderlich für die Framework-Kompatibilitätsmatrix. In Android 12 und höher zulässig in Framework-Kompatibilitätsmatrixdateien in den Partitionen product und system_ext. Gibt die Version der Framework-Kompatibilitätsmatrix (FCM-Version) dieser Datei an. Deklarieren Sie dies nicht in der gerätespezifischen Framework-Kompatibilitätsmatrix (dh DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Optional und kann wiederholt werden. Listet eine einzelne HAL (HIDL oder nativ) auf, die vom Besitzer der Kompatibilitätsmatrix (Framework oder Gerät) vorhanden sein muss. HAL-Einträge werden durch ein <name> -Element unterschieden; es können mehrere HAL-Einträge mit demselben Namen vorhanden sein (impliziert eine "und"-Bedingung).
compatibility-matrix.hal.format
Optional. Der Wert kann einer der folgenden sein:
  • "hidl" : HIDL-HALs. Dies ist die Standardeinstellung.
  • "aidl" : AIDL-HALs . Nur gültig für Kompatibilitätsmatrix-Metaversion 2.0.
  • "native" : native HALs.
compatibility-matrix.hal.optional
Das Attribut ist optional und standardmäßig auf „false“ gesetzt. Gibt an, ob diese HAL für den Eigentümer der Kompatibilitätsmatrix (Framework oder Gerät) optional ist. Wenn ein <hal> -Eintrag als optional gekennzeichnet ist, bedeutet dies, dass der Besitzer mit dieser HAL arbeiten kann, falls vorhanden, aber nicht erforderlich ist, dass sie vorhanden ist.
compatibility-matrix.hal.name
Erforderlich. Vollständiger Paketname dieser HAL. Beispiele:
  • android.hardware.camera (HIDL oder AIDL HAL)
  • GLES (natives HAL, erfordert nur den Namen)
compatibility-matrix.hal.version
Eine Liste von Versionsbereichen (siehe HAL-Matches ), die definiert, welche Versionen der Eigentümer der Kompatibilitätsmatrix (Framework oder Gerät) erwartet.

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

Für AIDL HALs, darf nicht auf Geräten mit Android 11 und darunter vorhanden sein. Optional auf Geräten mit späteren Versionen. Falls angegeben, ist das Format eines der folgenden:
  • VERSION_MIN - VERSION_MAX
  • VERSION (entspricht VERSION - VERSION )
Wenn nicht angegeben, ist der Wert standardmäßig 1 .
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 Schnittstelle. Verwenden Sie das erweiterte reguläre Ausdrucksformat .
compatibility-matrix.kernel
Optional, kann wiederholt werden. Geben Sie eine Liste der Kernelkonfigurationen an, die das Framework für jede Kernelversion benötigt.
Es können mehrere <kernel> mit derselben <version> vorhanden sein, um eine „und“-Beziehung anzudeuten. Jeder <kernel> ist ein "Fragment" der Anforderungen, die nur aktiviert werden, wenn <conditions> erfüllt sind.
compatibility-matrix.kernel.version
Erforderlich. Kernelversion. Format ist VERSION . MAJOR_REVISION . MINOR_REVISION . Version und Hauptrevision müssen genau übereinstimmen. Minor Revision definiert die minimale LTS-Version des Kernels, die das Framework erwartet.
compatibility-matrix.kernel.condition
Optional. Darf für den ersten <kernel> jeder Version nicht vorhanden sein. Gibt eine Liste von Bedingungen an. Nur 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 Kernel-Version abgeglichen werden müssen. Jedes CONFIG -Element ist ein Schlüssel-Wert-Paar; Konfigurationselemente werden durch Schlüssel unterschieden.
compatibility-matrix.kernel.config.key
Erforderlich. Schlüsselname des CONFIG Items. Beginnt mit CONFIG_ .
compatibility-matrix.kernel.config.value
Erforderlich. Wert des CONFIG . Format abhängig vom Typ:
  • string . Zitate werden weggelassen.
  • int . Dezimal- und Hexadezimalwerte (muss mit 0x oder 0X) werden akzeptiert. Wird als 64-Bit-Ganzzahl interpretiert; Überläufe führen zu einer Kürzung. (Der Parser akzeptiert Werte von -2 64 + 1 bis 2 64 - 1, das 65. Bit wird abgeschnitten; Einzelheiten finden Sie in der Manpage strtoull .)
  • range . Das Format ist [int]-[int] , zB 10-20 . Hexadezimalwerte werden akzeptiert und müssen mit 0x oder 0X . Zwei Grenzen müssen eine vorzeichenlose 64-Bit-Ganzzahl sein.
  • tristate . Gültige Werte sind y , m und n .
compatibility-matrix.kernel.config.value.type
Erforderlich. Typ des Werts des CONFIG , einer der folgenden:
  • 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. Deklariert die policydb Version, mit der das Framework arbeitet.
compatibility-matrix.avb.vbmeta-version
Optional; Wird nur von der Framework-Kompatibilitätsmatrix verwendet. Deklariert die zum Signieren von system.img verwendete AVB-Version . Veraltet in Android 10.
compatibility-matrix.vendor-ndk
Optional; Wird nur von der Gerätekompatibilitätsmatrix verwendet. Deklariert die Anforderung des VNDK-Anbieter-Snapshots. Wenn es fehlt, wird für das Systemabbild keine VNDK-Anforderung gestellt.
compatibility-matrix.vendor-ndk.version
Erforderlich. Eine positive Ganzzahl, die eine VNDK-Version deklariert, die für das Anbieter-Image erforderlich ist.
compatibility-matrix.vendor-ndk.library
Optional, kann wiederholt werden. Deklariert einen Satz von VNDK-Bibliotheken, die für das Anbieter-Image erforderlich sind. Gleiche Semantik wie manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
Optional, kann wiederholt werden; Wird nur von der Gerätekompatibilitätsmatrix verwendet. Deklariert die Anforderung von Anbieter-Apps für System-SDK-Versionen. Wenn es fehlt, wird für das Systemabbild keine System-SDK-Anforderung gestellt.