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
(entsprichtMAJOR.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
(entsprichtVERSION-VERSION
)
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. JedesCONFIG
-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 mitCONFIG_
. 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 mit0x
oder0X)
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 mit0x
oder0X
beginnen. Zwei Grenzen müssen vorzeichenlose 64‑Bit-Ganzzahlen sein.tristate
. Gültige Werte sindy
,m
undn
.
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.