SDV は、A/B(シームレス)システム アップデートの標準の Android アプローチに従います。AOSP ドキュメントは主に SDV に適用されます。このページでは、SDV 固有の使用方法と、アップデート パッケージのビルドと適用に関する既知の良好なパスについて詳しく説明します。
現在、SDV は非仮想 A/B アップデートを使用するように構成されています。
ブート コントロール HAL の実装
Cuttlefish(sdv_core_cf)用の SDV Core イメージは、hardware/interfaces/boot/aidl/default/ に基づくブート コントロール HAL の標準実装を提供します。他のブートローダーは、A/B アップデートをサポートするために HAL を実装する必要があります。
詳しくは、AOSP ドキュメントのブート コントロール HAL の実装セクションを参照してください。デバッグ(eng と userdebug)SDV イメージに含まれる bootctl を使用して、実装をテストできます。
OTA パッケージを生成する
詳しくは、OTA パッケージを構築するをご覧ください。このページの手順は、AOSP ドキュメントに若干の変更を加えたものです。
完全なアップデート
リポジトリのルートから:
source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
これらのコマンドは、dist_output ディレクトリにターゲット ファイルを生成します。sdv_core_cf のローカルビルドの場合、通常は sdv_core_cf-target_files-$USER.zip です。
OTA パッケージを生成するには、ota_from_target_files を使用する必要があります。AOSP とは異なり、パッケージは m dist の一部としてビルドされません。
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
増分アップデート
AOSP と同じ ota_from_target_files 呼び出し:
ota_from_target_files \
-i PREVIOUS-sdv_core_cf-target_files.zip \
dist_new/sdv_core_cf-target_files-$USER.zip \
incremental_ota_update.zip
OTA パッケージをインストールする
更新は update_engine サービスを使用してインストールされます。デバッグ SDV ビルドには、アップデート プロセスのデバッグとテストに使用できる update_engine_client が含まれています。
OTA パッケージをインストールするには、次のコマンドを実行します。
system/update_engine/scripts/update_device.py ota_update.zip
アップデートが正しくインストールされた場合(最終ステータスが UPDATE_STATUS_UPDATED_NEED_REBOOT で、結果が ErrorCode::kSuccess の場合)、次の再起動時にアップデートが有効になります。
バージョニング
システム アップデートの場合、SDV は Android の OTA パッケージ メタデータを使用して、OTA パッケージが要件を満たし、インストール可能かどうかを判断します。
また、APEX についても、SDV は更新可能性に関する Android のコンセプトに準拠しています。したがって、APEX がブートストラップ APEX でない場合に、APEX を更新できます。ブートストラップ APEX はシステム アップデートを通じて更新する必要があり、次のいずれかになります。
- 宣言された version がプリインストールされたバージョンよりも大きく、両方とも 1 以上である。
または、
- 宣言されたバージョンがプリインストールされていない APEX であり、バージョンが拒否リストに記載されている場合、そのバージョンよりも高い。
SDV は通常、ネットワーク内の複数のシステムにデプロイされます。そのため、単一のシステムに対する更新が正しく実行されるようにする必要があります。ただし、この対策を行っても、すべてのシステムが適切に通信できるとは限りません。
ネットワーク全体を更新することも同様に重要です。そのためには、サービス バンドルの更新をすべてのマシンに同時にデプロイするか、更新に破壊的変更が含まれていない必要があります。たとえば、インターフェースの互換性のない変更などです。
SDV には互換性のない変更を検出するツールは用意されていませんが、ガイドラインでは、インターフェースに加えられた変更を調整する方法と、変更をデプロイするために必要なベスト プラクティスについて説明しています。
また、SDV はシステムと APEX の更新のロールバック メカニズムをサポートしています。システムが意図せず不満足な状態になった場合は、最後に確認された満足な状態を復元できます。