供應商 API 級別是指供應商分區支援的介面版本。介面為雙向,說明供應商分區提供給系統分區的 API (硬體抽象層或 HAL 介面),以及供應商分區所需的 API (低階原生開發人員套件或 LLNDK 介面)。
供應商 API 級別也用於判斷供應商軟體需求 (VSR),這是供應商分區中軟體必須滿足的功能性和非功能性需求集合。
本頁的其餘部分會說明如何根據 Android 版本,使用系統屬性來判斷供應商 API 級別。
供應商凍結
Android 可讓供應商在 VSR 的特定版本中凍結供應商分區。Android 預期的供應商分區功能組合,取決於與供應商分區相關聯的供應商 API 級別。在執行階段,系統分區中執行的軟體行為會調整,以配合供應商分區的供應商 API 級別。舉例來說,如果供應商分區的 API 級別不支援新功能,系統分區中的軟體可能就無法使用新功能。
只有在建立與 Android 相容裝置時,系統才會凍結廠商。
判斷供應商 API 級別 (Android 14-QPR3 以上版本)
如果是 Android 14-QPR3 及以上版本,系統會另外發布供應商 API 級別,這意味著 SDK API 級別和供應商 API 級別不同步。
由於 Android 14-QPR3 及以上版本的發布時程不同,供應商 API 級別與 SDK API 級別完全獨立。為確保此分離作業明確,供應商 API 級別的格式為 YYYYMM (年和月),而 SDK 級別則為整數。
Android 14-QPR3 以上版本包含下列與供應商 API 級別相關的系統屬性 (ro.vendor.api_level
):
系統屬性 | 格式 | 說明 | 初始設定 |
---|---|---|---|
ro.board.api_level |
YYYYMM | 晶片組軟體支援的供應商 API 級別。系統會為所有方塊組設定這個屬性。 | 這項屬性會由建構系統自動設定。 |
ro.board.first_api_level |
YYYYMM | 晶片組軟體首次發布時的供應商 API 級別。這項屬性為晶片組功能,若 SoC 晶片組符合供應商凍結資格,由 SoC 供應商設定。初始設定後,不得修改。 | SoC 供應商會使用 BOARD_SHIPPING_API_LEVEL 設定這項設定。 |
ro.product.first_api_level |
整數 | 裝置最初啟動時使用的 SDK API 級別。 | 這項屬性是由原始設備製造商 (OEM) 設定,之後就不會更新,即使在 OS 升級後也不會。 |
ro.vendor.api_level |
YYYYMM (年年年年月) | 裝置整體必須符合的供應商 API 級別。 | 請參閱下表後方的說明。 |
ro.board.api_frozen |
布林值 | 如果 ro.board.api_level 代表的供應商 API 級別已定案,此屬性會設為 true 。 |
如果未設定此屬性,則預設為 false 。 |
ro.llndk.api_level |
YYYYMM | 系統分區中目前 LLNDK 提供的供應商 API 級別,採用 YYYYMM 格式。LLNDK 可回溯相容,因此任何供應商映像檔 (API 級別低於或等於此級別) 都可以透過這個系統映像檔進行刷新。 | 這個屬性是由系統分區設定。 |
ro.vendor.api_level
屬性可透過下列兩種方式產生:
如果晶片組符合供應商凍結資格:
ro.vendor.api_level = min( ro.board.api_level, AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
如果晶片組未處於供應商凍結狀態:
ro.vendor.api_level = AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
AVendorSupport_getVendorApiLevelOf()
方法會根據 SDK API 級別,判斷相應的供應商 API 級別。例如 AVendorSupport_getVendorApiLevelOf(35)
,其中 35
是 2024 年主要 Android 版本的 SDK API 級別,會傳回 202404
,這是 Android 14-QPR3 設定為目前 Vendor API 級別時的粗估日期。
判斷供應商 API 級別 (Android 13)
供應商 API 級別會遵循 SDK API 級別,後者適用於應用程式-作業系統介面,並在新的 Android 平台發布至 AOSP 時每年更新一次。
Android 13 包含下列與供應商 API 級別 (ro.vendor.api_level
) 相關的系統屬性:
系統屬性 | 格式 | 說明 | 初始設定 |
---|---|---|---|
ro.board.first_api_level |
整數 | 晶片組軟體首次發布時的供應商 API 級別。這是僅限晶片組的功能,無法由 SoC 供應商或原始設備製造商 (OEM) 修改。這個屬性只會設為符合供應商凍結資格的晶片組 | 您可以在 device.mk 檔案中設定 BOARD_SHIPPING_API_LEVEL ,藉此建立值。 |
ro.board.api_level |
整數 | 晶片組軟體支援的供應商 API 級別。這個屬性只會設為符合供應商凍結資格的晶片組。這項屬性會為所有晶片組設定。 | 最初,建構系統會將這個屬性的值設為與 ro.board.first_api_level 相同,但如果供應商分區升級,則可以更新。 |
ro.product.first_api_level |
整數 | 裝置最初啟動時使用的 SDK API 級別。 | 這項屬性是由原始設備製造商 (OEM) 設定,之後就不會更新,即使在 OS 升級後也不會。 |
ro.vendor.api_level |
整數 | 裝置整體必須符合的供應商 API 級別。 | 請參閱下表後方的說明。 |
ro.vndk.version |
整數 | 供應商分區的 VNDK 建構版本。 | 這項屬性是由系統分區設定。 |
ro.vendor.build.version.sdk |
整數 | 建構供應商分區的來源樹狀結構 SDK API 級別。 | |
ro.vendor.build.version.release |
整數 | 建構供應商分區時所用的來源樹狀結構平台版本。 | |
ro.vendor.build.version.release_or_codename |
整數 | 供應商分區建構來源樹狀結構的代碼名稱。 |
ro.vendor.api_level
屬性會自動設為最小值 ro.board.api_level
(如未定義,則為 ro.board.first_api_level
) 和 ro.product.first_api_level
。ro.board.api_level