このページでは、ソフトウェア定義車両(SDV)プラットフォーム全体で、高可用性レンダラ(HAR)、DriverUI、安全モニターなどのディスプレイ セーフティ コンポーネントにアクセス、ビルド、実行する方法の概要を説明します。
コードアクセス
このセクションでは、HAR と DriverUI のディスプレイ セーフティ コンポーネントのコードベースにアクセスする方法について説明します。
高可用性レンダラ
高可用性レンダラ(HAR)のコードベースは、packages/services/display_safety/ のメイン リポジトリ チェックアウトの一部として入手できます。
HAR のコードベースは次のように構成されています。
- フレームワーク: プラットフォーム、レンダリング、アニメーション、オーディオのコア フレームワーク インターフェースが含まれています。
- リファレンス: フレームワーク インターフェースのプラットフォーム固有の実装、HAR リファレンス アプリのコード、安全ツールチェーン(Design Compiler、安全モニター)が含まれています。
- サービス: コンポーネント間で車両データを送受信するための Android 固有のサービスと、APEX データ パッケージの定義。
- Prebuilts: Impeller グラフィック ライブラリなどのビルド済みバイナリのラッパーを提供します。
Harry リファレンス アプリのコードは packages/services/display_safety/reference/harry_app にあります。
HAR の詳細なディレクトリ構造については、ディスプレイ セーフティ コードの構造をご覧ください。
安全モニター
安全モニターのコードベースは、packages/services/display_safety/reference/safety-monitor のメイン リポジトリ チェックアウトの一部として利用できます。
安全モニターのコードは次のように構成されています。
main.rs: 警告灯アーティファクトを取得し、車両データサーバーと警告灯モニタリング ループを初期化します。telltale の視認性に関する情報は、telltale の検査結果と比較され、結果は SDV ログを使用して提供されます。Vehicle_data_server.rs: 車両 データをサブスクライブし、メインループの警告灯の表示を更新するサーバー。Telltale_monitoring.rs: ループで実行され、screencap クレートを使用してスクリーン バッファのコピーを取得し、指定された領域でテルテールを検査します。telltale 検査の結果はメインループに送信されます。
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. ディスプレイ セーフティのデュアル VM 構造。
HAR と SDV のメディア ターゲットを構築する
- ベース メディア ターゲット:
sdv_media_cf- 説明: SDV メディア スタック専用のターゲット。さまざまなメディア フレームワークの分離テストを容易にします。
- ディレクトリの場所:
device/google/sdv/
- HAR 統合ターゲット:
sdv_media_har_cf- 説明: このターゲットは、メディア スタックを HAR と統合し、Cuttlefish で SDV Media を実行します。
- ディレクトリの場所:
device/google/sdv_display_safety/ - ビルドの実行:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-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 構成を拡張して、ディスプレイ セーフティ コンポーネントを組み込みます。このターゲットは、インストルメント クラスタ内のディスプレイ セーフティ サービスとインタラクションの検証に不可欠です。
- ディレクトリの場所:
device/google/sdv_display_safety/ DriverUI バイナリを追加する:
DriverUI.apkをpackages/apps/Car/DriverUIPrebuiltにコピーし、BlueprintAndroid.bpファイルもコピーします。# 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-aosp_current-userdebug m -j
ターゲット デプロイ
両方のターゲットのビルドプロセスが正常に完了すると、Cuttlefish ユーティリティは、このセクションで説明されているようにターゲットの起動を支援します。
SDV メディアと高解像度(HAR)のデプロイ
HAR ターゲットは、device/google/sdv_media_cf.mk 内で指定されている事前定義の sdv-media-config.json 構成を使用して作成されます。
注: SDV Media と SDV IVI はどちらも、ディスプレイ セーフティ クラスタの Unlocked ブートモードで起動されます。詳細については、SDV 起動モードをご覧ください。
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-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 を使用して 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-aosp_current-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 つのディスプレイ(SDV-IVI システム用と DriverUI 用)が初期化されます。DriverUI は、ClusterHomeManager クラス(Cluster2 とも呼ばれます)を利用して、特権付きクラスタアプリとして動作します。

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

図 4. ディスプレイの安全性のディスプレイ構成の概要。
デュアル 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 を使用して、ディスプレイ セーフティ フルクラスタを表示します。
建物の安全監視
安全モニターは、デフォルトで次のいずれかの SDV メディア ターゲット用に構築されます。
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
実行時に、安全モニターは、リファレンス クラスタ ディスプレイ用に生成され、APEX にパッケージ化されたコンパイラ アーティファクトのデフォルト セットを使用します。
har-design-compiler を実行すると、新しいアーティファクトが生成されることがあります。このツールは、ターゲット上で実行され、設計からアーティファクトを生成します。ツールを実行し、ターゲットから新しいアーティファクトを pull して、イメージを再ビルドすることをおすすめします。このツールは、デフォルトでビルドされ、ターゲットにインストールされます。
# 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