تم تصميم تطبيق Dashcam للدمج مع AAOS، ما يمنح السائقين إمكانيات تسجيل الفيديو لتعزيز السلامة والأمان. يوضّح هذا الدليل المتطلبات الفنية وخطوات الدمج وأفضل الممارسات ل ضمان تنفيذ ناجح.
المتطلّبات الأساسية
قبل المتابعة، تأكَّد من استيفاء الشروط الأساسية التالية:
حزمة SDK:
- يجب توفُّر الإصدار 31 من حزمة تطوير البرامج (SDK) أو إصدار أحدث.
الأجهزة:
- كاميرات EVS أو Camera2 المتاحة لنظام التشغيل AAOS
- يجب أن تتوفّر مساحة تخزين داخلية كافية أو أن يكون الجهاز متوافقًا مع وحدات التخزين الخارجية القابلة للإزالة
لتسجيل الفيديوهات.
متطلبات البرامج:
- الدعم غير المُضمَّن في الحزمة: لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التطبيقات التي تم إلغاء تجميعها.
- الأذونات: يتطلّب تطبيق Dashcam الحصول على أذونات النظام.
الحصول على رمز المصدر
يمكنك العثور على رمز المصدر في "بحث الرموز البرمجية لنظام التشغيل Android" على الرابط التالي:
يتم توفير رمز المصدر في الوحدات الثلاث التالية:
- خدمة كاميرا Dashcam: منطق البث والتسجيل والتشغيل
- مدير كاميرا Dashcam يتصل بخدمة كاميرا السرعة ويوفّر واجهة برمجة تطبيقات مستقرة للعملاء.
- تطبيق Dashcam: يمكنك الرجوع إلى تطبيق Dashcam باستخدام واجهة برمجة التطبيقات Dashcam Manager API.
إنشاء كاميرا Dashcam
استخدِم Soong أو Gradle لإنشاء تطبيق Dashcam.
سونغ
قبل إنشاء التطبيق من Soong، احرص على تنظيف أدلة .cxx
.
على Soong:
mma DashcamService DashcamManager-lib DashcamApp
يمكن العثور على حِزم APK في out/target/product/[lunch-target]/system/priv-app/
.
Gradle
في Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
يمكن العثور على حِزم APK في out/aaos-apps-gradle-build/
.
تتوفّر تعليمات مفصّلة لإنشاء تطبيق Dashcam باستخدام Gradle في ملف
README
.
الأذونات
تتطلب خدمة Dashcam وتطبيق Dashcam العديد من أذونات النظام.
إنّ الطريقة الأكثر وضوحًا لمنح هذه الأذونات هي تضمينها في إعداد مُعدّ مسبقًا باستخدام Blueprint أو Make.
في "الخطة":
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
في Make:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
أنشئ ملف أذونات باسم allowed_privapp_com.android.car.dashcam.xml
:
<permissions>
<privapp-permissions package="com.android.car.dashcam">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
أضِف الأذونات من البيان إلى ملف الأذونات.
لمزيد من المعلومات، يُرجى الاطّلاع على التطبيقات المُنشأة مسبقًا في صورة نظام.
التحميل الجانبي
يمكن أيضًا تثبيت ملف الأذونات من مصدر غير معروف. استخدِم هذه الطريقة عندما لا تكون كاميرا الdashcam المُنشأة مسبقًا مُعدَّة.
باستخدام ملف الأذونات الذي تم إنشاؤه في قسم "الإصدارات المُسبقة الإنشاء" سابقًا، نفِّذ ما يلي:
adb root
adb remount
adb push allowed_privapp_com.android.car.dashcam.xml /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
adb shell chmod 644 /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
ضبط الصور التي تظهر على سطح الفيديو
تحتوي خدمة كاميرا السيارة على إعدادات يمكن تداخلها.
إعداد الخدمة
dashcam-service/res/values/config.xml
يحتوي هذا الملف على إعدادات الخدمة:
allow_internal_storage
السماح بحفظ التسجيلات في وحدة التخزين الداخليةsave_location
اسم الدليل الذي سيتم حفظ التسجيلات فيه القيمة التلقائية هي dashcammax_storage_mb
مقدار مساحة التخزين التي يمكن أن تستخدمها كاميرا داشكاميراmax_age_days
المدة التي يتم خلالها الاحتفاظ بملف قبل إزالة المحتوى غير الهامboot_startup_enabled
بدء خدمة Dashcam عند تشغيل الجهازnotifications_on
عرض الإشعارات عند بدء التسجيلnative_recorder
استخدام واجهات برمجة تطبيقات NDK، الإعداد التلقائي هو واجهات برمجة تطبيقات Javanative_renderer
استخدام واجهات برمجة تطبيقات NDK، الإعداد التلقائي هو واجهات برمجة تطبيقات Javadefault_app_component
تطبيق كاميرا داش التلقائي، وهو تطبيق يتمتع بإمكانية الوصول إلى التسجيلات العالمية وإمكانية الوصول إلى عوامل التفعيل العالميةrecording_module
اسم المكوِّن لتنفيذ IRecordingModulestreaming_module
اسم المكوِّن لتنفيذ IRecordingModuletrigger_module
اسم المكوِّن لتنفيذ IRecordingModule
ضبط عامل تشغيل
لبدء عملية الضبط، شغِّل:
dashcam-service/src/assets/config.xml
يحتوي هذا الملف على إعدادات لتسجيل عوامل التفعيل. يتألّف إعداد العامل المشغِّل من جزأين:
معرّف الإعلانات ما قبل التشغيل: رقم تعريف الكاميرا، إما EVS أو Camera2، حسب الميزات المتوافقة
prerollLengthMs
طول المحتوى الذي يتم تخزينه قبل عرض الفيديو مع كل حدث
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
يعرض هذا المثال معرّف الكاميرا 0 مع إعلان ما قبل التشغيل الذي تبلغ مدته 10 ثوانٍ.
name
اسم العامل المشغِّل الفريدcamera
رقم تعريف الكاميرا، إما EVS أو Camera2 حسب ما هو متوافقsensorPropertyID
رقم تعريف أداة الاستشعارdescription
وصف عامل الظهور الذي يظهر في واجهة المستخدمrecordingLengthMs
المدة بعد الحدث المطلوب تسجيلها بالمللي ثانيةsensorType
نوع أداة الاستشعار الخياران هماVHAL
أوSENSOR_MANAGER
sensorValueType
نوع البيانات التي يقدّمها أداة الاستشعار الخيارات هيINT
INT_ARRAY
وFLOAT
وFLOAT_ARRAY
وBOOLEAN, STRING
.thresholdType
كيفية تقييم قيمة أداة الاستشعار الخيارات هيAVERAGE
BOOLEAN
وEQUALS
وLEAP
وLEAP_AVERAGE
وLEAP_OVER
وPEAK
PEAK_HOLD
thresholdValue
القيمة التي تتم مقارنة قيمة أداة الاستشعار بها باستخدام نوع الحدّthresholdExtra
يجب توفير قيمة إضافية لبعض أنواع الحدود الدنيا، مثل النطاق لـAVERAGE
triggerCooldown
فترة الانتظار قبل بدء حدث آخر من هذا النوع بالملي ثانية
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
يعرض هذا المثال أداة استشعار VHAL تُنتج قيمًا صحيحة حيث نقارن بين المساواة وقيمة الحدّ الأدنى. عند استيفاء شرط المساواة، يتم بدء تسجيل المحتوى في الكاميراَين 1 و2.
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
يعرض هذا المثال أداة استشعار VHAL تُنشئ قيمًا عائمة حيث نقيّم
المتوسط على نطاق عيّنات مقارنةً بقيمة الحدّ الأدنى. تم ضبط النطاق
للعيّنات في thresholdExtra
الوحدات
تتألف خدمة Dashcam من ثلاث وحدات:
يحتوي البث على منطق معالجة أحداث البث من الكاميرات.
يحتوي التسجيل على منطق معالجة التسجيلات.
يحتوي العامل المشغِّل على منطق بدء التسجيل من بيانات أجهزة الاستشعار. يتم تعريف واجهات برمجة تطبيقات الوحدة في واجهاتها المقابلة، وهي
IStreamModule
وIRecorderModule
وITriggerModule
، ويتم عرضها على DashcamManager من خلالDashcamServiceAPI
.
وحدات الإعلانات التي تظهر على سطح الفيديو
تستخدِم خدمة Dashcam dashcam-service/res/values/config.xml
لتحديد مكان
العثور على عمليات تنفيذ الوحدات. نقدّم عمليات تنفيذ تلقائية لكل
وحدة. ومع ذلك، يمكن تراكب كل وحدة من خلال ضبط مكوّنها في قيمة الإعدادات المقابلة.
اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز
IRecorderModule
علىrecording_module
.اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز
IStreamModule
على وحدة البث.اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز
ITriggerModule
علىtrigger_module
.أثناء التشغيل، تنشئ خدمة Dashcam مثيلًا لاسم المكوّن الذي تم ضبطه في
config.xml
لكل وحدة.
دليل مطوّري التطبيقات
Dashcam هو حلّ وقابل للتخصيص لكاميرا داش. تستخدم كاميرا Dashcam
واجهات برمجة تطبيقات Dashcam Manager للتواصل مع Dashcam service
. يمكن العثور على واجهة برمجة التطبيقات Dashcam
Manager API على الرابط IDashcamManager
. يمكن لأي تطبيق لديه التصاريح المطلوبة استخدام "مدير كاميرا Dashcam".
الأذونات
كاميرا 2 وEVS متاحان.
مركّبة مسبقًا
إنّ أسهل طريقة لمنح هذه الأذونات هي تضمينها في الإعداد المُعدّ مسبقًا باستخدام Blueprint أو Make.
OverlayUI
يمكن تخصيص التطبيق باستخدام "تراكبات موارد وقت التشغيل". لمزيد من المعلومات، يُرجى الاطّلاع على تراكبات الموارد أثناء التشغيل. لاطلاعك على قائمة العناصر التي يمكن تداخلها، اطّلِع على overlayable.xml.
توسيع نطاق العوامل المشغِّلة
يمكن تمديد عوامل التفعيل للجلسة الحالية من خلال طلب
إلى DashcamManager.addTrigger()
. تبقى عوامل التفعيل المُضافة محفوظة للجلسة الحالية
فقط.
التشغيل التلقائي
ميزة بدء التسجيل تلقائيًا غير متاحة. ومع ذلك، يمكن بدؤه يدوياًonBoot
من خلال مكالمة إلى DashcamManager.startRecording()
.
أفضل الممارسات
مساحة التخزين: ننصح بشدة باستخدام وحدة تخزين خارجية قابلة للإزالة.
تجربة المستخدم: يجب تصميم واجهة مستخدم تطبيق Dashcam بحيث تكون سهلة الاستخدام ومتوافقة مع إرشادات تصميم AAOS.
تحسين الأداء: تحسين أداء التطبيق لتقليل استخدام الموارد وضمان التشغيل السلس في نظام التشغيل AAOS
تحديد المشاكل وحلّها
مشاكل في الاتصال بالكاميرا: يجب أن تكون تقنية EVS أو Camera2 متوافقة ومتوفرة في واجهة برمجة التطبيقات لعرض الفيديو في نظام التشغيل AAOS.
أخطاء في مساحة التخزين: التحقّق من مساحة التخزين المتوفّرة وإدارة التسجيلات ننصحك بشدة باستخدام وحدة تخزين خارجية لأنّ استخدام وحدة التخزين الداخلية يمكن أن يؤدي إلى تلفها قبل الأوان.