このページでは、 ソフトウェア定義車両(SDV)プラットフォーム全体で、高可用性レンダラ(HAR)、 DriverUI、および安全モニターなどの Display Safety コンポーネントにアクセス、ビルド、実行するための概要について説明します。
コードへのアクセス
このセクションでは、HAR と DriverUI の Display Safety コンポーネントのコードベースにアクセスする方法について説明します。
高可用性レンダラ
高可用性レンダラ(HAR)のコードベースは、
メイン リポジトリのチェックアウトの一部としてpackages/services/display_safety/で入手できます。
HAR のコードベースは次のように構成されています。
- フレームワーク: プラットフォーム、レンダリング、アニメーション、オーディオのコア フレームワーク インターフェースが含まれています。
- リファレンス: フレームワーク インターフェースのプラットフォーム固有の実装、HAR リファレンス アプリのコード、安全ツールチェーン(デザイン コンパイラ、安全モニター)が含まれています。
- サービス: コンポーネント間で車両データを送受信するための Android 固有のサービスと、APEX データパッケージの定義が含まれています。
- Prebuilts: Impeller グラフィック ライブラリなどのビルド済みバイナリのラッパーを提供します。
Harry リファレンス アプリ のコードは packages/services/display_safety/reference/harry_app にあります。
HAR のディレクトリ構造の詳細については、Display Safety のコード構造をご覧ください
安全モニター
安全モニターのコードベースは、メイン リポジトリのチェックアウトの一部として packages/services/display_safety/reference/safety-monitor で入手できます。
安全モニターのコードは次のように構成されています。
main.rs: 警告アーティファクトを取得し、車両データ サーバーと警告モニタリング ループを初期化します。警告の可視性に関する情報は、警告検査の結果と比較され、結果は SDV ログを使用して提供されます。Vehicle_data_server.rs: 車両データをサブスクライブし、メインループの警告の可視性を更新するサーバー。Telltale_monitoring.rs: ループで実行され、screencap クレートを使用してスクリーン バッファのコピーを取得し、指定されたリージョンで警告を検査します。警告検査の結果はメインループに送信されます。
DriverUI
DriverUI は、バンドルされていないコードベースの一部として提供されます。このコードベースには、ub-automotive-master ブランチからアクセスできます。
mkdir ub-automotive-master && cd ub-automotive-master
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq
バンドルされていないソースと Google ソースの詳細については、 バンドルされていないアプリを統合するをご覧ください。
ビルドと実行
このセクションでは、SDV Media 内の HAR と SDV 車載インフォテインメント(IVI)内の DriverUI のターゲットをコンパイルして実行し、SDV を使用して完全なクラスタ ソリューションを実現するプロセスについて説明します。

図 1. Display Safety のデュアル VM 構造。
HAR と SDV Media のターゲットをビルドする
- ベース メディア ターゲット:
sdv_media_cf- 説明: SDV メディア スタック専用のターゲットで、さまざまなメディア フレームワークの分離テストを容易にします。
- ディレクトリの場所:
device/google/sdv/
- HAR 統合ターゲット:
sdv_media_har_cf- 説明: このターゲットは、メディア スタックを HAR と統合し、Cuttlefish で SDV Media を実行します。
- ディレクトリの場所:
device/google/sdv_dsplay_safety/ - ビルドの実行:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
DriverUI をビルドする
ub-automotive-master ブランチから、
CommandLine または AndroidStudio を使用して、バンドルされていないアプリをビルドできます。
Android Studio で、Gradle ファイル packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle をインポートします。
これは、DriverUI を含むすべてのバンドルされていないアプリを含むメインの Gradle プロジェクトです。 Gradle を使用してプロジェクトをビルドします。
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
ビルドが成功すると、DriverUI APK は
out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apkで使用できるようになります。
DriverUI コードは packages/apps/Car/DriverUI で入手できます。
注: DriverUI はメインの Gradle プロジェクトのサブモジュールであるため、すべての Gradle
タスクは aaos-apps-gradle-project を使用して実行されます。
DriverUI を使用して SDV IVI ターゲットをビルドする
- ベース ターゲット:
sdv_ivi_cf- 説明: x86-64 アーキテクチャの IVI の基盤となる SDV ターゲットとして機能します。
- ディレクトリの場所:
device/google/sdv/
DriverUI 統合ターゲット:
sdv_ivi_cf_ds- 説明: このターゲットは、ベース IVI 構成を拡張して Display Safety コンポーネントを組み込みます。このターゲットは、インストルメント クラスタ内の Display Safety サービスとインタラクションの検証に不可欠です。
- ディレクトリの場所:
device/google/sdv_dsplay_safety/ DriverUI バイナリを追加する: Blueprint
Android.bpファイルとともにDriverUI.apkをpackages/apps/Car/DriverUIPrebuiltにコピーします。# Create a blueprint file, contents of this file are shown in the next step touch /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/Android.bp # Copy DriverUI.apk built cp /path/to/ub-automotive-master/out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/driver-ui-default-debug.apk /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/DriverUI.apk
Android.bp は、モジュール名 DriverUIPrebuilt を使用し、DriverUIStubApp をオーバーライドするように設定する必要があります。
android_app_import {
name: "DriverUIPrebuilt",
overrides: ["DriverUIStubApp"],
apk: "DriverUI.apk",
privileged: true,
product_specific: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.driverui"],
optional_uses_libs: [
"androidx.window.extensions",
"androidx.window.sidecar",
],
enforce_uses_libs: false,
dex_preopt: {
enabled: false,
},
}
ビルドの実行:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-trunk_staging-userdebug m -j
ターゲット デプロイ
両方のターゲットのビルドプロセスが正常に完了すると、Cuttlefish ユーティリティは、このセクションで説明するようにターゲットを開始します。
SDV Media と HAR のデプロイ
HAR ターゲットは、device/google/sdv_media_cf.mk 内で指定されている事前定義済みの sdv-media-config.json 構成を使用して作成されます。
注: SDV Media と SDV IVI はどちらも、Unlocked ブートモードで
Display Safety クラスタの起動されます。詳細については、SDV ブートモードをご覧ください。
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance1 androidboot.virt.address=3"
作成されると、ターミナルに localhost
ポートのブラウザでターゲットにアクセスするためのログが表示されます。Point your browser to https://localhost:8443 to interact with the
device.

