在開發和發布新設備時,供應商可以在設備清單 (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 裝置隨 Target 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,該 HAL 實現了
android.hardware.audio@4.0::IDeviceFactory/default
。 - 儘管
compatibility_matrix.2.xml
僅指定音訊 2.0,但對目標 FCM 版本 2 的供應商映像的要求已放寬,因為 Android 9 框架(FCM 版本 3)在功能方面認為音訊 4.0 是音訊 2.0 HAL 的替代品。
總而言之,鑑於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、健康 2.0 等),但它們不會刪除android.hardware.radio.deprecated@1.0
,在 FCM 版本 3 (Android 9) 中已棄用。因此,這些設備無法將目標 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
的原始程式碼。