開始使用多媒體廣告安全功能

本頁提供存取、建構及執行 Display Safety 元件的總覽,包括高可用性渲染器 (HAR)DriverUI安全監控器,適用於軟體定義車輛 (SDV) 平台。

存取程式碼

本節說明如何存取 HARDriverUI 螢幕安全元件的程式碼集。

高可用性渲染器

高可用性轉譯器 (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 實現完整的叢集解決方案。

客體 VM

圖 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 分支中,您可以使用 CommandLineAndroidStudio 建構未綁定的應用程式。

在 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,並附上 Blueprint Android.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.

SDV 媒體 VM 中的 HAR

圖 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)。

SDV-IVI VM 中的 DriverUI

圖 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