שילוב Android Auto עבור אפליקציות אנדרואיד
בניתם אפליקציית אנדרואיד מצוינת, אבל משתמשים מאחורי ההגה נאלצים להסתכל על הטלפון שלהם. Android Auto מאפשר לכם לשלב את האפליקציה שלכם במערכת המובנית של הרכב—מבלי לפגוע בבטיחות. עם זאת, היישום דורש הקפדה קפדנית על חוזי Car App Library ומודעות למגבלות המסך המובנות. יש לנו ניסיון של 10+ שנים ו-40+ פרויקטים מוצלחים עם Android Auto, כולל ניווט, מדיה ו-IoT. במאמר זה נסקור טעויות נפוצות, החלטות ארכיטקטוניות ומקרים אמיתיים שיכולים לחסוך לכם שבועות של עבודה חוזרת.
Car App Library — הדרך הנכונה היחידה
הדרך הישנה באמצעות CarActivity ו-UI מותאם אישית אינה נתמכת עוד. גוגל מחייבת androidx.car.app:app עם תבניות הצהרתיות. הן דומות ל-CarPlay אך יש להן מאפיינים משלהן. ניואנס חשוב: רמות API (CarAppApiLevel). תבניות ברמה 5 אינן זמינות במארחים ישנים יותר. בדקו את CarContext.getCarAppApiLevel() והתאימו את ה-UI בהתאם.
| תבנית | מטרה | רמת API |
|---|---|---|
| ListTemplate | רשימת פריטים | 1+ |
| GridTemplate | רשת תמונות | 1+ |
| NavigationTemplate | ניווט עם מפה | 2+ |
| MapWithContentTemplate | מפה עם תוכן | 5+ |
קטגוריות אפליקציה: ניווט, POI (חניה, טעינה, תחנות דלק), IoT, מזג אוויר, שיחות וידאו. ללא הקטגוריה הנכונה ב-AndroidManifest.xml, האפליקציה לא תושק ב-Auto.
מלכודות אינטגרציה נפוצות
חסימת ה-thread הראשי ב-Session.onCreateScreen(). Session הוא נקודת הכניסה. onCreateScreen() חייב להחזיר את ה-Screen הראשוני מיד. בקשת רשת כאן תגרום ל-timeout ולמסך ריק. פתרון: החזירו LoadingTemplate, ואז טענו נתונים באופן אסינכרוני וקראו ל-invalidate().
MapTemplate ורינדור משטח. לניווט, רנדרו את המפה על SurfaceContainer דרך SurfaceCallback. זה לא View רגיל: אתם מציירים על Canvas דרך SurfaceContainer.getSurface(), ומעדכנים רק כשהנתונים משתנים. אין onDraw()—רק lockCanvas() מפורש → ציור → unlockCanvasAndPost(). טעות נפוצה: ציור על כל onStableAreaChanged() ללא שינויים, מה שגורם להבהובים בחלק מהמארחים. לפי הסטטיסטיקות שלנו, 70% מבעיות הבדיקה קשורות לטיפול לא נכון ב-SurfaceCallback.
בדיקה ללא רכב. Desktop Head Unit (DHU) הוא הסימולטור הרשמי. הפעילו אותו מ-android-sdk/extras/google/auto/desktop-head-unit עם פרמטרים של --phone (USB) או --car (אלחוטי). DHU מכסה 90% מהתרחישים, אבל מחוות multi-touch ניתנות לבדיקה רק ברכב אמיתי. בדיקה סופית היא חובה.
איך להימנע מ-Rate Limiting עם invalidate()?
תדירות הקריאות ל-invalidate() מוגבלת על ידי מארח הרכב. אם קוראים לעתים קרובות מדי, Auto מתעלם מבקשות ביניים. השתמשו ב-data diffing וקראו ל-invalidate() רק כשהמצב באמת משתנה. כלל מעשי: לא יותר מפעם אחת בכל 100 אלפיות השנייה.
ארכיטקטורת אינטגרציה: מסשן למסך
ארכיטקטורה טיפוסית:
CarAppService
└── Session (lifecycle: Car connected)
└── Screen stack (push/pop)
├── HomeScreen → ListTemplate
├── DetailScreen → DetailTemplate
└── NavigationScreen → NavigationTemplate + SurfaceCallbackScreen דומה ל-Fragment. CarAppService └── Session (lifecycle: Car connected) └── Screen stack (push/pop) ├── HomeScreen → ListTemplate ├── DetailScreen → DetailTemplate └── NavigationScreen → NavigationTemplate + SurfaceCallback עוקף את invalidate(); המערכת מבקשת תבנית מעודכנת. האינטגרציה עם האפליקציה הראשית היא דרך שכבת לוגיקה עסקית משותפת (Repository, UseCases). ה-Auto Session נרשם לאותם onGetTemplate()/Flow כמו ה-UI הנייד.
שלב אחר שלב:
- יישמו
LiveDataורשמו אותו ב-AndroidManifest. - צרו
CarAppServiceוהחזירו אתSessionהראשוני מ-Screen. - השתמשו במחסנית Screen לניווט.
- שלבו עם הלוגיקה העסקית דרך UseCases משותפים.
- בדקו על DHU וברכב אמיתי.
השוואה: ישן (CarActivity) לעומת חדש (Car App Library)
| קריטריון | גישה ישנה | Car App Library |
|---|---|---|
| תמיכת גוגל | לא נתמך | רשמי מאז 2019 |
| UI מותאם אישית | כן | לא (תבניות) |
| בטיחות | סיכון להסחת דעת | אילוצים מובנים |
| תאימות | עד Auto 5.x | Auto 6.0+ (דרך רמת API) |
מה כוללת העבודה
- עיצוב ארכיטקטורה ובחירת תבניות Car App Library.
- יישום MediaBrowserService לאודיו או NavigationSession לניווט.
- הגדרת SurfaceCallback ומפה (אם נדרש).
- פקודות קוליות ו-deep linking (Universal Links).
- בדיקה על DHU וברכב אמיתי.
- הכנת build ל-Google Play (עמידה ב-סעיפים 4.2/5.1 של הנחיות סקירת ה-App Store).
- תיעוד והעברת קוד מקור.
תהליך הערכה ועבודה
אין לנו מחירים קבועים—העלות נקבעת לאחר ניתוח המקרה הספציפי שלכם. התהליך שלנו:
- איסוף נתונים וניתוח דרישות.
- ביקורת טכנית והערכת היתכנות.
- ארכיטקטורת פתרון והערכת לוחות זמנים.
- פיתוח ובדיקות איטרטיביות.
- אבטחת איכות על חומרה אמיתית.
- השקה ותמיכה לאחר השחרור.
לוחות זמנים
לוחות הזמנים תלויים במורכבות. עבור אינטגרציית POI או אודיו: בין 4 ל-7 שבועות. עבור אפליקציית ניווט עם מפה ורינדור משטח: בין 8 ל-14 שבועות.
למה לבחור בנו
אנחנו מבטיחים איכות: כל פרויקט עובר ביקורת קוד ובדיקות על מכשיר אמיתי. הניסיון שלנו מגובה בהסמכות Google Associate Android Developer ושחרורים מוצלחים ל-Google Play. צרו קשר לייעוץ—נעריך את הפרויקט שלכם תוך יום אחד.







