ベンダーは、新しいデバイスを開発してリリースする際に、デバイス マニフェスト(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 バージョンを実装できます。次に例を示します。
- ターゲット FCM バージョン 2 でリリースされた Google Pixel 2 / Pixel 2 XL デバイスでは、必須の Audio 2.0 HAL である
android.hardware.audio@2.0::IDeviceFactory/default
が実装されます。 - Android 9 でリリースされた Audio 4.0 HAL については、フル OTA を使用して Google Pixel 2 / Pixel 2 XL デバイスを 4.0 HAL にアップグレードできます。これにより
android.hardware.audio@4.0::IDeviceFactory/default
が実装されます。 compatibility_matrix.2.xml
では Audio 2.0 のみが規定されていますが、ターゲット FCM バージョン 2 のベンダー イメージに対する要件は緩和されました。これは、Android 9 フレームワーク(FCM バージョン 3)では、機能面から Audio 4.0 が Audio 2.0 HAL の代わりになると見なされるためです。
compatibility_matrix.2.xml
には Audio 2.0 が必要で、compatibility_matrix.3.xml
には Audio 4.0 が必要であることから、要件をまとめると次のようになります。
FCM バージョン(システム) | ターゲット FCM バージョン(ベンダー) | 要件 |
---|---|---|
2(8.1) | 2(8.1) | Audio 2.0 |
3(9) | 2(8.1) | Audio 2.0 または 4.0 |
3(9) | 3(9) | Audio 4.0 |
ターゲット FCM バージョンをアップグレードする
ベンダー イメージをアップグレードする際、ベンダーはターゲット FCM バージョンをインクリメントして、アップグレードされたベンダー イメージが利用できるターゲット FCM バージョンを指定することもできます。デバイスのターゲット FCM バージョンを上げるには、ベンダーは以下の作業を行う必要があります。
- ターゲット FCM バージョンに対して新たに必要になる HAL バージョンをすべて実装する。
- デバイス マニフェスト ファイルの HAL バージョンを変更する。
- デバイス マニフェスト ファイルのターゲット FCM バージョンを変更する。
- サポートが終了した HAL バージョンを削除する。
たとえば、Android 7.0 でリリースする Google Pixel / Pixel XL デバイスの場合、ターゲット FCM バージョンは以前のバージョン以上にする必要があります。一方、ベンダー イメージは compatibility_matrix.2.xml
に準拠するようにアップデートされているため、デバイス マニフェストでは、次のようにしてターゲット FCM バージョン 2 を宣言します。
<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(Audio 4.0 や Health 2.0 など)は実装されているが、FCM バージョン 3(Android 9)でサポートが終了した android.hardware.radio.deprecated@1.0
が削除されていないとします。この場合、これらのデバイスでターゲット FCM バージョンを 3 にアップグレードすることはできません。
OTA 時にカーネル要件を必須にする
Android 9 以下のデバイスをアップグレードする
Android 9 以下のデバイスでは、必要に応じて次の CL を cherry-pick してください。
この変更により、ビルドフラグ 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
で確認できます。