供应商 API 级别

供应商 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 设置,之后永远不会更新,即使在操作系统升级后也不会改变。
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,这是设置当前供应商 API 级别时 Android 14-QPR3 的大致日期。

确定供应商 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 设置,之后永远不会更新,即使在操作系统升级后也不会改变。
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.api_level 未定义,则为 ro.board.first_api_level)和 ro.product.first_api_level 中的最低值。