בדף הזה מופיעה סקירה כללית על גישה לרכיבי בטיחות של תצוגה, בנייה והפעלה שלהם, כולל רכיב הרינדור של זמינות גבוהה (HAR), DriverUI והכלי למעקב אחר בטיחות, בפלטפורמות של רכבים מוגדרים באמצעות תוכנה (SDV).
גישה לקוד
בקטע הזה מוסבר איך מקבלים גישה לבסיס הקוד של הרכיבים HAR ו-DriverUI של Display Safety.
מנוע רינדור עם זמינות גבוהה
במסגרת המאגר הראשי בכתובת packages/services/display_safety/, אפשר למצוא את בסיס הקוד של רכיב הרינדור לזמינות גבוהה (HAR).
בסיס הקוד של HAR בנוי באופן הבא:
- Framework: מכיל ממשקי מסגרת ליבה לפלטפורמה, לרינדור, לאנימציה ולאודיו.
- הפניה: מכיל יישומים ספציפיים לפלטפורמה של ממשקי מסגרת, וגם את הקוד של אפליקציית ההפניה HAR ושל ערכת הכלים לבטיחות (Design Compiler, safety monitor).
- שירות: שירותים ספציפיים ל-Android לשליחה ולקבלה של נתוני רכב בין רכיבים, והגדרות לחבילות הנתונים של APEX.
- Prebuilts: מספק עטיפות לקבצים בינאריים מוכנים מראש, כמו ספריית הגרפיקה 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, ובודקת את האזורים שצוינו כדי למצוא סימנים. תוצאות הבדיקות של 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 זמין במאמר שילוב של אפליקציות לא מקובצות.
בנייה והרצה
בקטע הזה מפורט התהליך של קומפילציה והרצה של יעדי ה-HAR ב-SDV Media ושל DriverUI ב-SDV מערכת מולטימדיה (IVI) כדי להשיג את פתרון האשכול המלא באמצעות SDV.

איור 1. הצגת מבנה של מכונה וירטואלית כפולה לאבטחה.
יצירת יעד מדיה של HAR ו-SDV
- יעד המדיה הבסיסי:
sdv_media_cf- תיאור: יעד ייעודי למערך המדיה של SDV, שמאפשר בדיקה מבודדת של מסגרות מדיה שונות.
- המיקום בספרייה:
device/google/sdv/
- יעד משולב של HAR:
sdv_media_har_cf- תיאור: היעד הזה משלב את מחסנית המדיה עם HAR, ומבצע SDV Media ב-Cuttlefish.
- המיקום בספרייה:
device/google/sdv_dsplay_safety/ - הרצת build:
# 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. מבצעים Build לפרויקט באמצעות Gradle:
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
אחרי שהגרסה נוצרת בהצלחה, קובץ ה-APK של DriverUI זמין בכתובת
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.
יצירת יעד SDV IVI באמצעות DriverUI
- יעד בסיסי:
sdv_ivi_cf- תיאור: זהו יעד ה-SDV הבסיסי ל-IVI בארכיטקטורת x86-64.
- המיקום בספרייה:
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,
},
}
הרצת build:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-trunk_staging-userdebug m -j
פריסת היעד
אחרי שתהליך ה-build של שני היעדים יושלם בהצלחה, כלי השירות של Cuttlefish יעזרו להפעיל את היעדים כמו שמתואר בקטע הזה.
פריסת SDV Media ו-HAR
יעד ה-HAR נוצר באמצעות ההגדרה המוגדרת מראש sdv-media-config.json, שמצוינת בתוך 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. הצגת מכונת VM של מדיה ב-SDV של בטיחות עם HAR.
פריסת SDV IVI ו-DriverUI
יעד SDV IVI DriverUI מתחיל לפעול באמצעות sdv-ivi-config.json הקיים שמוגדר ב-device/google/sdv_ivi_cf.mk. אפשר גם לציין פרמטרים נוספים של הגדרת האתחול ומידות מתאימות של התצוגה למסך של האשכול.
# 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 class (שנקרא גם Cluster2).

איור 3. הצגת מכונת וירטואלית של SDV IVI עם DriverUI.
פריסה של אשכול כפול של מכונות וירטואליות
Cuttlefish מאפשר להפעיל שתי מכונות וירטואליות (VM) באמצעות הגדרה של שתי מכונות וירטואליות כדי להשיג שכבת-על של תצוגה.

איור 4. הצגת סקירה כללית על הרכב התצוגה של 'אבטחת תצוגה'.
אפשר להפעיל את התצורה של מכונה וירטואלית כפולה באמצעות ds-toolkit שזמין בכתובת packages/services/display_safety/service/.
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-trunk_staging-userdebug
m -j
בזמן הריצה, מנגנון הבקרה של הבטיחות משתמש בקבוצת ברירת מחדל של ארטיפקטים של קומפיילר שנוצרו ונארזו ב-APEX לצורך הצגת אשכול ההפניה.
יכול להיות שיווצרו ארטיפקטים חדשים בהרצת הפקודה har-design-compiler. הכלי הזה פועל ביעד כדי ליצור פריטי מידע שנוצרו בתהליך פיתוח (Artifact) מתוך עיצוב. מומלץ להריץ את הכלי, לשלוף את הארטיפקטים החדשים מהיעד ולבנות מחדש את התמונה.
הכלי נוצר ומוגדר ביעד כברירת מחדל.
# 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