In diesem Abschnitt werden die Framework- und Gerätekompatibilitätsmatrizen sowie das Kompatibilitätsmatrixschema beschrieben. Informationen zu Match-Regeln finden Sie unter Matching-Regeln .
Framework-Kompatibilitätsmatrix (FCM)
Die Framework-Kompatibilitätsmatrix (FCM) beschreibt die Anforderungen des Frameworks an das Gerät, auf dem es läuft. Die Framework-Kompatibilitätsmatrix besteht aus der Systemkompatibilitätsmatrix, der Produktkompatibilitätsmatrix und der system_ext-Kompatibilitätsmatrix . Die Anforderungen des FCM müssen durch das Gerätemanifest erfüllt werden (Anforderungen, die zur Build-Zeit, zur Laufzeit und in VTS erzwungen werden).
Der system_ext-FCM und der Produkt-FCM sind Ergänzungen des gerätespezifischen FCM (in der Systempartition installiert).
- Der Geräte-FCM sollte die Anforderungen der Module in der Systempartition widerspiegeln.
- Der system_ext-FCM sollte die Anforderungen der Module in der system_ext-Partition widerspiegeln.
- Der Produkt-FCM sollte die Anforderungen der Module in der Produktpartition widerspiegeln.
Alle FCMs sollten mit den Änderungen eines OEM am Framework in den System-, Produkt- und system_ext-Partitionen übereinstimmen. Wenn beispielsweise eine in der Produktpartition installierte App eine Herstellererweiterung einer HAL-Schnittstelle verwendet, sollte die HAL-Schnittstellenanforderung im Produkt-FCM deklariert werden.
Beispiel einer 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 Einzelheiten finden Sie unter FCM-Lebenszyklus .
Produktkompatibilitätsmatrix
Das Produkt-FCM ist eine Framework-Kompatibilitätsmatrixdatei in der Produktpartition. Das VINTF-Objekt verbindet den Produkt-FCM zur Laufzeit mit FCMs in den System- und system_ext-Partitionen.
Beispiel einer Produkt-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
Der 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. Eine Beispieldatei für system_ext FCM 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 zum OTA-Zeitpunkt durchgesetzt 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>
Kompatibilitätsmatrixschema
In diesem Abschnitt wird die Bedeutung dieser XML-Tags beschrieben. Einige „erforderliche“ Tags können in der Quelldatei im Android-Quellbaum fehlen und von assemble_vintf
zur Erstellungszeit geschrieben werden. „Erforderliche“ Tags müssen in den entsprechenden Dateien auf dem Gerät vorhanden sein.
-
?xml
- Optional. Es stellt lediglich Informationen für den XML-Parser bereit.
-
compatibility-matrix.version
- Erforderlich. Metaversion dieser Kompatibilitätsmatrix. Beschreibt die in der Kompatibilitätsmatrix erwarteten Elemente. Hat nichts mit der XML-Version zu tun.
-
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 sind Framework-Kompatibilitätsmatrixdateien in den Partitionen „product“ und „system_ext“ zulässig. Gibt die Framework-Kompatibilitätsmatrix-Version (FCM-Version) dieser Datei an. Deklarieren Sie dies nicht in der gerätespezifischen Framework-Kompatibilitätsmatrix (z. B.
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
). -
compatibility-matrix.hal
- Optional und kann wiederholt werden. Listet einen einzelnen HAL (HIDL oder nativ) auf, der vom Eigentümer 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 „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 hat standardmäßig den Wert „false“. Gibt an, ob dieser HAL für den Eigentümer der Kompatibilitätsmatrix (Framework oder Gerät) optional ist. Wenn ein
<hal>
-Eintrag als optional markiert ist, bedeutet dies, dass der Eigentümer mit diesem HAL arbeiten kann, sofern vorhanden, es aber nicht erforderlich ist, dass es 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 Namen)
-
-
compatibility-matrix.hal.version
- Eine Liste von Versionsbereichen (siehe HAL-Matches ), die definiert, welche Versionen der Besitzer 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 auf Geräten mit Android 11 und niedriger nicht vorhanden sein. Optional auf Geräten mit späteren Versionen. Falls angegeben, ist das Format eines der folgenden:-
VERSION_MIN - VERSION_MAX
-
VERSION
(entsprichtVERSION - VERSION
)
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 Instanznamenmuster 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 zu implizieren. 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. Die Nebenrevision definiert die minimale LTS-Version des Kernels, die das Framework erwartet. -
compatibility-matrix.kernel.condition
- Optional. Darf nicht für den ersten
<kernel>
jeder Version vorhanden sein. Gibt eine Liste von Bedingungen an. Wenn die Bedingungen erfüllt sind, werden die in diesem<kernel>
-Fragment genannten Anforderungen aktiviert. -
compatibility-matrix.kernel.config
- Optional, kann wiederholt werden. Listet
CONFIG
Elemente auf, die für diese Kernel-Version übereinstimmen müssen. JedesCONFIG
Element ist ein Schlüssel-Wert-Paar; Konfigurationselemente werden nach Schlüssel unterschieden. -
compatibility-matrix.kernel.config.key
- Erforderlich. 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
. Zitate werden weggelassen. -
int
. Es werden dezimale und hexadezimale Werte (müssen mit0x
oder0X)
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 Strtoull-Manpage .) -
range
. Das Format ist[int]-[int]
, z. B.10-20
. Hexadezimale Werte werden akzeptiert und müssen mit0x
oder0X
beginnen. Zwei Grenzen müssen eine vorzeichenlose 64-Bit-Ganzzahl sein. -
tristate
. Gültige Werte sindy
,m
undn
.
-
-
compatibility-matrix.kernel.config.value.type
- Erforderlich. Typ des Werts des
CONFIG
Elements, einer von:-
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 AVB-Version, die zum Signieren
system.img
verwendet wird. In Android 10 veraltet. -
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 eine Reihe 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 System-Image keine System-SDK-Anforderung gestellt.