自動車産業がソフトウェア・デファインド・ビークル(SDV)へと構造転換する中で、開発環境の遅滞は致命的です。特に、Android Automotive OS (AAOS) のような複雑なシステムにおいて、高価な開発用ヘッドユニット(IHU)や実車の完成を待つことは、プロジェクトのベロシティを著しく低下させます。Googleが提供する「Cuttlefish」は、単なるエミュレータではなく、実機レスでAAOSのフルスタック検証を可能にする仮想プラットフォームです。本稿では、AOSP公式ドキュメントに基づき、Cuttlefishを用いた実戦的な開発フローを解説します。
なぜGoldfishではなくCuttlefishなのか
従来のAndroidエミュレータ(Goldfish)は、アプリ開発者向けに最適化されており、プラットフォーム開発者が必要とするハードウェア抽象化レイヤー(HAL)やカーネルモジュールの検証には不向きでした。対してCuttlefishは、Google Cloud Platform(GCP)等のクラウド環境でも動作することを前提に設計されており、VirtIOを通じてホスト側のリソースを効率的にゲストOS(Android)に提供します。
ビルドとデプロイの実践フロー
実際の現場では、AOSPのソースコードを取得し、Automotive向けのターゲットをビルドしてCuttlefish上で起動します。ここでは、一般的なx86_64アーキテクチャ向けのビルド手順を示します。依存関係の解決にはUbuntu 20.04 LTS以降の使用を推奨します。
// 1. 必要なパッケージのインストール(初回のみ)
// 参照: https://github.com/google/android-cuttlefish
$ sudo apt install git devscripts config-package-dev debhelper-compat golang curl
// 2. Cuttlefishホストツールのインストール
$ git clone https://github.com/google/android-cuttlefish
$ cd android-cuttlefish
$ debuild -i -us -uc -b
$ sudo dpkg -i ../cuttlefish-base_*.deb ../cuttlefish-user_*.deb
// 3. ユーザーをkvmおよびcvdnetworkグループに追加(再ログインが必要)
$ sudo usermod -aG kvm,cvdnetwork $USER
// 4. AOSP環境のセットアップとビルド
$ source build/envsetup.sh
// Automotive用ターゲットの選択
// aosp_cf_x86_64_auto はAutomotive向けCuttlefishターゲット
$ lunch aosp_cf_x86_64_auto-userdebug
// ビルド実行(並列数はマシンスペックに合わせて調整)
$ m
// 5. Cuttlefishの起動
// -daemon: バックグラウンド実行
// -start_webrtc: ブラウザ経由で画面操作が可能
$ launch_cvd --start_webrtc=true
Vehicle HAL (VHAL) のシミュレーション
AAOS開発の核心は、車両データ(速度、ギア、HVACなど)との連携にあります。Cuttlefishは、デフォルトで参照実装である `DefaultVehicleHal` を含んでおり、これを通じてVHALプロパティのRead/Writeをテスト可能です。
実機ハードウェアがない状態でVHALをデバッグするには、`adb` を介してプロパティを注入する方法が有効です。以下は、開発中によく使用するデバッグコマンドの例です。
| 操作内容 | コマンド例 | 用途 |
|---|---|---|
| プロパティ取得 | adb shell dumpsys android.hardware.automotive.vehicle.IVehicle/default --get <PROP_ID> |
現在のセンサー値の確認 |
| プロパティ設定 | adb shell dumpsys android.hardware.automotive.vehicle.IVehicle/default --set <PROP_ID> -i <VALUE> |
異常値の注入テスト |
| VHAL再起動 | adb shell setprop ctl.restart vendor.vehicle-hal-default |
HALクラッシュ時の復旧 |
より高度な検証には、KitchenSinkアプリを使用することで、GUIベースでの車両プロパティ操作が可能になります。これはCuttlefish環境にもプリインストールされています。
結論
Cuttlefishを活用することで、エンジニアはハードウェアの制約から解放され、CI/CDパイプライン上でAutomotive OSの自動テストを実行することが可能になります。実機検証は最終段階のみに留め、開発サイクルの大部分を仮想環境で行う「シフトレフト」戦略こそが、次世代の車載ソフトウェア開発における競争力の源泉となるでしょう。
Post a Comment