Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

相容性矩陣

本節介紹框架和設備兼容性矩陣以及兼容性矩陣架構。有關匹配規則,請參閱“匹配規則”

框架兼容性矩陣(FCM)

框架兼容性矩陣(FCM)描述了框架在運行設備上的要求。框架兼容性矩陣由系統兼容性矩陣,產品兼容性矩陣system_ext兼容性矩陣組成。設備清單必須滿足FCM的要求(在構建時,運行時和VTS中強制執行的要求)。

system_ext FCM和產品FCM是設備特定FCM(安裝在系統分區中)的補充。

  • 設備FCM應該反映系統分區中模塊的要求。
  • system_ext FCM應反映system_ext分區中模塊的要求。
  • 產品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>
        <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
框架兼容性矩陣所需。指定此文件的框架兼容性列表版本(FCM版本)。不應在特定於設備的框架兼容性矩陣(即DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE )中聲明。
compatibility-matrix.hal
可選,可以重複。列出存在的兼容性矩陣(框架或設備)的所有者所需的單個HAL(HIDL或本機)。 HAL條目由<name>元素區分;可以有多個具有相同名稱的HAL條目(表示“ and”條件)。
compatibility-matrix.hal.format
可選的。值可以是以下之一:
  • "hidl" :HIDL HAL。這是默認值。
  • "aidl"AIDL HAL 。僅在兼容矩陣meta版本2.0上有效。
  • "native" :本地HAL。
compatibility-matrix.hal.optional
該屬性是可選的,默認為false。說明此HAL對於兼容性矩陣(框架或設備)的所有者是否是可選的。如果<hal>條目被標記為可選,則表示所有者可以使用此HAL(如果存在),但不需要該HAL。
compatibility-matrix.hal.name
需要。此HAL的完整軟件包名稱。例子:
  • android.hardware.camera (HIDL或AIDL HAL)
  • GLES (本地HAL,僅要求名稱)
compatibility-matrix.hal.version
HIDL和本機HAL必需,可以重複而不重複。不得為AIDL HAL指定。版本範圍的列表(請參閱HAL匹配項),用於定義兼容性矩陣(框架或設備)的所有者期望的版本。
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項都是一個鍵值對。配置項通過鍵區分。
compatibility-matrix.kernel.config.key
需要。 CONFIG項的鍵名。以CONFIG_
compatibility-matrix.kernel.config.value
需要。 CONFIG項目的值。格式取決於類型:
  • string 。引號被省略。
  • int接受十進制和十六進制(必須以0x0X) 0x 0X)值。解釋為64位整數;溢出導致截斷。 (解析器從-2 64 + 1〜2 64接受的值- 1,第65位被截斷;有關詳細信息請參閱strtoull將人頁。)
  • range 。格式為[int]-[int] ,例如10-20 。接受十六進制值,並且必須以0x0X 0x 。兩個邊界必須是無符號的64位整數。
  • tristate 。有效值為ymn
compatibility-matrix.kernel.config.value.type
需要。 CONFIG項的值的類型,其中之一:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
需要。包含所有與Sepolicy相關的條目。僅由框架兼容性矩陣使用。
compatibility-matrix.sepolicy.sepolicy-version
必需,可以重複。介紹對隔離版本的要求。對應於manifest.sepolicy.version 。元素的每個實例都定義了一系列sepolicy版本。
compatibility-matrix.sepolicy.kernel-sepolicy-version
需要。聲明框架使用的policydb版本。
compatibility-matrix.avb.vbmeta-version
可選的;僅由框架兼容性矩陣使用。聲明用於簽署system.imgAVB版本。在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
可選,可以重複;僅由設備兼容性矩陣使用。聲明供應商應用對System SDK版本的要求。如果缺少,則在系統映像上沒有System SDK要求。