ベンダー API レベル

「ベンダー API レベル」とは、ベンダー パーティションによってサポートされるインターフェースのバージョンを指します。このインターフェースは双方向です。ベンダー パーティションがシステム パーティションに提供する API(Hardware Abstraction Layer(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 レベルは同期していません。

個別のリリース スケジュールにより、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 が提供する、YYYYMM 形式のベンダー API レベル。LLNDK には下位互換性があるため、この API レベル以下のベンダー イメージは、このシステム イメージを使ってフラッシュできます。 このプロパティはシステム パーティションによって設定されます。

ro.vendor.api_level プロパティは、次の 2 つのうちいずれかの方法で取得されます。

  • チップセットがベンダー フリーズの対象となる場合:

    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 レベルに従っています。これはアプリと OS のインターフェースに対応しており、1 年に 1 回、新しい 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_levelro.board.api_level が定義されていない場合は ro.board.first_api_level)と ro.product.first_api_level の最小値に自動的に設定されます。