相容性矩陣

本節將說明架構與裝置相容性矩陣,以及 相容性矩陣結構定義。適用對象 比對規則,請參閱比對 規則

架構相容性矩陣 (FCM)

架構相容性矩陣 (FCM) 說明瞭 保持運作的流程架構相容性矩陣由系統 相容性矩陣,也就是產品相容性矩陣system_ext 相容性矩陣 裝置資訊清單必須符合 FCM 的規定 (相關規定 會在建構時間、執行階段和 VTS 中強制執行)。

system_ext FCM 和產品 FCM 是裝置專用 FCM (已安裝) 的補充資料 多個部分)。

  • 裝置 FCM 應反映 系統分區
  • system_ext FCM 應反映 system_ext 分區中各模組的要求。
  • 產品 FCM 應反映 產品劃分

所有 FCM 都必須符合原始設備製造商 (OEM) 在系統、產品 和 system_ext 分區舉例來說,如果產品分區中安裝的應用程式使用廠商擴充功能 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」 Lifecycle

產品相容性矩陣

產品 FCM 是產品中的架構相容性矩陣檔案 VINTF 物件會將產品 FCM 和系統中的 FCM 加入,以及 system_ext 執行多個分區

產品 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 項目是透過 <name> 元素來區分; 可能會有多個名稱相同的 HAL 項目 (意即「and」條件)。
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 比對) ,定義相容性矩陣 (架構或 裝置) 應用程式。

如果是 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
選用,可以重複播放。需要在此類型的執行個體名稱模式清單 存取 API使用 完整 規則運算式格式。
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 項目都是一個鍵/值 配對;設定項目是透過鍵來區分。
compatibility-matrix.kernel.config.key
必要。CONFIG 項目的鍵名稱。開頭是 CONFIG_
compatibility-matrix.kernel.config.value
必要。CONFIG 項目的值。格式取決於類型:
  • string。省略引號。
  • int。十進位和十六進位 (開頭必須為 0x) 或 0X) 值。解譯為 64 位元整數。 溢位會導致截斷。(剖析器接受介於 -264 + 1 之間的值 範圍 264 - 1,第 65 位元截斷;詳情請參閱 Strtoull 手冊頁面)。
  • range。格式為 [int]-[int],例如 10-20。可接受十六進位值,且開頭必須為 0x0X。兩個界線必須是未經簽署的 64 位元 整數值。
  • tristate。有效值為 ymn
compatibility-matrix.kernel.config.value.type
必要。CONFIG 項目的類型值類型,下列其中一個:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
必要。包含所有政策相關項目。僅適用於 架構相容性矩陣
compatibility-matrix.sepolicy.sepolicy-version
必要,可以重複。說明退貨政策版本的規定。 對應於 manifest.sepolicy.version。容器的每個執行個體 元素會定義特定政策版本的範圍。
compatibility-matrix.sepolicy.kernel-sepolicy-version
必要。宣告架構能使用的 policydb 版本 。
compatibility-matrix.avb.vbmeta-version
選用;僅由架構相容性矩陣使用宣告 AVB 用於簽署 system.img 的版本。已在 Android 中淘汰 10.
compatibility-matrix.vendor-ndk
選用;僅供裝置相容性矩陣使用。宣告 滿足 VNDK 供應商數據匯報的需求。如果缺少,就不會做出 VNDK 規定 當機與 ANR 發生率
compatibility-matrix.vendor-ndk.version
必要。一個正整數,可宣告 供應商圖片。
compatibility-matrix.vendor-ndk.library
選用,可以重複播放。宣告 品牌圖片。語意與 manifest.vendor-ndk.library 相同。
compatibility-matrix.system-sdk.version
選用 (可重複)僅供裝置相容性矩陣使用。宣告 。如未提供,則沒有 System SDK 更新要求