Mulai menggunakan Keselamatan Display

Halaman ini memberikan ringkasan untuk mengakses, mem-build, dan menjalankan komponen Display Safety, termasuk perender ketersediaan tinggi (HAR), DriverUI, dan monitor keselamatan, di seluruh platform Software Defined Vehicle (SDV).

Akses kode

Bagian ini membahas cara mendapatkan akses ke codebase untuk komponen Display Safety HAR dan DriverUI.

Perender ketersediaan tinggi

Codebase untuk perender ketersediaan tinggi (HAR) tersedia sebagai bagian dari checkout repositori utama di packages/services/display_safety/.

Codebase untuk HAR disusun sebagai berikut:

  • Framework: Berisi antarmuka framework inti untuk platform, rendering, animasi, dan audio.
  • Referensi: Berisi implementasi khusus platform untuk antarmuka framework, serta kode untuk aplikasi referensi HAR, dan toolchain keselamatan (Compiler Desain, monitor keselamatan).
  • Layanan: Layanan khusus Android untuk mengirim dan menerima data kendaraan antar-komponen, dan definisi untuk paket data APEX.
  • Prebuilts: Menyediakan wrapper untuk biner bawaan seperti library grafis Impeller.

Kode aplikasi referensi Harry terletak di packages/services/display_safety/reference/harry_app.

Untuk mengetahui struktur direktori HAR yang mendetail, lihat Struktur Kode Display Safety

Monitor keselamatan

Codebase untuk monitor keselamatan tersedia sebagai bagian dari checkout repositori utama di packages/services/display_safety/reference/safety-monitor.

Kode monitor keselamatan disusun sebagai berikut:

  • main.rs: Mengambil artefak telltale, menginisialisasi server data kendaraan, dan loop pemantauan telltale. Informasi tentang visibilitas telltale dibandingkan dengan hasil pemeriksaan telltale, dengan hasil yang diberikan menggunakan log SDV.
  • Vehicle_data_server.rs: Server yang berlangganan data kendaraan, memperbarui visibilitas telltale untuk loop utama.
  • Telltale_monitoring.rs: Berjalan dalam loop, mengambil salinan screenbuffer menggunakan screencap crate, dan memeriksa wilayah yang ditentukan untuk telltale. Hasil pemeriksaan telltale kemudian dikirim ke loop utama.

DriverUI

DriverUI tersedia sebagai bagian dari codebase yang tidak dibundel, yang dapat Anda akses dari cabang 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

Untuk mengetahui informasi selengkapnya tentang sumber yang tidak dibundel dan Google, lihat Mengintegrasikan aplikasi yang tidak dibundel.

Membuat dan menjalankan

Bagian ini menjelaskan proses kompilasi dan eksekusi target untuk HAR dalam SDV Media dan DriverUI dalam SDV In-Vehicle Infotainment (IVI) untuk mencapai solusi cluster lengkap dengan SDV.

VM tamu

Gambar 1. Struktur VM ganda Display Safety.

Mem-build target HAR dan SDV Media

  • Target media dasar: sdv_media_cf
    • Deskripsi: Target khusus untuk stack media SDV, yang memfasilitasi pengujian terisolasi dari berbagai framework media.
    • Lokasi direktori: device/google/sdv/
  • Target terintegrasi HAR: sdv_media_har_cf
    • Deskripsi: Target ini mengintegrasikan stack media dengan HAR, menjalankan SDV Media di Cuttlefish.
    • Lokasi direktori: device/google/sdv_dsplay_safety/
    • Eksekusi build:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

Mem-build DriverUI

Dari cabang ub-automotive-master, Anda dapat mem-build aplikasi yang tidak dibundel menggunakan CommandLine atau AndroidStudio.

Di Android Studio, impor file Gradle: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

Ini adalah project Gradle utama dengan semua aplikasi yang tidak dibundel, termasuk DriverUI. Build project menggunakan Gradle:

# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble

Setelah build berhasil, DriverUI APK tersedia di out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/ driver-ui-default-debug.apk

Kode DriverUI tersedia di packages/apps/Car/DriverUI

Catatan: DriverUI adalah submodul dari project Gradle utama, sehingga semua tugas Gradle dijalankan menggunakan aaos-apps-gradle-project.

