بدء استخدام ميزة "أمان الإعلانات الصورية"

تقدّم هذه الصفحة نظرة عامة حول الوصول إلى مكوّنات ميزة الأمان على الشاشة وإنشائها وتشغيلها، بما في ذلك أداة العرض عالية التوفّر (HAR)، وDriverUI، وشاشة الأمان، على منصات المركبات المحدّدة بالبرامج (SDV).

الوصول إلى الرمز

يتناول هذا القسم كيفية الوصول إلى قاعدة الرموز البرمجية لمكوّنات ميزة "الأمان على الشاشة" في HAR وDriverUI.

أداة العرض عالية التوفّر

تتوفّر قاعدة الرموز البرمجية لأداة العرض عالية التوفّر (HAR) كجزء من عملية سحب المستودع الرئيسي في packages/services/display_safety/.

تمت هيكلة قاعدة الرموز البرمجية لأداة العرض عالية التوفّر على النحو التالي:

  • إطار العمل: يحتوي على واجهات إطار العمل الأساسية للمنصة والعرض والرسوم المتحركة والصوت.
  • المرجع: يحتوي على عمليات التنفيذ الخاصة بالمنصة لواجهات إطار العمل، بالإضافة إلى الرمز البرمجي لتطبيق HAR المرجعي، ومجموعة أدوات الأمان (برنامج تجميع التصميم وشاشة الرصد).
  • الخدمة: خدمات خاصة بنظام Android لإرسال بيانات المركبة وتلقّيها بين المكوّنات، وتعريفات لحِزم بيانات APEX.
  • الإصدارات المُعدّة مسبقًا: توفّر أغلفة للثنائيات المُعدّة مسبقًا، مثل مكتبة الرسومات Impeller.

يقع رمز التطبيق المرجعي Harry في packages/services/display_safety/reference/harry_app.

للاطّلاع على بنية الدليل التفصيلية لأداة العرض عالية التوفّر، يُرجى مراجعة بنية رمز ميزة "الأمان على الشاشة"

شاشة الأمان

تتوفّر قاعدة الرموز البرمجية لشاشة الأمان كجزء من عملية سحب المستودع الرئيسي في packages/services/display_safety/reference/safety-monitor.

تمت هيكلة رمز شاشة الأمان على النحو التالي:

  • main.rs: يسترد العناصر الدالة، ويهيئ خادم بيانات المركبة، وحلقات مراقبة العناصر الدالة. تتم مقارنة المعلومات حول مدى ظهور العناصر الدالة بنتائج فحص العناصر الدالة، ويتم تقديم النتائج باستخدام سجلات المركبات المحدّدة بالبرامج.
  • Vehicle_data_server.rs: هو الخادم الذي يشترك في بيانات المركبة، ويعدّل مدى ظهور العناصر الدالة للحلقة الرئيسية.
  • Telltale_monitoring.rs: يتم تشغيله في حلقة، ويسترد نسخة من مخزن الشاشة باستخدام حزمة screencap، ويفحص المناطق المحدّدة بحثًا عن العناصر الدالة. بعد ذلك، يتم إرسال نتائج عمليات فحص العناصر الدالة إلى الحلقة الرئيسية.

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 وDriverUI في نظام المعلومات والترفيه داخل المركبة (IVI) في المركبات المحدّدة بالبرامج لتحقيق حلّ المجموعة الكاملة باستخدام المركبات المحدّدة بالبرامج.

الأجهزة الافتراضية للضيوف

الشكل 1: بنية الجهازَين الافتراضيَين لميزة "الأمان على الشاشة"

إنشاء أداة العرض عالية التوفّر وهدف SDV Media

  • هدف الوسائط الأساسي: sdv_media_cf
    • الوصف: هدف مخصّص لمجموعة وسائط المركبات المحدّدة بالبرامج، ما يسهّل إجراء اختبار معزول لمختلف أُطر الوسائط
    • موقع الدليل: device/google/sdv/
  • الهدف المدمج لأداة العرض عالية التوفّر: sdv_media_har_cf
    • الوصف: يدمج هذا الهدف مجموعة الوسائط مع أداة العرض عالية التوفّر، ويشغّل SDV Media على Cuttlefish.
    • موقع الدليل: 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، يمكنك إنشاء تطبيقات غير مجمّعة باستخدام سطر الأوامر أو Android Studio.

في استوديو Android، استورِد ملف 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

بعد عملية إنشاء ناجحة، يتوفّر ملف 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
    • الوصف: هذا هو هدف المركبات المحدّدة بالبرامج الأساسي لنظام المعلومات والترفيه داخل المركبة على بنية x86-64.
    • موقع الدليل: device/google/sdv/
  • الهدف المدمج في DriverUI:sdv_ivi_cf_ds

    • الوصف: يوسّع هذا الهدف إعدادات نظام المعلومات والترفيه داخل المركبة الأساسية لدمج مكوّنات ميزة "الأمان على الشاشة". هذا الهدف ضروري للتحقق من صحة خدمات ميزة "الأمان على الشاشة" وتفاعلاتها ضمن لوحة العدادات.
    • موقع الدليل: 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 Media وأداة العرض عالية التوفّر

يتم إنشاء هدف أداة العرض عالية التوفّر باستخدام الإعدادات المُحدّدة مسبقًا sdv-media-config.json، والتي يتم تحديدها ضمن device/google/sdv_media_cf.mk.

ملاحظة: يتم تشغيل كل من SDV Media وSDV IVI في وضع التشغيل Unlocked لمجموعة ميزة "الأمان على الشاشة" . لمعرفة معلومات مفصّلة، يُرجى مراجعة وضع تشغيل المركبات المحدّدة بالبرامج.

# 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.

HAR in SDV Media VM

الشكل 2: الجهاز الافتراضي SDV Media لميزة "الأمان على الشاشة" مع أداة العرض عالية التوفّر

نشر SDV IVI وDriverUI

يبدأ هدف DriverUI في SDV IVI باستخدام 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 فئة (المعروفة أيضًا باسم Cluster2).

DriverUI في جهاز SDV-IVI الافتراضي

الشكل 3: الجهاز الافتراضي SDV IVI لميزة "الأمان على الشاشة" مع DriverUI

نشر مجموعة الجهازَين الافتراضيَين

توفّر Cuttlefish إمكانية تشغيل جهازَين افتراضيَين باستخدام إعدادات الجهازَين الافتراضيَين لتحقيق تراكب الشاشة.

تركيب العرض

الشكل 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

إنشاء شاشة الأمان

يتم إنشاء شاشة الأمان تلقائيًا لأي من هدفَي SDV Media:

# 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