自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
设备清单开发
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
在开发和发布新设备时,供应商可以在设备清单 (DM) 中定义和声明目标 FCM 版本。升级旧设备的供应商映像时,供应商可以选择实现新的 HAL 版本并递增目标 FCM 版本。
开发新设备
在为新设备定义设备目标 FCM 版本时:
- 不要定义
DEVICE_MANIFEST_FILE
和 PRODUCT_ENFORCE_VINTF_MANIFEST
。
- 为目标 FCM 版本实现 HAL。
- 编写正确的设备清单文件。
- 将目标 FCM 版本写入设备清单文件。
- 设置
DEVICE_MANIFEST_FILE
。
- 将
PRODUCT_ENFORCE_VINTF_MANIFEST
设置为 true
。
发布新设备
发布新设备时,需要确定设备的初始目标 FCM 版本,并在设备清单中通过顶级 <manifest>
元素中的“target-level
”属性予以声明。
例如,发布时搭载 Android 9 的设备的目标 FCM 版本必须为 3(目前已提供更高版本)。如需在设备清单中声明此项,请编写以下代码:
<manifest version="1.0" type="device" target-level="3">
<!-- ... -->
</manifest>
升级供应商映像
升级旧设备的供应商映像时,供应商可以选择实现新的 HAL 版本并递增目标 FCM 版本。
升级 HAL
在供应商映像升级期间,供应商可以实现新的 HAL 版本,前提是 HAL 名称、接口名称和实例名称均相同。例如:
- Google Pixel 2 和 Pixel 2 XL 设备发布时目标 FCM 版本为 2,实现了所需的音频 2.0 HAL
android.hardware.audio@2.0::IDeviceFactory/default
。
- 对于随 Android 9 发布的音频 4.0 HAL,Google Pixel 2 和 Pixel 2 XL 设备可以通过完整 OTA 升级至 4.0 HAL,这样会实现
android.hardware.audio@4.0::IDeviceFactory/default
。
- 尽管
compatibility_matrix.2.xml
仅指定了音频 2.0,但由于 Android 9 框架(FCM 版本 3)认为音频 4.0 在功能方面可以替代音频 2.0 HAL,因此对采用目标 FCM 版本 2 的供应商映像的要求已放宽。
综上所述,鉴于 compatibility_matrix.2.xml
要求使用音频 2.0,而 compatibility_matrix.3.xml
要求使用音频 4.0,总体要求如下:
FCM 版本(系统) |
目标 FCM 版本(供应商) |
要求 |
2 (8.1) |
2 (8.1) |
音频 2.0 |
3 (9) |
2 (8.1) |
音频 2.0 或 4.0 |
3 (9) |
3 (9) |
音频 4.0 |
升级目标 FCM 版本
在供应商映像升级期间,供应商还可以递增目标 FCM 版本,以指定可与升级后的供应商映像配合使用的目标 FCM 版本。如要达到设备的目标 FCM 版本,供应商需要:
- 为目标 FCM 版本实现所有需要的新 HAL 版本。
- 在设备清单文件中修改 HAL 版本。
- 在设备清单文件中修改目标 FCM 版本。
- 移除已弃用的 HAL 版本。
例如,Google Pixel 和 Pixel XL 设备搭载的是 Android 7.0,因此它们的目标 FCM 版本一定至少是旧版。不过,设备清单中声明目标 FCM 版本为 2,因为供应商映像已更新,以符合 compatibility_matrix.2.xml
的要求:
<manifest version="1.0" type="device" target-level="2">
如果供应商未实现所有需要的新 HAL 版本或未移除废弃的 HAL 版本,则无法升级目标 FCM 版本。
例如,Google Pixel 2 和 Pixel 2 XL 设备的目标 FCM 版本为 2。虽然这些设备的供应商确实实现了 compatibility_matrix.3.xml
要求使用的一些 HAL(例如音频 4.0、health 2.0 等),但未移除在 FCM 版本 3 (Android 9) 中废弃的 android.hardware.radio.deprecated@1.0
。因此,这些设备无法将目标 FCM 版本升级至 3。
在 OTA 期间强制执行内核要求
从 Android 9 或更低版本更新设备
在搭载 Android 9 或更低版本的设备上,请确保按需挑选以下 CL:
这些更改引入了构建标志 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
,并让该标志保持未设置状态(针对搭载 Android 9 或更低版本的设备)。
-
更新到 Android 10 时,搭载 Android 9 或更低版本的设备上的 OTA 客户端无法正确检查 OTA 软件包中的内核要求。需要执行这些更改才能舍弃生成的 OTA 软件包中的内核要求。
-
更新到 Android 11 时,可以选择设置
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
构建标志,以在生成更新软件包时检查 VINTF 兼容性。
如需详细了解此构建标志,请参阅从 Android 10 更新设备。
从 Android 10 更新设备
Android 10 引入了新的构建标记 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
。对于搭载 Android 10 的设备,此标志会自动设为 true
。当此标志设为 true
时,脚本会从已安装的内核映像中提取内核版本和内核配置。
- 更新到 Android 10 时,OTA 更新软件包会包含内核版本和配置。搭载 Android 10 的设备上的 OTA 客户端会读取此信息以检查兼容性。
- 更新到 Android 11 时,OTA 软件包生成脚本会读取内核版本和配置以检查兼容性。
如果脚本无法从内核映像中提取此信息,请执行以下操作之一:
- 修改脚本以支持您的内核格式,并将该脚本提供给 AOSP。
- 将
BOARD_KERNEL_VERSION
设为内核版本,并将 BOARD_KERNEL_CONFIG_FILE
设为构建的内核配置文件 .config
的路径。更新内核映像时,必须更新这两个变量。
- 或者,将
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
设置为 false
以跳过检查内核要求。我们不推荐这样做,因为任何不兼容行为都会被隐藏,并且仅在更新后运行 VTS 测试时才会被发现。
您可以查看内核信息提取脚本 extract_kernel.py
的源代码。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-08-21。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-08-21。"],[],[],null,["# Device manifest development\n\nWhen developing and releasing new devices, vendors can define and declare the\ntarget FCM version in the device manifest (DM). When upgrading the vendor image\nfor old devices, vendors can choose to implement new HAL versions and increment\nthe target FCM version.\n| **Note:** For details on terms used in this page, see [Terminology](/docs/core/architecture/vintf/fcm#terminology).\n\nDevelop new devices\n-------------------\n\nWhen defining the device target FCM version for new devices:\n\n1. Leave `DEVICE_MANIFEST_FILE` and `PRODUCT_ENFORCE_VINTF_MANIFEST` undefined.\n2. Implement HALs for the target FCM version.\n3. Write the correct device manifest file.\n4. Write the target FCM version to device manifest file.\n5. Set `DEVICE_MANIFEST_FILE`.\n6. Set `PRODUCT_ENFORCE_VINTF_MANIFEST` to `true`.\n\nRelease new devices\n-------------------\n\nWhen a new device is released, its initial target FCM version needs to be\ndetermined and declared in the device manifest as the\n\"`target-level`\" attribute in the top-level\n`\u003cmanifest\u003e` element.\n\nFor example, devices launching with Android 9 must\nhave target FCM version equal to 3 (the higher version available at this time).\nTo declare this in the device manifest: \n\n```carbon\n\u003cmanifest version=\"1.0\" type=\"device\" target-level=\"3\"\u003e\n \u003c!-- ... --\u003e\n\u003c/manifest\u003e\n```\n\nUpgrade vendor image\n--------------------\n\nWhen upgrading the vendor image for an old device, vendors can choose to\nimplement new HAL versions and increment the target FCM version.\n\n### Upgrade HALs\n\nDuring a vendor image upgrade, vendors can implement new HAL versions\nprovided that HAL name, interface name, and instance name are the same. For\nexample:\n\n- Google Pixel 2 and Pixel 2 XL devices released with target FCM version 2, which implemented the required audio 2.0 HAL `android.hardware.audio@2.0::IDeviceFactory/default`.\n- For the audio 4.0 HAL that released with Android 9, Google Pixel 2 and Pixel 2 XL devices can use a full OTA to upgrade to the 4.0 HAL, which implements `android.hardware.audio@4.0::IDeviceFactory/default`.\n- Even though the `compatibility_matrix.2.xml` specifies audio 2.0 only, the requirement on a vendor image with target FCM version 2 has been loosened because the Android 9 framework (FCM version 3) considers audio 4.0 a replacement of audio 2.0 HAL in terms of functionality.\n\nTo summarize, given that `compatibility_matrix.2.xml` requires\naudio 2.0 and `compatibility_matrix.3.xml` requires audio 4.0, the\nrequirements are as follows:\n\n| FCM version (system) | Target FCM version (vendor) | Requirements |\n|----------------------|-----------------------------|------------------|\n| 2 (8.1) | 2 (8.1) | Audio 2.0 |\n| 3 (9) | 2 (8.1) | Audio 2.0 or 4.0 |\n| 3 (9) | 3 (9) | Audio 4.0 |\n\n### Upgrade target FCM version\n\nDuring a vendor image upgrade, vendors can also increment the target FCM\nversion to specify the targeted FCM version the upgraded vendor image can work\nwith. To bump the target FCM version of a device, vendors need to:\n\n1. Implement all new required HAL Versions for the target FCM version.\n2. Modify HAL Versions in the device manifest file.\n3. Modify the target FCM version in the device manifest file.\n4. Remove deprecated HAL versions.\n\nFor example, Google Pixel and Pixel XL devices launched with Android 7.0\nso their target FCM version must be at least legacy. However, the [device\nmanifest](https://android.googlesource.com/device/google/marlin/+/0a276ad8b98fde395ed99a4b303434800c07049e/manifest.xml#1) declares the target FCM version 2 because the vendor image has\nbeen updated to conform with `compatibility_matrix.2.xml`: \n\n```carbon\n\u003cmanifest version=\"1.0\" type=\"device\" target-level=\"2\"\u003e\n```\n\nIf vendors do not implement all required new HAL versions or do not remove\ndeprecated HAL versions, the target FCM version cannot be upgraded.\n\nFor example, Google Pixel 2 and Pixel 2 XL devices have target FCM version 2.\nWhile they do implement some HALs required by\n`compatibility_matrix.3.xml` (such as audio 4.0, health 2.0, etc.),\nthey do not remove `android.hardware.radio.deprecated@1.0`, which is\ndeprecated at FCM version 3 (Android 9). Hence, these\ndevices cannot upgrade the target FCM version to 3.\n\nMandating kernel requirements during OTA\n----------------------------------------\n\n### Updating devices from Android 9 or lower\n\n\nOn devices with Android 9 or lower, ensure the following CLs are\ncherry-picked:\n\n- [CL 722283](https://android-review.googlesource.com/722283)\n- [CL 722284](https://android-review.googlesource.com/722284)\n- [CL 722345](https://android-review.googlesource.com/722345)\n\n\nThese changes introduce the build flag\n`PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS` and leave the\nflag unset for devices launched with Android 9 or\nlower.\n\n- When updating to Android 10, OTA clients on devices running Android 9 or lower don't check kernel requirements in the OTA package correctly. These changes are needed to drop kernel requirements from the generated OTA package.\n- When updating to Android 11, it is optional to set the `PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS` build flag to check VINTF compatibility when the update package is generated.\n\n\nFor more information about this build flag, see\n[Updating devices from Android\n10](#ota-kernel-q).\n\n### Updating devices from Android 10\n\n\nAndroid 10 introduces a new build flag,\n`PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS`. For devices\nlaunched with Android 10, this flag is\nautomatically set to `true`. When the flag is set to\n`true`, a script extracts the kernel version and the kernel\nconfigurations from the installed kernel image.\n\n- When updating to Android 10, OTA update package contains kernel version and configuration. OTA clients on devices running Android 10 read this information to check compatibility.\n- When updating to Android 11, OTA package genreation reads kernel version and configuration to check compatibility.\n\nIf the script fails to extract\nthis information for your kernel image, do **one** of\nthe following:\n\n- Edit the script to support your kernel format and contribute to AOSP.\n- Set `BOARD_KERNEL_VERSION` to the kernel version and `BOARD_KERNEL_CONFIG_FILE` to the path of the built kernel configuration file `.config`. Both variables must be updated when the kernel image is updated.\n- Alternatively, set `PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS` to `false` to skip checking kernel requirements. This is not recommended because any incompatibility is hidden and is only discovered when running VTS tests after the update.\n\n\nYou can view the source code of the kernel information extraction script\n[`extract_kernel.py`](https://android.googlesource.com/platform/build/+/refs/heads/android16-release/tools/extract_kernel.py)."]]