本頁提供存取、建構及執行 Display Safety 元件的總覽,包括高可用性渲染器 (HAR)、DriverUI 和安全監控器,適用於軟體定義車輛 (SDV) 平台。
存取程式碼
本節說明如何存取 HAR 和 DriverUI 螢幕安全元件的程式碼集。
高可用性渲染器
高可用性轉譯器 (HAR) 的程式碼集位於 packages/services/display_safety/,是主要存放區結帳的一部分。
HAR 的程式碼基底結構如下:
- 架構:包含平台、算繪、動畫和音訊的核心架構介面。
- 參考資料:包含架構介面的平台專屬實作項目,以及 HAR 參考應用程式的程式碼和安全工具鍊 (設計編譯器、安全監控器)。
- 服務:Android 專用服務,用於在元件之間傳送及接收車輛資料,以及 APEX 資料套件的定義。
- 預建項目:提供預建二進位檔的包裝函式,例如 Impeller 圖形程式庫。
Harry 參考應用程式程式碼位於 packages/services/display_safety/reference/harry_app。
如要查看 HAR 的詳細目錄結構,請參閱「顯示安全碼結構」。
安全監控
安全監控程式碼集位於主要存放區,可透過 packages/services/display_safety/reference/safety-monitor 簽出。
安全監控器程式碼的結構如下:
main.rs:擷取指標構件、初始化車輛資料伺服器和指標監控迴圈。系統會比較顯著特徵的曝光度資訊與顯著特徵檢查結果,並使用 SDV 記錄提供結果。Vehicle_data_server.rs:訂閱車輛資料的伺服器,可更新主迴圈的警示燈顯示狀態。Telltale_monitoring.rs:以迴圈形式執行,使用 screencap Crate 擷取螢幕緩衝區副本,並檢查指定區域是否有徵兆。然後,系統會將檢查結果傳送至主迴圈。
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 中的目標,以及 SDV 車用資訊娛樂系統 (IVI) 中的 DriverUI,以透過 SDV 實現完整的叢集解決方案。

圖 1. 顯示 Safety 雙 VM 結構。
建立 HAR 和 SDV 媒體目標
- 基本媒體目標:
sdv_media_cf- 說明:SDV 媒體堆疊的專屬目標,可簡化各種媒體架構的獨立測試。
- 目錄位置:
device/google/sdv/
- HAR 整合目標:
sdv_media_har_cf- 說明:這個目標會整合媒體堆疊與 HAR,在 Cuttlefish 上執行 SDV 媒體。
- 目錄位置:
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
這是主要的 Gradle 專案,包含所有未綁定的應用程式,包括 DriverUI。使用 Gradle 建構專案:
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
建構成功後,您可以在 out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apk 找到 DriverUI 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 Integrated Target:
sdv_ivi_cf_ds- 說明:這個目標會擴充基本 IVI 設定,納入螢幕安全元件。這個目標對於驗證儀表板中的螢幕安全服務和互動至關重要。
- 目錄位置:
device/google/sdv_dsplay_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-trunk_staging-userdebug m -j
目標部署作業
成功完成這兩個目標的建構程序後,Cuttlefish 公用程式會協助啟動目標,如本節所述。
SDV 媒體和 HAR 部署作業
系統會使用預先定義的 sdv-media-config.json 設定建立 HAR 目標,該設定是在 device/google/sdv_media_cf.mk 中指定。
注意: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. 顯示 Safety SDV Media VM with HAR。
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 目標時,會初始化兩個螢幕:一個用於 SDV-IVI 系統,另一個用於 DriverUI。DriverUI 會以具備權限的叢集應用程式運作,並運用 ClusterHomeManager 類別 (也稱為 Cluster2)。

圖 3. 顯示 Safety SDV IVI VM,並搭配 DriverUI。
部署雙 VM 叢集
Cuttlefish 提供使用雙 VM 設定啟動兩個虛擬機器 (VM) 的功能,以實現螢幕重疊。

圖 4. 顯示安全螢幕顯示器組合總覽。
您可以使用 packages/services/display_safety/service/ 提供的 ds-toolkit 啟動雙 VM 設定。
m ds_toolkit
ds_toolkit launch
啟動設定後,終端機會顯示記錄,方便您透過 localhost 通訊埠在瀏覽器中存取目標:Point your browser to https://localhost:8443 to
interact with the device.
這會啟動兩個 Cuttlefish 目標,並在功能完整的叢集中疊加兩個虛擬機器螢幕。

圖 5. 顯示具有 SDV 媒體和 SDV IVI VM 的完整叢集。
建築安全監控
系統會預設為 SDV 媒體目標建立安全監控器:
# 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