משתמשים ב-HAR (רכיב עיבוד עם זמינות גבוהה) כדי להציג מידע על הרכב ש-Android לא יכול להציג. זה יכול לקרות בגלל בעיות כמו הפעלה, זמינות, בטיחות או תקנות. HAR היא אפליקציה ניידת ומובנית שנכתבה ב-Rust.
HAR, שנקרא גם מסגרת HAR, כולל קוד שמשמש לבניית אפליקציות. אפליקציה שנבנתה באמצעות HAR היא אפליקציה מבוססת-HAR. למסגרת HAR יש קטעי קוד לפלטפורמות שונות. לדוגמה, במערכת Linux, משתמשים בספריות כמו tinyalsa לצלילים. ל-QNX יש ספריות אודיו ייחודיות משלה.
פלטפורמה כוללת חומרה, מערכת הפעלה, ספריות מערכת וגורמים אחרים. קוד ספציפי לפלטפורמה כולל חלקים שנקראים מערכות משנה. כל מערכת משנה מטפלת בתכונה אחת של הפלטפורמה, כמו אודיו, מצלמות EVS או נתוני רכב. כדי לתמוך בפלטפורמה, צריך להטמיע את כל מערכות המשנה של מסגרת HAR.
יכול להיות שקוד של מערכת משנה ספציפית לפלטפורמה יפעל באותו תהליך כמו האפליקציה שמבוססת על HAR, או בתהליך נפרד. כשהקוד נפרד, הוא מטפל בתקשורת בין תהליכים (IPC) כדי לאמת שהפלטפורמה תומכת באפליקציה. מנגנוני IPC מורכבים צריכים להיות חלק מהקוד הספציפי לפלטפורמה.
חבילת מקרים לבדיקה של HAR מריצה בדיקות בכל מערכות המשנה שהוטמעו בפלטפורמה. בעזרת החבילה הזו אפשר לבדוק אם הפלטפורמות עומדות בדרישות של HAR ולמצוא בעיות חדשות.
הסברים על המונחים
המונחים האלה מופיעים בדף הזה:
- אפליקציה מבוססת-HAR
- אפליקציה ספציפית לפונקציה או ל-OEM שנבנתה באמצעות מסגרת HAR. אפליקציות שונות זו מזו לפי מצב האפליקציה ומאפיינים אחרים שאפשר להתאים אישית.
- מסגרת HAR
- מספק קבוצה בסיסית של כלים שמשמשים לבניית אפליקציות.
- הפשטה של פלטפורמת HAR
- חלק ממסגרת HAR שמספקת API מוכר שכל פלטפורמות היעד צריכות להטמיע.
- חבילת מקרים לבדיקה HAR
- סדרה של בדיקות מוכרות על הטמעות של פלטפורמות, שעוזרות לוודא שהטמעות של פלטפורמות תומכות ב-framework של HAR בפלטפורמה נתונה.
נכסים מוסתרים
קובץ HAR לא כולל:
הטמעות נפרדות לכל פלטפורמת יעד: הטמעות לפלטפורמות יעד. במקום זאת, בדף הזה מתוארים הממשקים שיישומים של פלטפורמות צריכים לכלול, ו<b>חבילת מקרים לבדיקה</b> שצריך לעמוד בה.
מקרי בדיקה: מקרי בדיקה ספציפיים לכל הממשקים. במקום זאת, בדף הזה מתוארות פונקציות נפרדות לממשקי API, כולל ארגומנטים, ערכי החזרה, התנהגויות צפויות ותופעות לוואי צפויות. בדף הזה מתואר חבילת מקרים לבדיקה שבה אפשר להטמיע ולהריץ מקרים לבדיקה.
מבנה ארגזים ברמה גבוהה של הפשטת פלטפורמה
פרויקטים ב-Rust מורכבים מ-crates. באיור 1 מוצגת מבנה ה-crate של שכבת ההפשטה של פלטפורמת ה-HAR. שכבת ההפשטה של הפלטפורמה משפיעה על שני ארגזי Rust או יותר:
ההפשטות (תיאורי Rust
trait) נמצאות בתיבת ה-crate של מסגרת HAR.ההטמעות בפלטפורמה מתבצעות באמצעות
har-platform-xcrate נפרד. לדוגמה,har-platform-linuxאוhar-platform-android.
אי אפשר ליצור או לבדוק את תיבת ה-HAR בלי לציין הטמעה של פלטפורמה. זה מכוון כי מסגרת HAR היא מסגרת.
אפליקציה שמציינת פלטפורמה חייבת להיבנות באמצעות המסגרת הזו כדי לפעול ולהיבדק. הקשרים בין מסגרת HAR לבין הפלטפורמה מופיעים בתרשים הזה:
איור 1. ארגז HAR.
מבנה כללי בתוך display-safety
העיצוב הזה מוסיף סדרה של תיבות חדשות למאגר display_safety, כמו שמוצג באיור 2:
איור 2. מודולים של הפשטה.
חבילת בדיקות דומה מבחינה מבנית לאפליקציה, אבל היא מסתמכת רק על תיבת כלים (crate) של הטמעה בפלטפורמה נתונה. חבילת מקרים לבדיקה צריכה להתייחס למאפיינים ולמבנים שמוגדרים במסגרת HAR, אבל לא ליישומים מורכבים יותר.
תיאור כללי של שכבת ההפשטה של הפלטפורמה
בטבלה הזו מתוארות מערכות משנה ספציפיות לפלטפורמה שמוגדרות על ידי שכבת ההפשטה של פלטפורמת HAR.
| שם ההפשטה | פונקציה קשורה | תיאור | הערות |
|---|---|---|---|
OpenGL |
רינדור דו-ממדי | מספק יכולות רינדור של OpenGLES 2.0/3.0 לתיבת הכלים של HAR. | |
Audio |
רינדור אודיו | הכלי מספק ממשק כמו Android SoundPool לניהול ולהפעלה של אודיו במערכת. | |
Camera |
תצוגת המצלמה ברכב | מספקת ממשק HAL של EVS כמו לניהול ולהצגה של מידע ממצלמת הרכב. | |
Looper |
הלולאה הראשית של האפליקציה והגדרת התצוגה | מספק ממשק כמו Android Looper לניהול לולאות ראשיות של אפליקציות ספציפיות לפלטפורמה ולהצגת הגדרות. | |
UserInput |
מגע, מקלדת, הגה או בקר סיבובי, וקלט אחר ספציפי לפלטפורמה | מספק ממשק להזנת קלט של מגע ומקלדת לאפליקציות מבוססות-HAR. הטמעה לדוגמה שמבוססת על Linux evdev ב-har-user-input-evdev. |
|
VehicleData |
שדה להזנת מצב הרכב | מספק ממשק להעברת זרם של נתוני רכב שרירותיים לאפליקציות מבוססות-HAR, כמו אלה שמסופקים על ידי Android VHAL או CAN bus. | |
ResourceManager |
מסמך עיצוב ספציפי לאפליקציה שנשמר במטמון | מספק מטמון בזיכרון של משאבים שנדרשים להפעלה של HAR, כמו תמונות ששמורות במטמון ומסמכי עיצוב. עדיין לא הוטמע מטמון דיסק. | |
Logging |
רישום ביומן המערכת וטלמטריה | השירות הזה מספק תמיכה ברישום ביומן ספציפי לפלטפורמה באמצעות מערכת המעקב. כך מופעל איסוף טלמטריה כנדרש על ידי הפלטפורמה. | |
Tracing |
תיעוד עקבות המערכת | מספק הפשטה לשילוב עם מערכות תיעוד עקבות ופרופילים. | |
Monitoring |
ניטור המערכת | ערכת כלים למעקב אחרי ביצועים וזמני אחזור במסגרת HAR. | |
Commlib |
נתוני הרכב | הטמעה לדוגמה באמצעות סריאליזציה של Protobuf.
הוצא משימוש: צריך להשתמש בממשקי API שמוגדרים ב-reference/harry-control-api וביישומים harry-grpcio-server ו-harry-tonic-server (יישום לדוגמה). |
|
TestSupport |
בדיקת ווים של תמיכה | תמיכה בבנייה ובפירוק של תרחישי בדיקה, ביצירה של אירועי בדיקה וביצירה של ארטיפקטים של בדיקה. לדוגמה, יצירת אירועי מגע מסימולציה כדי לבדוק את UserInput ויצירת צילומי מסך לצורך ניתוח. |
התכונה הזו נעולה על ידי Rust כדי למנוע הכללה בגרסאות ייצור. |
מוסכמות מתן שמות ומבני מסגרות
בטבלה הזו מוצגים השמות והמבנים האלה:
מופעים צפויים של מערכת משנה
traitשסופקו על ידי מסגרת HAR. כלtraitמייצג מערכת משנה ספציפית לפלטפורמה שצריך להטמיע.השמות הצפויים של יישומי מערכת משנה ספציפיים לפלטפורמה בכל תיבת פלטפורמה. אפליקציות שמבוססות על HAR מצפות שהשמות הספציפיים האלה יוטמעו.
בדרך כלל משתמשים במופעים קשורים של מסגרת HAR
enumו-structכדי להעביר מידע מהטמעות שקשורות לפלטפורמה אל מסגרת HAR.
| שמות המאפיינים | שמות ההטמעה | מבני נתונים וספירות של framework 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 (Struct) |
ResourceManager |
harry::ResourceManagerMessageharry::ResourceTokenharry::RawImageData |
PlatformTracing |
Tracing |
לא רלוונטי |
HarPerformanceMonitor |
Monitoring |
harry::Rendererharry::ResolveLatencyToken |
PlatformTestSupport |
TestSupport |
harry::TestConfigharry::TestDisplayConfig |
שגיאות וטיפול בשגיאות
ממשקי ה-API המוצעים משתמשים בסוג 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),
}
שגיאות שלא ניתן לתקן מוחזרות בעיקר דרך הממשקים המוגדרים ופונקציות ה-callback.
עיצוב מפורט של חבילת מקרים לבדיקה
בקטע הזה מתואר העיצוב של חבילת מקרים לבדיקה, שמאמתת הטמעות של הפשטות שספציפיות לפלטפורמה.
יצירת בדיקות בחבילת מקרים לבדיקה
ב-Soong builds (מוגדרים על ידי קובצי Android.bp), הבדיקות עוברות קומפילציה כחלק ממערכת ה-build של פלטפורמת Android, וההפעלה שלהן מנוהלת על ידי atest.
הרצת חבילת מקרים לבדיקה
כדי לבדוק פלטפורמה ספציפית:
משתמשים בפקודה atest עם יעד הבדיקה הרלוונטי (לדוגמה, atest <module_name>). הפקודה הזו פורסת את הבדיקות ומריצה אותן במכשיר או באמולטור של Android.