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
(entsprichtMAJOR . 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
(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 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. 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. JedesCONFIG
-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 mitCONFIG_
. -
compatibility-matrix.kernel.config.value
- Erforderlich. Wert des
CONFIG
. Format abhängig vom Typ:-
string
. Zitate werden weggelassen. -
int
. Dezimal- und Hexadezimalwerte (muss mit0x
oder0X)
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]
, zB10-20
. Hexadezimalwerte werden akzeptiert und müssen mit0x
oder0X
. 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
, 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.
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
(entsprichtMAJOR . 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
(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 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. 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. JedesCONFIG
-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 mitCONFIG_
. -
compatibility-matrix.kernel.config.value
- Erforderlich. Wert des
CONFIG
. Format abhängig vom Typ:-
string
. Zitate werden weggelassen. -
int
. Dezimal- und Hexadezimalwerte (muss mit0x
oder0X)
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]
, zB10-20
. Hexadezimalwerte werden akzeptiert und müssen mit0x
oder0X
. 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
, 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.
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
(entsprichtMAJOR . 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
(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 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. 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. JedesCONFIG
-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 mitCONFIG_
. -
compatibility-matrix.kernel.config.value
- Erforderlich. Wert des
CONFIG
. Format abhängig vom Typ:-
string
. Zitate werden weggelassen. -
int
. Dezimal- und Hexadezimalwerte (muss mit0x
oder0X)
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]
, zB10-20
. Hexadezimalwerte werden akzeptiert und müssen mit0x
oder0X
. 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
, 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.