図 2. HAR を使用した Display Safety SDV Media VM。
SDV IVI と DriverUI のデプロイ
SDV IVI DriverUI ターゲットは、device/google/sdv_ivi_cf.mk で定義されている既存の sdv-ivi-config.json を使用して開始されます。追加のブート構成パラメータと、クラスタ画面の適切な表示サイズを指定することもできます。
# In the root of the Android source
source build/envsetup.sh
lunch sdv_ivi_cf_ds-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance2 androidboot.virt.address=4" --display1=width=1920,height=720
ターゲットが開始されると、ターミナルに localhost ポートのブラウザでターゲットにアクセスするためのログが表示されます。
Point your browser to https://localhost:8443 to
interact with the device.
SDV-IVI ターゲットと DriverUI ターゲットをデプロイすると、2 つのディスプレイが初期化されます。1 つは SDV-IVI システム用、もう 1 つは DriverUI 用です。DriverUI は、
クラス(Cluster2 とも呼ばれます)を活用して、特権クラスタ アプリとして動作します。ClusterHomeManager

図 3. DriverUI を使用した Display Safety SDV IVI VM。
デュアル VM クラスタのデプロイ
Cuttlefish には、デュアル VM 構成を使用して 2 つの仮想マシン(VM)を起動し、ディスプレイ オーバーレイを実現する機能があります。

図 4. Display Safety のディスプレイ構成の概要。
デュアル VM 構成は、packages/services/display_safety/service/ で入手できる ds-toolkit を使用して起動できます。
m ds_toolkit
ds_toolkit launch
構成が起動されると、ターミナルに localhost ポートのブラウザでターゲットにアクセスするためのログが表示されます。Point your browser to https://localhost:8443 to
interact with the device.
これにより、両方の仮想マシン ディスプレイがオーバーレイされた、完全に動作するクラスタで両方の Cuttlefish ターゲットが起動されます。

図 5. SDV Media と SDV IVI VM を使用した Display Safety の完全なクラスタ。
安全モニターのビルド
安全モニターは、デフォルトで SDV Media ターゲット用にビルドされます。
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
実行時に、安全モニターは、リファレンス クラスタ ディスプレイ用に生成され、APEX にパッケージ化されたコンパイラ アーティファクトのデフォルト セットを使用します。
har-design-compiler を実行すると、新しいアーティファクトが生成されることがあります。このツールはターゲットで実行され、デザインからアーティファクトを生成します。このツールを実行して、ターゲットから新しいアーティファクトを取得し、イメージを再ビルドすることをおすすめします。
このツールは、デフォルトでターゲットにビルドしてインストールされます。
# Run the compiler on the target
adb shell har_design_compiler -c </path/to/artifacts> -o /data/local/tmp/
# Pull the artifacts to the local filesystem
adb pull data/local/tmp/artifacts services/harry-prebuilt/data/assets/
# Rebuild the image
m -j
ターゲットが起動すると、安全モニターが初期化されます。安全モニターはループで継続的に実行され、スクリーン バッファと受信した車両データ信号を分析して、画面上の安全に関わる要素が想定どおりであることを確認します。
安全モニターのログはいつでも確認できます。
adb logcat | grep har-safety-monitor