Mem-build target SDV IVI dengan DriverUI

  • Target Dasar: sdv_ivi_cf
    • Deskripsi: Target ini berfungsi sebagai target SDV dasar untuk IVI pada arsitektur x86-64.
    • Lokasi direktori: device/google/sdv/
  • Target Terintegrasi DriverUI: sdv_ivi_cf_ds

    • Deskripsi: Target ini memperluas konfigurasi IVI dasar untuk menggabungkan komponen Display Safety. Target ini penting untuk validasi layanan dan interaksi Display Safety dalam cluster instrumen.
    • Lokasi direktori: device/google/sdv_dsplay_safety/
    • Menambahkan biner DriverUI: Salin DriverUI.apk ke packages/apps/Car/DriverUIPrebuilt bersama dengan file 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 harus disiapkan untuk menggunakan nama modul DriverUIPrebuilt dan mengganti 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,
    },
}
  • Eksekusi build:

    # In the root of the Android source
    source build/envsetup.sh
    lunch sdv_ivi_cf_ds-trunk_staging-userdebug
    m -j
    

Deployment target

Setelah proses build untuk kedua target berhasil diselesaikan, utilitas Cuttlefish akan membantu memulai target seperti yang dijelaskan di bagian ini.

Deployment SDV Media dan HAR

Target HAR dibuat menggunakan konfigurasi sdv-media-config.json yang telah ditentukan, yang ditentukan dalam device/google/sdv_media_cf.mk.

Catatan: SDV Media dan SDV IVI diluncurkan dalam mode booting Unlocked untuk cluster Display Safety. Untuk mengetahui informasi mendetail, lihat Mode Booting 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"

Setelah dibuat, terminal akan menampilkan log untuk mengakses target di browser pada port localhost: Point your browser to https://localhost:8443 to interact with the device.

HAR di VM Media SDV

Gambar 2. VM SDV Media Display Safety dengan HAR.

Deployment SDV IVI dan DriverUI

Target SDV IVI DriverUI dimulai menggunakan sdv-ivi-config.json yang ada dan ditentukan di device/google/sdv_ivi_cf.mk. Anda juga dapat menentukan parameter konfigurasi booting tambahan dan dimensi tampilan yang sesuai untuk layar cluster.

# 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

Setelah target dimulai, terminal akan menampilkan log untuk mengakses target di browser pada port localhost: Point your browser to https://localhost:8443 to interact with the device.

Deployment target SDV-IVI dan DriverUI menginisialisasi dua tampilan: satu untuk sistem SDV-IVI dan satu lagi untuk DriverUI. The DriverUI beroperasi sebagai aplikasi cluster yang memiliki hak istimewa, yang memanfaatkan ClusterHomeManager class (juga dikenal sebagai Cluster2).

DriverUI di VM SDV-IVI

Gambar 3. VM SDV IVI Display Safety dengan DriverUI.

Deployment cluster VM ganda

Cuttlefish menyediakan kemampuan untuk meluncurkan dua Mesin Virtual (VM) menggunakan konfigurasi VM ganda untuk mencapai overlay tampilan.

Komposisi Tampilan

Gambar 4. Ringkasan komposisi tampilan Display Safety.

Anda dapat meluncurkan konfigurasi VM ganda menggunakan ds-toolkit yang tersedia di packages/services/display_safety/service/.

m ds_toolkit
ds_toolkit launch

Setelah konfigurasi diluncurkan, terminal akan menampilkan log untuk mengakses target di browser pada port localhost: Point your browser to https://localhost:8443 to interact with the device.

Tindakan ini meluncurkan kedua target Cuttlefish dalam cluster yang beroperasi penuh dengan kedua tampilan mesin virtual yang di-overlay.

Menampilkan cluster lengkap Keselamatan

Gambar 5. Cluster lengkap Display Safety dengan VM SDV Media dan SDV IVI.

Mem-build monitor keselamatan

Monitor keselamatan di-build secara default untuk target SDV Media:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

Pada waktu proses, monitor keselamatan menggunakan kumpulan artefak compiler default yang dibuat dan dikemas ke dalam APEX untuk tampilan cluster referensi.

Artefak baru dapat dibuat dengan menjalankan har-design-compiler. Alat ini berjalan pada target untuk membuat artefak dari desain. Sebaiknya jalankan alat ini, tarik artefak baru dari target, dan build ulang image. Alat ini di-build dan diinstal pada target secara default.

# 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

Monitor keselamatan diinisialisasi saat target di-booting. Monitor keselamatan akan berjalan terus-menerus dalam loop untuk memverifikasi elemen penting keselamatan di layar terhadap apa yang diharapkan dengan menganalisis buffer layar dan sinyal data kendaraan yang masuk.

Anda dapat melihat log monitor keselamatan kapan saja:

adb logcat | grep har-safety-monitor