本節描述框架和設備相容性矩陣以及相容性矩陣模式。符合規則請參閱符合規則。
框架相容性矩陣 (FCM)
框架相容性矩陣 (FCM) 描述了框架對其運行的設備的要求。框架相容性矩陣由系統相容性矩陣、產品相容性矩陣和system_ext相容性矩陣組成。設備清單必須滿足 FCM 的要求(在建置時、執行時間和 VTS 中強制執行的要求)。
system_ext FCM 和產品 FCM 是設備特定 FCM(安裝在系統分割區)的補充。
所有 FCM 應與 OEM 對系統、產品和 system_ext 分區中的框架的修改保持一致。例如,如果安裝在產品分區中的應用程式使用 HAL 介面的供應商擴展,則應在產品 FCM 中聲明 HAL 介面要求。
系統相容性矩陣檔案範例:
<?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>
有關更多詳細信息,請參閱FCM 生命週期。
產品相容性矩陣
產品FCM是產品分區中的框架相容性矩陣檔。 VINTF 物件在運作時將產品 FCM 與系統和 system_ext 分區中的 FCM 連接起來。
產品 FCM 檔案範例:
<?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相容性矩陣
system_ext FCM 是 system_ext 分區中的框架相容性矩陣檔案。 VINTF 物件在執行時將 system_ext FCM 與系統和產品分區中的 FCM 連接起來。有關範例 system_ext FCM 文件,請參閱產品相容性矩陣。
設備相容性矩陣 (DCM)
設備相容性矩陣描述了設備期望框架提出的一組要求(在啟動和 OTA 時強制執行的要求)。
DCM 檔案範例:
<?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>
相容性矩陣架構
本節描述這些 XML 標記的含義。 Android 原始碼樹中的原始檔案中可能會缺少一些「必需」標籤,這些標籤是在建置時由assemble_vintf
寫入的。 「必需」標籤必須存在於裝置上的對應檔案中。
-
?xml
- 選修的。它只會向 XML 解析器提供資訊。
-
compatibility-matrix.version
- 必需的。此相容性矩陣的元版本。描述相容性矩陣中預期的元素。與 XML 版本無關。
-
compatibility-matrix.type
- 必需的。此相容性矩陣的類型:
-
"device"
:設備相容性矩陣。 -
"framework"
:框架相容性矩陣。
-
-
manifest.level
- 框架相容性矩陣所需。在 Android 12 及更高版本中,允許在產品和 system_ext 分區中使用框架相容性矩陣檔案。指定此檔案的框架相容性矩陣版本(FCM 版本)。不要在特定於設備的框架相容性矩陣(即
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE
)中聲明這一點。 -
compatibility-matrix.hal
- 可選且可以重複。列出相容性矩陣(框架或裝置)擁有者要求存在的單一 HAL(HIDL 或本機)。 HAL 條目由
<name>
元素區分;可以有多個具有相同名稱的 HAL 條目(隱含「與」條件)。 -
compatibility-matrix.hal.format
- 選修的。值可以是以下之一:
-
"hidl"
:HIDL HAL。這是預設值。 -
"aidl"
: AIDL HAL 。僅在相容性矩陣元版本 2.0 上有效。 -
"native"
:本機 HAL。
-
-
compatibility-matrix.hal.optional
- 屬性是可選的,預設為 false。指明此 HAL 對於相容性矩陣(框架或裝置)的擁有者是否是可選的。如果
<hal>
條目被標記為可選,則表示擁有者可以使用此 HAL(如果存在),但不要求它存在。 -
compatibility-matrix.hal.name
- 必需的。該 HAL 的完整套件名稱。例子:
-
android.hardware.camera
(HIDL 或 AIDL HAL) -
GLES
(原生 HAL,只需名稱)
-
-
compatibility-matrix.hal.version
- 版本範圍清單(請參閱HAL matches ),定義相容性矩陣(框架或裝置)擁有者期望的版本。
對於 HIDL 和本機 HAL,需要,可以重複而不重複。格式為以下之一:-
MAJOR . MINOR_MIN - MINOR_MAX
-
MAJOR . MINOR
(相當於MAJOR . MINOR - MINOR
)
對於 AIDL HAL,不得出現在運行 Android 11 及更低版本的裝置上。在運行更高版本的設備上可選。如果指定,格式為以下之一:-
VERSION_MIN - VERSION_MAX
-
VERSION
(相當於VERSION - VERSION
)
1
。 -
-
compatibility-matrix.hal.interface
- 可選,可以重複。此 HAL 所需介面的清單。
-
compatibility-matrix.hal.interface.name
- 必需的。介面名稱。
-
compatibility-matrix.hal.interface.instance
- 可選,可以重複。此介面所需實例的清單。
-
compatibility-matrix.hal.interface.regex-instance
- 可選,可以重複。此介面上所需的實例名稱模式的清單。使用擴展正規表示式格式。
-
compatibility-matrix.kernel
- 可選,可以重複。指定框架在每個核心版本上所需的核心配置清單。
可以存在多個<version>
的<kernel>
以暗示「與」關係。每個<kernel>
都是僅當滿足<conditions>
時才啟用的要求的「片段」。 -
compatibility-matrix.kernel.version
- 必需的。內核版本。格式為
VERSION . MAJOR_REVISION . MINOR_REVISION
。版本和主要修訂必須完全匹配。次要修訂定義了框架期望的核心的最低 LTS 版本。 -
compatibility-matrix.kernel.condition
- 選修的。每個版本的第一個
<kernel>
不得存在。指定條件清單。當滿足條件時,將啟用此<kernel>
片段中規定的要求。 -
compatibility-matrix.kernel.config
- 可選,可以重複。列出必須與該核心版本相符的
CONFIG
項。每個CONFIG
項都是一個鍵值對;配置項透過key來區分。 -
compatibility-matrix.kernel.config.key
- 必需的。
CONFIG
項的鍵名。以CONFIG_
開頭。 -
compatibility-matrix.kernel.config.value
- 必需的。
CONFIG
項的值。格式取決於類型:-
string
。省略引號。 -
int
。接受十進制和十六進制(必須以0x
或0X)
值。解釋為 64 位元整數;溢位會導致截斷。 (解析器接受從 -2 64 + 1 到 2 64 - 1 的值,第 65 位元被截斷;有關詳細信息,請參閱strtoull 手冊頁。) -
range
。格式為[int]-[int]
,例如10-20
。接受十六進位值,並且必須以0x
或0X
開頭。兩個邊界必須是無符號 64 位元整數。 -
tristate
。有效值為y
、m
和n
。
-
-
compatibility-matrix.kernel.config.value.type
- 必需的。
CONFIG
項的值的類型,其中之一:-
string
-
int
-
range
-
tristate
-
-
compatibility-matrix.sepolicy
- 必需的。包含所有與 sepolicy 相關的條目。僅由框架相容性矩陣使用。
-
compatibility-matrix.sepolicy.sepolicy-version
- 必填,可重複。描述對sepolicy版本的要求。對應
manifest.sepolicy.version
。元素的每個實例都定義一系列 sepolicy 版本。 -
compatibility-matrix.sepolicy.kernel-sepolicy-version
- 必需的。聲明框架使用的
policydb
版本。 -
compatibility-matrix.avb.vbmeta-version
- 選修的;僅由框架相容性矩陣使用。聲明用於簽署
system.img
AVB 版本。在 Android 10 中已棄用。 -
compatibility-matrix.vendor-ndk
- 選修的;僅由設備相容性矩陣使用。聲明 VNDK 供應商快照的要求。如果遺失,則對系統映像沒有 VNDK 要求。
-
compatibility-matrix.vendor-ndk.version
- 必需的。一個正整數,聲明供應商映像所需的 VNDK 版本。
-
compatibility-matrix.vendor-ndk.library
- 可選,可以重複。聲明供應商映像所需的一組 VNDK 函式庫。與
manifest.vendor-ndk.library
語意相同。 -
compatibility-matrix.system-sdk.version
- 可選,可重複;僅由設備相容性矩陣使用。聲明供應商應用程式對系統 SDK 版本的要求。如果缺少,則對系統映像沒有系統 SDK 要求。