استخدِم أداة العرض عالية التوفّر (HAR) لعرض معلومات المركبة التي لا يمكن لنظام التشغيل Android عرضها. يمكن أن يحدث ذلك بسبب مشاكل مثل بدء التشغيل أو التوفّر أو السلامة أو اللوائح التنظيمية. HAR هو تطبيق مدمج ومحمول مكتوب بلغة Rust.
تتضمّن حزمة HAR، المعروفة أيضًا باسم إطار عمل HAR، الرمز البرمجي الذي تستخدمه لإنشاء التطبيقات. التطبيق
الذي تم إنشاؤه باستخدام HAR هو تطبيق يستند إلى HAR، ويتضمّن إطار عمل HAR أقسامًا للرموز البرمجية
لمختلف المنصات. على سبيل المثال، في نظام Linux، يمكنك استخدام مكتبات مثل
tinyalsa للأصوات. يحتوي نظام التشغيل QNX على مكتبات صوتية فريدة خاصة به.
يتضمّن النظام الأساسي الأجهزة ونظام التشغيل ومكتبات النظام وعوامل أخرى. يحتوي الرمز البرمجي الخاص بالنظام الأساسي على أجزاء تُعرف باسم الأنظمة الفرعية. يتولّى كل نظام فرعي إدارة إحدى ميزات النظام الأساسي، مثل الصوت أو كاميرات EVS أو بيانات المركبة. ولكي يكون النظام الأساسي متوافقًا، يجب تنفيذ جميع الأنظمة الفرعية لإطار عمل HAR.
قد يتم تشغيل رمز النظام الفرعي الخاص بالنظام الأساسي في العملية نفسها التي يتم فيها تشغيل التطبيق المستند إلى HAR أو في عملية منفصلة. عندما يكون هذا الرمز منفصلاً، يتعامل مع الاتصال بين العمليات (IPC) للمساعدة في التحقّق من أنّ النظام الأساسي يتوافق مع التطبيق. يجب أن تكون آليات الاتصال المعقّدة بين العمليات جزءًا من الرمز البرمجي الخاص بالنظام الأساسي.
تنفِّذ مجموعة اختبارات HAR اختبارات على جميع الأنظمة الفرعية التي تم تنفيذها لمنصة ما. استخدِم هذه الحزمة للتحقّق مما إذا كانت المنصات تستوفي متطلبات HAR وللعثور على أي مشاكل جديدة.
المصطلحات
تتضمّن هذه الصفحة المصطلحات التالية:
- تطبيق مستند إلى HAR
- تطبيق تابع لمصنّع أصلي للجهاز أو تطبيق مخصّص لوظيفة معيّنة تم إنشاؤه باستخدام إطار عمل HAR تختلف التطبيقات حسب حالة التطبيق والجوانب الأخرى القابلة للتخصيص.
- إطار عمل HAR
- توفّر مجموعة أساسية من الأدوات المستخدَمة لإنشاء التطبيقات.
- تجريد منصة HAR
- جزء من إطار عمل HAR يوفّر واجهة برمجة تطبيقات معروفة يجب أن تنفّذها جميع الأنظمة الأساسية المستهدَفة.
- مجموعة اختبارات HAR
- سلسلة من الاختبارات المعروفة على عمليات تنفيذ المنصات، تساعد في التحقّق من أنّ عمليات تنفيذ المنصات تتوافق مع إطار عمل HAR على منصة معيّنة.
خارج النطاق
لا تتناول "توصيات HAR" ما يلي:
عمليات التنفيذ الفردية لجميع المنصات المستهدَفة: عمليات التنفيذ للمنصات المستهدَفة بدلاً من ذلك، تصف هذه الصفحة الواجهات التي يجب أن تستوفيها عمليات تنفيذ النظام الأساسي ومجموعة الاختبارات التي يجب أن تستوفيها.
حالات الاختبار: حالات اختبار محدّدة لجميع الواجهات بدلاً من ذلك، تصف هذه الصفحة الدوال الفردية للواجهات، بما في ذلك الوسيطات والقيم المعروضة والسلوكيات المتوقّعة والآثار الجانبية المتوقّعة. توضّح هذه الصفحة حزمة الاختبارات التي يمكنك تنفيذ حالات الاختبار وتشغيلها فيها.
بنية حزمة عالية المستوى لتجريد المنصة
تتألف مشاريع Rust من حِزم. يوضّح الشكل 1 بنية الحزمة الخاصة بطبقة تجريد منصة HAR. تؤثّر طبقة تجريد المنصة في حزمتين أو أكثر من حزم Rust:
تتوفّر التجريدات (أوصاف Rust
trait) في حزمة إطار عمل HAR.يتم تنفيذ المنصة من خلال حزمة
har-platform-xمنفصلة. على سبيل المثال،har-platform-linuxأوhar-platform-android.
لا يمكنك إنشاء أو اختبار حزمة HAR بدون تحديد تنفيذ النظام الأساسي. هذا مقصود لأنّ إطار HAR هو إطار عمل.
يجب إنشاء تطبيق يحدّد نظامًا أساسيًا باستخدام إطار العمل هذا لكي يعمل ويتم اختباره. يمكنك الاطّلاع على عمليات الربط بين إطار عمل HAR والمنصة في هذا الرسم البياني:
الشكل 1: حاوية HAR
البنية العامة ضمن display-safety
يضيف هذا التصميم سلسلة من الحزم الجديدة إلى مستودع display_safety، كما هو موضّح في الشكل 2:
الشكل 2: وحدات التجريد
مجموعة الاختبارات تشبه التطبيق من الناحية البنيوية، ولكنها تعتمد فقط على حزمة تنفيذ منصة معيّنة. يجب أن تشير مجموعة الاختبار إلى السمات والبِنى المحدّدة في إطار عمل HAR، ولكن يجب ألا تشير إلى عمليات تنفيذ أكثر تعقيدًا.
وصف عالي المستوى لطبقة تجريد المنصّة
يوضّح هذا الجدول الأنظمة الفرعية الخاصة بالنظام الأساسي والتي تحدّدها طبقة تجريد النظام الأساسي HAR.
| اسم التجريد | دالة ذات صلة | الوصف | ملاحظات |
|---|---|---|---|
OpenGL |
العرض الثنائي الأبعاد | توفّر هذه السمة إمكانات العرض OpenGLES 2.0/3.0 لحزمة إطار عمل HAR. | |
Audio |
عرض الصوت | توفّر واجهة مشابهة لـ Android SoundPool لإدارة الصوت وتشغيله. | |
Camera |
شاشة عرض كاميرا المركبة | توفّر واجهة مثل EVS HAL لإدارة معلومات كاميرا المركبة وعرضها. | |
Looper |
حلقة التطبيق الرئيسية وإعدادات العرض | توفّر هذه السمة واجهة مثل Android Looper لإدارة الحلقات الرئيسية الخاصة بالتطبيقات على كل نظام أساسي وإعدادات العرض. | |
UserInput |
اللمس أو لوحة المفاتيح أو عجلة القيادة أو وحدة التحكّم الدوّارة أو غير ذلك من وسائل الإدخال الخاصة بالنظام الأساسي | توفّر واجهة لتزويد التطبيقات المستندة إلى HAR بمدخلات اللمس ولوحة المفاتيح. تنفيذ مرجعي يستند إلى Linux evdev في
har-user-input-evdev |
|
VehicleData |
إدخال حالة المركبة | توفّر هذه الواجهة للتطبيقات المستندة إلى HAR مصدرًا لبيانات المركبة العشوائية، مثل البيانات التي يوفّرها Android VHAL أو ناقل CAN. | |
ResourceManager |
مستند تصميم مخزَّن مؤقتًا خاص بالتطبيق | توفّر ذاكرة تخزين مؤقت داخلية للموارد اللازمة لبدء تشغيل HAR، مثل الصور المخزَّنة مؤقتًا ومستندات التصميم. لم يتم تنفيذ ذاكرة التخزين المؤقت للقرص بعد. | |
Logging |
تسجيل النظام والقياس عن بُعد | توفّر هذه السمة إمكانية تسجيل البيانات الخاصة بالنظام الأساسي باستخدام نظام التتبُّع. يتيح ذلك جمع بيانات القياس عن بُعد على النحو المطلوب من خلال المنصة. | |
Tracing |
تتبُّع النظام | توفّر هذه الحزمة تجريدًا للتكامل مع أنظمة التتبُّع وإنشاء الملفات الشخصية. | |
Monitoring |
مراقبة النظام | مجموعة أدوات لرصد الأداء ووقت الاستجابة ضمن إطار عمل HAR | |
Commlib |
بيانات السيارة | تنفيذ مرجعي يستخدم تسلسل protobuf.
تم إيقافها نهائيًا: استخدِم واجهات برمجة التطبيقات المحدّدة في reference/harry-control-api وعمليات التنفيذ harry-grpcio-server وharry-tonic-server (عملية التنفيذ المرجعية). |
|
TestSupport |
خطافات دعم الاختبار | تتيح هذه السمة إنشاء حالات الاختبار وتفكيكها، وإنشاء أحداث الاختبار، وإنشاء عناصر الاختبار. على سبيل المثال، إنشاء أحداث لمس محاكية لاختبار UserInput وإنشاء لقطات شاشة لتحليلها. |
يتم قفل هذه الميزة بواسطة Rust لمنع تضمينها في إصدارات الإنتاج. |
اصطلاحات التسمية وبُنى إطار العمل
يعرض هذا الجدول الأسماء والبُنى التالية:
تمثّل هذه السمة عدد مثيلات النظام الفرعي
traitالمتوقّعة التي يوفّرها إطار عمل HAR. يمثّل كلtraitنظامًا فرعيًا خاصًا بنظام أساسي معيّن يجب تنفيذه.أسماء التنفيذات المتوقّعة للأنظمة الفرعية الخاصة بالمنصة في أي حزمة خاصة بالمنصة. تتوقّع التطبيقات المستندة إلى HAR تنفيذ هذه الأسماء المحدّدة.
يتم عادةً استخدام مثيلات إطار عمل HAR
enumوstructذات الصلة لتمرير المعلومات من عمليات التنفيذ ذات الصلة بالمنصة إلى إطار عمل HAR.
| أسماء السمات | أسماء التنفيذ | تعداد وبُنى إطار عمل HAR |
|---|---|---|
GlContextFactory |
OpenGL |
trait harry::Rendererharry::DisplayRotation |
AudioApiFactory |
Audio |
harry::AudioApiharry::AudioDeviceharry::VolumeMillibel |
ICameraManager |
Camera |
harry::ICameraDeviceharry::CameraDescriptor |
Looper |
Looper |
harry::LooperMessageharry::LooperOptionsharry::DisplayId |
PlatformVehicleData |
VehicleData |
harry::VehicleDataTypeharry::VehicleDataListener |
ResourceManager (بنية) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
لا ينطبق |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
الأخطاء ومعالجتها
تستخدم واجهات برمجة التطبيقات المقترَحة نوع Result<> Rust. تتطلّب لغة Rust التحقّق من
أنواع Result التي تتضمّن أخطاء. وإذا لم يكن كذلك، سيُنشئ المترجم تحذيرًا أو خطأً. يفرض فحص وقت الإنشاء التحقّق من الأخطاء من الرمز البرمجي الخاص بالنظام الأساسي.
تكون الأخطاء التي تعرضها عمليات التنفيذ على المنصة من النوع harry::error::Error. للتحقّق من عدم تسرُّب أنواع أخطاء المنصّة إلى رمز التطبيق، استخدِم نوع الخطأ العادي الذي يوفّره إطار عمل HAR.
يتوسّع النوع harry::error::Error ليشمل أخطاء محدّدة لجميع الأنظمة الفرعية:
// This is Rust
pub enum Error {
Msg(String), // A generic message string
// Legacy error type, likely to be removed or merged into Msg
Audio(String),
}
يتم عرض الأخطاء غير القابلة للاسترداد بشكل أساسي من خلال الواجهات المحدّدة وعمليات الرجوع.
التصميم التفصيلي لمجموعة الاختبارات
يوضّح هذا القسم تصميم مجموعة الاختبارات التي تتحقّق من عمليات التنفيذ الخاصة بالمنصة لعمليات التجريد.
إنشاء اختبارات مجموعة الاختبارات
بالنسبة إلى عمليات إنشاء Soong (المحدّدة بواسطة ملفات Android.bp)، يتم تجميع الاختبارات كجزء من نظام التصميم الخاص بنظام Android الأساسي، وتتم إدارة تنفيذها بواسطة atest.
تشغيل حزمة الاختبار
لاختبار منصة فردية، اتّبِع الخطوات التالية:
استخدِم الأمر atest مع هدف الاختبار ذي الصلة (على سبيل المثال، atest <module_name>). ينشر هذا الأمر الاختبارات ويشغّلها على جهاز Android أو محاكي Android.