清單

從A VINTF對象聚集數據設備清單框架清單文件(XML)。這兩個體現共享的格式,雖然不是所有的元素都適用於(有關模式的詳細信息,請參見清單文件的架構)。

設備清單

設備清單(由設備提供)由供應商清單和 ODM 清單組成。

  • 供應商清單指定了 SoC 通用的 HAL、SELinux 策略版本等。建議將被放置在所述的Android源樹device/ VENDOR / DEVICE /manifest.xml ,但多個片段文件可以使用。有關詳細信息,請參見清單片段,並生成碎片DM
  • 在ODM清單列出的HAL特定於產品的ODM分區。 VINTF 對象按以下順序加載 ODM 清單:
    1. 如果SKU被定義(其中SKU是該屬性的值ro.boot.product.hardware.sku/odm/etc/vintf/manifest_ SKU .xml
    2. /odm/etc/vintf/manifest.xml
    3. 如果SKU被定義, /odm/etc/manifest_ SKU .xml
    4. /odm/etc/manifest.xml
  • 供應商清單列出了供應商分區中特定於產品的 HAL。 VINTF 對象按以下順序加載供應商清單:
    1. 如果SKU被定義(其中SKU是該屬性的值ro.boot.product.vendor.sku/vendor/etc/vintf/manifest_ SKU .xml
    2. /vendor/etc/vintf/manifest.xml
  • VINTF 對象按以下順序加載設備清單:
    1. 如果供應商清單存在,請結合以下內容:
      1. 供應商清單
      2. 可選的供應商清單片段
      3. 可選的 ODM 清單
      4. 可選的 ODM 清單片段
    2. 否則,如果 ODM 清單存在,則將 ODM 清單與可選的 ODM 清單片段合併。
    3. /vendor/manifest.xml (遺留,沒有片段)

    注意:

    • 在舊設備上,使用舊供應商清單和 ODM 清單。 ODM 清單可能會完全覆蓋舊的供應商清單。
    • 在搭載 Android 9 的設備上,ODM 清單與供應商清單相結合。
    • 當組合清單,到後來出現在列表中可以覆蓋較早出現在列表中體現標籤清單,提供清單,在清單後的標籤有屬性override="true" 。例如,ODM清單可以覆蓋一些<hal>從供應商清單標籤。見屬性的文件override之下。

此設置使具有相同電路板的多個產品能夠共享相同的供應商映像(提供通用 HAL)但具有不同的 ODM 映像(指定特定於產品的 HAL)。

這是一個示例供應商清單。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<manifest version="2.0" type="device" target-level="1">
    <hal>
        <name>android.hardware.camera</name>
        <transport>hwbinder</transport>
        <version>3.4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>legacy/0</instance>
            <instance>proprietary/0</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <version>2.0</version>
        <interface>
            <name>INfc</name>
            <instance>nfc_nci</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <transport>hwbinder</transport>
        <fqname>@2.0::INfc/default</fqname>
    </hal>
    <hal>
        <name>android.hardware.drm</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ICryptoFactory</name>
            <instance>default</instance>
        </interface>
        <interface>
            <name>IDrmFactory</name>
            <instance>default</instance>
        </interface>
        <fqname>@1.1::ICryptoFactory/clearkey</fqname>
        <fqname>@1.1::IDrmFactory/clearkey</fqname>
    </hal>
    <hal format="aidl">
        <name>android.hardware.light</name>
        <version>1</version>
        <fqname>ILights/default</fqname>
    </hal>
    <hal format="aidl">
        <name>android.hardware.power</name>
        <version>2</version>
        <interface>
            <name>IPower</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <hal format="native">
        <name>GLES</name>
        <version>1.1</version>
        <version>2.0</version>
        <version>3.0</version>
    </hal>
    <sepolicy>
        <version>25.0</version>
    </sepolicy>
</manifest>

這是一個示例 ODM 清單。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<manifest version="1.0" type="device">
    <!-- camera 3.4 in vendor manifest is ignored -->
    <hal override="true">
        <name>android.hardware.camera</name>
        <transport>hwbinder</transport>
        <version>3.5</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>legacy/0</instance>
        </interface>
    </hal>
    <!-- NFC is declared to be disabled -->
    <hal override="true">
        <name>android.hardware.nfc</name>
        <transport>hwbinder</transport>
    </hal>
    <hal>
        <name>android.hardware.power</name>
        <transport>hwbinder</transport>
        <version>1.1</version>
        <interface>
            <name>IPower</name>
            <instance>default</instance>
        </interface>
    </hal>
</manifest>

這是 OTA 包中的示例設備清單。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<manifest version="1.0" type="device" target-level="1">
    <!-- hals ommited -->
    <kernel version="4.4.176">
        <config>
            <key>CONFIG_ANDROID</key>
            <value>y</value>
        </config>
        <config>
            <key>CONFIG_ARM64</key>
            <value>y</value>
        </config>
    <!-- other configs ommited -->
    </kernel>
</manifest>

有關詳細信息,請參閱設備清單發展

框架清單

框架清單文件由系統清單、產品清單和 system_ext 清單組成。

  • 該系統表現(由谷歌提供)被手動地產生並在生活在Android源樹/system/libhidl/manifest.xml
  • 產品清單(由設備提供)列出了由安裝在產品分區上的模塊提供服務的 HAL。
  • system_ext 清單(由設備提供)列出了以下內容:
    • 由安裝在 system_ext 分區上的模塊提供服務的 HAL;
    • VNDK 版本;
    • 系統SDK版本。

與設備清單類似,可以使用多個片段文件。有關詳細信息,請參見清單片段

這是一個示例框架清單。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<manifest version="1.0" type="framework">
    <hal>
        <name>android.hidl.allocator</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <transport arch="32+64">passthrough</transport>
        <version>1.0</version>
        <interface>
            <name>IMapper</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.manager</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.frameworks.sensorservice</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal max-level="5">
        <name>android.frameworks.schedulerservice</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
            <name>ISchedulingPolicyService</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</manifest>

清單片段

在 Android 10 及更高版本中,您可以將清單條目與構建系統中的 HAL 模塊相關聯。這使得在構建系統中有條件地包含 HAL 模塊變得更加容易。

例子

在您的Android.bpAndroid.mk文件,添加vintf_fragments任何模塊。例如,您可以修改模塊的實現您的HAL(的my.package.foo@1.0-service-bar )。

... {
    ...
    vintf_fragments: ["manifest_foo.xml"],
    ...
}
LOCAL_MODULE := ...
LOCAL_VINTF_FRAGMENTS := manifest_foo.xml

在一個名為manifest_foo.xml ,創建清單此模塊。在構建時,此清單會添加到設備中。在此處添加條目與在設備的主清單中添加條目相同。這允許客戶端使用該接口並允許 VTS 識別設備上的 HAL 實現。常規清單所做的任何事情,這個清單也能做。

下面實施例android.hardware.foo@1.0::IFoo/default ,其被安裝到vendorodm分區。如果它安裝到systemproductsystem_ext分區,使用類型framework ,而不是類型的device

<manifest version="1.0" type="device">
    <hal format="hidl">
        <name>android.hardware.foo</name>
        <transport>hwbinder</transport>
        <fqname>@1.0::IFoo/default</fqname>
    </hal>
</manifest>

清單文件架構

本節介紹這些 XML 標記的含義。有些“需要”標籤可以從Android的源代碼的源文件丟失,可以書面assemble_vintf在構建時。所需的標籤必須存在於設備上的相應文件中。

?xml
可選的。僅向 XML 解析器提供信息。
manifest.version
必需的。元版本明顯的。描述清單中預期的元素。與 XML 版本無關。
manifest.type
必需的。此清單的類型。它具有價值device的設備清單文件和framework該框架清單文件。
manifest.target-level
設備清單所必需的。指定此設備清單要與之兼容的框架兼容性矩陣 (FCM) 版本。這也稱為設備的運輸 FCM 版本。
manifest.hal
可選,可重複。單個HAL(HIDL或天然的,如GL),這取決於format屬性。
manifest.hal.format
可選的。該值可以是以下之一:
  • hidl :HIDL的HAL。這是默認設置。
  • aidlAIDL的HAL 。僅在清單元版本 2.0 及更高版本中有效。
  • native :本地的HAL。
manifest.hal.max-level
可選的。僅對框架清單有效。如果設置,最大級別低於框架清單中的目標 FCM 版本的 HAL 將被禁用。
manifest.hal.override
可選的。該值可以是以下之一:
  • true :覆蓋其他<hal>用相同的元素<name>和主要版本。如果沒有<version><fqname>在此<hal>元素,那麼<hal>元素聲明此HAL為禁用。
  • false :不要覆蓋其他<hal>與相同的元素<name>和主要版本。
manifest.hal.name
必需的。 HAL 的完全限定包名稱。多個 HAL 條目可以使用相同的名稱。例子:
  • android.hardware.camera (HIDL或AIDL HAL)
  • GLES (本地HAL,只需要姓名)
manifest.hal.transport
必要時manifest.hal.format == "hidl"否則不得出現。說明從服務管理器查詢此包中的接口時使用的傳輸。該值可以是以下之一:
  • hwbinder :Binderized模式
  • passthrough :直通模式
可選當manifest.hal.format == "aidl"否則不得出現。說明遠程服務接口時使用的傳輸方式。該值必須是:
  • inet :Inet電子插座
manifest.hal.transport.ipmanifest.hal.transport.port必須用於進一步指定的Inet連接信息。
manifest.hal.transport.arch
所需的passthrough ,必須不存在對hwbinder 。描述所提供的直通服務的位數。該值可以是以下之一:
  • 32 :32位模式
  • 64 :64位模式
  • 32+64 :兩個
manifest.hal.transport.ip
需要inet和現在的中一定不能。描述提供遠程接口的 IP 地址。
manifest.hal.transport.port
需要inet和現在的中一定不能。描述提供遠程接口的端口。
manifest.hal.version
可選,可重複。一個版本的hal在清單標籤。

對於HIDL和原生的HAL,格式為MAJOR . MINOR 。對於實施例,請參閱hardware/interfacesvendor/${VENDOR}/interfacesframework/hardware/interfaces ,或system/hardware/interfaces

HIDL和原生的HAL可以使用多個版本的領域,只要他們代表不同主要版本,每提供主要版本只有一個小版本。例如,3.1 和 3.2 不能共存,但 1.0 和 3.4 可以。這適用於所有hal具有相同名稱的元素,除非override="true" 。的值<version>不與相關聯的<fqname>因為<fqname>攜帶一個版本。

對於AIDL的HAL, <version>不能存在於運行Android 11和下面的設備。 <version>必須在運行Android 12和上述裝置一個整數。必有至多一個<version>針對每個(package, interface, instance)元組。如果不存在,默認為1 。的值<version>與所有相關聯的<fqname>在相同的<hal>因為<fqname>不攜帶一個版本。
manifest.hal.interface
必需,可以重複而不重複。在具有實例名稱的包中聲明一個接口。可以有多個<interface>在元素<hal> ;名稱必須不同。
manifest.hal.interface.name
必需的。接口名稱。
manifest.hal.interface.instance
必填,可重複。接口的實例名稱。可以具有用於一個接口,但沒有複製多個實例<instance>元素。
manifest.hal.fqname
可選,可重複。另一種方式與名字的HAL指定實例manifest.hal.name
  • 對於HIDL的HAL,格式為@ MAJOR . MINOR :: INTERFACE / INSTANCE
  • 對於AIDL的HAL,格式為INTERFACE / INSTANCE
manifest.sepolicy
必需的。包含所有與 sepolicy 相關的條目。
manifest.sepolicy.version
設備清單所必需的。聲明 SELinux 版本。其格式SDK_INT . PLAT_INT
manifest.vendor-ndk
必填,可重複;框架清單所必需的。不得出現在設備清單中。多個<vendor-ndk>條目必須具有不同的<version>秒。描述框架提供的一組 VNDK 快照。
manifest.vendor-ndk.version
必需的。這是一個正整數,表示 VNDK 快照的版本。
manifest.vendor-ndk.library
可選,可以重複,不重複。描述框架為此 VNDK 供應商快照提供的一組 VNDK 庫。該值是庫的文件名,例如libjpeg.so ,包括前綴lib和後綴.so 。不允許路徑組件。
manifest.system-sdk.version
可選,可重複,無重複;僅由框架清單使用。描述框架提供給供應商應用的一組系統 SDK 版本。
manifest.kernel
可選的。描述有關內核的靜態信息。
manifest.kernel.target-level
可選的。描述內核分支。其默認值為manifest.target-level ,如果不存在。必須大於或等於manifest.target-level 。見仁匹配規則的詳細信息。