מערכת ההפעלה Android Automotive OS מאפשרת למשתמשים להתקין אפליקציות במכונית. כדי להגיע אל משתמשים בפלטפורמה הזו, צריך להפיץ אפליקציה מותאמת לנהגים תואם ל-Android Automotive OS. ניתן להשתמש שוב כמעט בכל הקוד במשאבים באפליקציית Android Auto, אבל צריך ליצור גרסת build נפרדת עומד בדרישות שמתוארות בדף הזה.
כדי להפעיל את האפליקציה לרכב ב-Android Automotive OS, נדרשת הגרסה האחרונה Templates Host, שמגיע כאפליקציית מערכת.
סקירה כללית על הפיתוח
כדי להוסיף תמיכה ב-Android Automotive OS, צריך רק כמה שלבים פשוטים: שמתוארים בקטעים שבדף הזה:
- יצירת מודול של כלי רכב
- להצהיר על תמיכה ב-Android Automotive OS
- צריך להצהיר על
CarAppService
ועלCarAppActivity
- עדכון יחסי התלות של Gradle
יש להשתמש ב-Android Studio Bumblebee ואילך כדי לוודא שכל התכונות של Automotive OS מופעלות.
יצירת מודול של כלי רכב
רכיבים מסוימים של Android Automotive OS, כמו המניפסט, כוללים דרישות ספציפיות לפלטפורמה. ליצור מודול שיכול לשמור לרכיבים האלה בנפרד מקוד אחר בפרויקט, כמו את הקוד שמשמש את אפליקציית הטלפון.
בפרויקט קיים, מבצעים את השלבים הבאים כדי להוסיף מודול כלי רכב project:
- ב-Android Studio, לוחצים על קובץ > חדש > מודול חדש.
- בוחרים באפשרות מודול לרכב ולוחצים על הבא.
- מזינים שם האפליקציה/ספרייה. זה השם שהמשתמשים רואים לאפליקציה שלך ב-Android Automotive OS.
- מזינים את שם המודול.
- עורכים את שם החבילה כך שיתאים לאפליקציה הקיימת.
בוחרים באפשרות API 29: Android 10 (Q) בשביל Minimum SDK, ואז לוחצים על הבא. כל המכוניות שתומכות בספריית האפליקציות לרכב ב-Android Automotive OS פועלות ב- Android 10 API ברמה 29 ואילך, לכן בחירה בערך הזה מטרגטת את כל רכבים תואמים.
בוחרים באפשרות הוספת ללא פעילות ולוחצים על סיום.
אם אתם מתחילים פרויקט חדש:
- ב-Android Studio, לוחצים על קובץ > חדש > פרויקט חדש.
- בוחרים באפשרות Automotive בשדה Project Type.
- בוחרים באפשרות ללא פעילות ולוחצים על הבא.
- נותנים Name לפרויקט. זה השם שהמשתמשים יראו ב-Android Automotive OS.
- מזינים שם חבילה. מידע נוסף זמין בקטע שמות של חבילות לקבלת פרטים נוספים על בחירת שם חבילה.
בוחרים באפשרות API 29: Android 10 (Q) בשביל Minimum SDK, ואז לוחצים על הבא.
כל המכוניות שתומכות בספריית האפליקציות לרכב ב-Android Automotive OS פועלות ב- Android 10 API ברמה 29 ואילך, לכן בחירה בערך הזה מטרגטת את כל רכבים תואמים.
אחרי שיוצרים את המודול ב-Android Studio, פותחים את AndroidManifest.xml
במודול הרכב החדש:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.car.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
ברכיב application
יש כמה
מידע רגיל של אפליקציות וגם uses-feature
רכיב שמצהיר על תמיכה ב-Android Automotive OS. שימו לב שיש
אינן פעילויות מוצהרות במניפסט.
בשלב הבא, צריך להוסיף את רכיבי uses-feature
הבאים למניפסט:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.car.app"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> <uses-feature android:name="android.hardware.type.automotive" android:required="true" /> <uses-feature android:name="android.software.car.templates_host" android:required="true" /> <uses-feature android:name="android.hardware.wifi" android:required="false" /> <uses-feature android:name="android.hardware.screen.portrait" android:required="false" /> <uses-feature android:name="android.hardware.screen.landscape" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> </manifest>
רכיב uses-feature
הראשון מצהיר שהאפליקציה שלך משתמשת במארח התבניות
להפעיל. הגדרה מפורשת של ארבעת רכיבי uses-feature
הנותרים בתור
השירות required="false"
מבטיח שאין התנגשות בין האפליקציה לבין תכונות החומרה הזמינות
במכשירי Android Automotive OS.
עדכון יחסי התלות של Gradle
במודול כלי הרכב, יש להוסיף תלות
ארטיפקט אחד (androidx.car.app:app-automotive
),
התוכנית כוללת את ההטמעה של CarAppActivity
שנדרשת כדי שהאפליקציה תפעל
ב-Android Automotive OS.
אם האפליקציה שלך מפתחים את האפליקציה שתומכת גם ב-Android Auto וגם ב-Android
ב-Automotive OS, מומלץ לשמור את CarAppService
בנפרד
שתשתפו בין המודולים לנייד לבין המודולים של כלי רכב. אם אתם
בגישה הזו, תצטרכו לעדכן את המודול של כלי הרכב כך שיכלול את
המודול המשותף באמצעות יחסי התלות של פרויקטים של Gradle
, כפי שמוצג בקטע הקוד הבא:
מגניב
buildscript { ... dependencies { ... implementation "androidx.car.app:app-automotive:car_app_library_version" implementation project(':shared_module_name') } }
Kotlin
buildscript { ... dependencies { ... implementation("androidx.car.app:app-automotive:car_app_library_version") implementation(project(":shared_module_name")) } }
הצהרת תמיכה ב-Android Automotive OS
צריך להשתמש ברשומת המניפסט הבאה כדי להצהיר שהאפליקציה שלך תומכת מערכת ההפעלה Android Automotive:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
ערך המניפסט הזה מתייחס לקובץ XML המצהיר על שם כלי הרכב ביכולות שהאפליקציה שלך תומכת בהן.
כדי לציין שיש לכם אפליקציה של ספריית האפליקציות ברכב:
להוסיף קובץ XML בשם automotive_app_desc.xml
לספרייה res/xml/
ב-
את המודול של Android Automotive OS. הקובץ צריך לכלול את התוכן הבא:
<automotiveApp>
<uses name="template"/>
</automotiveApp>
הצהרה על CarAppService ו-CarAppActivity
בדומה ל-Android Auto, גם ב-Android Automotive OS נעשה שימוש ב-CarAppService
כדי להריץ את האפליקציה. פרטים נוספים
יצירת CarAppService וסשן
וכן להצהיר על CarAppService עבור
הוראות ליישום של CarAppService
ולהצהרה עליו.
שלא כמו Android Auto, יש לכלול רכיב נוסף של אפליקציה,
CarAppActivity
, שישמש כנקודת הכניסה אל Android Automotive OS
אפליקציה. יישום הפעילות הזו נכלל
פריט המידע שנוצר בתהליך הפיתוח (Artifact) של androidx.car.app:app-automotive
והוא אחראי לתקשורת
באפליקציה של מארח התבניות כדי לעבד את ממשק המשתמש של האפליקציה. צריך רק
מופע אחד של הפעילות הזו במניפסט, ויש להצהיר עליו כ-
ככה:
<activity android:exported="true" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:name="androidx.car.app.activity.CarAppActivity" android:launchMode="singleTask" android:label="Your app name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="distractionOptimized" android:value="true" /> </activity>
android:name
מוגדר לשם הסיווג המוגדר במלואו שלCarAppActivity
מתוך פריט המידע שנוצר בתהליך הפיתוח (Artifact) מסוגapp-automotive
.- הערך
android:exported
מוגדר ל-true
כי צריך לאפשר את הפעלת הפעילות באמצעות מלבד האפליקציה עצמה (כלומר מרכז האפליקציות). - הערך
android:launchMode
מוגדר ל-singleTask
כך שהמשתמש יכול לחזור מופע של הפעילות במרכז האפליקציות, אם הם מנווטים למקום אחר. - הערך של
android:theme
מוגדר ל-@android:style/Theme.DeviceDefault.NoActionBar
, כך שהאפליקציה תופסת את כל השטח שזמין לה במסך. - מסנן Intent מציין שזו הפעילות במרכז האפליקציות עבור האפליקציה.
- יש רכיב
<meta-data>
שמציין למערכת ההפעלה שהאפליקציה יכולה כשקיימות הגבלות על חוויית המשתמש, למשל כשהרכב נמצא בפנים. תנועה.
דרישות נוספות לאפליקציות ניווט
כשמדובר באפליקציות ניווט, קיימות מספר אפשרויות נוספות
רשומות המניפסט נדרשות עבור CarAppActivity
כפי שמוצג בהמשך
snippet:
<activity android:exported="true" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:name="androidx.car.app.activity.CarAppActivity" android:launchMode="singleTask" android:label="Your app name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <!-- Include the category below ONLY for navigation apps --> <category android:name="android.intent.category.APP_MAPS" /> </intent-filter> <!-- Include the intent-filter below ONLY for navigation apps --> <intent-filter> <action android:name="androidx.car.app.action.NAVIGATE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="geo" /> </intent-filter> <meta-data android:name="distractionOptimized" android:value="true" /> </activity>
- האפשרות
android.intent.category.APP_MAPS
הנוספת לפי הקטגוריה, המערכת מודיעה למערכת שהאפליקציה יכולה להציג את מיקום המשתמש. - מסנן Intent מסוג
androidx.car.app.action.NAVIGATE
מבטיח שלמשתמשים יש האפשרות להשתמש באפליקציה בזמן טיפול בכוונת ניווט מרומזת מתוך אפליקציה אחרת לרכב.
שיקולים אחרים
חשוב לזכור את השיקולים הבאים בזמן הפיתוח של Android Automotive אפליקציה לניהול מערכת ההפעלה:
שמות של חבילות
אתם מפיצים מערכת Android Package Kit (APK) נפרדת ל-Android Automotive OS, ולכן אתם יכולים שימוש חוזר בשם החבילה מהאפליקציה לנייד או יצירת חבילה חדשה שם. אם שם החבילה שונה, לאפליקציה יש שתי חנויות Play נפרדות שלך. אם שם החבילה הנוכחי משמש אותך שוב, לאפליקציה שלך יש דף אפליקציה אחד בשתי הפלטפורמות.
בעיקרון זוהי החלטה עסקית. לדוגמה, אם יש לך צוות אחד שעובד את האפליקציה לנייד, וצוות נפרד שעובד על Android Automotive אז אולי כדאי להשתמש בשמות נפרדים של חבילות, לנהל דף אפליקציה משלו בחנות Play. אין הבדל גדול נדרש מאמץ טכני לשימוש בכל אחת מהשיטות.
בטבלה הבאה מסכמת כמה הבדלים מרכזיים נוספים בין שמירת החבילה הנוכחית שם או שם חבילה חדש:
תכונה | שם חבילה זהה | שם החבילה החדש |
---|---|---|
רישום חנות | יחיד | מספר תגובות |
התקנה משוכפלת | כן: התקנה מהירה של האפליקציה מחדש במהלך אשף ההגדרה | לא |
תהליך הבדיקה של חנות Play | חסימת ביקורות: אם הבדיקה נכשלה לגבי APK אחד, חבילות APK אחרות שנשלחו באותה גרסה חסומות | ביקורות נפרדות |
נתונים סטטיסטיים, מדדים ונתונים סטטיסטיים | משולב: אפשר לסנן לפי שם המכשיר עבור קטגוריות ספציפיות לכלי רכב . | כן, אני רוצה להפריד |
הוספה לאינדקס ודירוג בחיפוש | בנייה מחוץ לעמידה הנוכחית | אין העברת נתונים |
שילוב עם אפליקציות אחרות | סביר להניח שלא יהיה צורך בשינויים, בהנחה שקוד המדיה משותף בין שתי חבילות ה-APK | ייתכן שיהיה צורך לעדכן את האפליקציה המתאימה, למשל כדי להפעיל URI באמצעות Google Assistant |
תוכן במצב אופליין
אם רלוונטי, הטמעה של תמיכה אופליין באפליקציה. מכוניות עם Android Automotive למערכת ההפעלה צריכה להיות קישוריות נתונים משלה, כלומר חבילת הגלישה כלולה בעלות הרכב או שהיא משלמת על המשתמש. אבל, לפעמים גם מכוניות צפויות להיות קישוריות משתנה יותר מאשר במכשירים ניידים.
כמה דברים שחשוב לזכור כששוקלים לקבל תמיכה אופליין אסטרטגיה:
- הזמן הכי טוב להוריד תוכן הוא בזמן שהאפליקציה בשימוש.
- אל תניח שה-Wi-Fi זמין. יכול להיות שמכונית אף פעם לא תגיע לטווח Wi-Fi, או יצרן הציוד המקורי (OEM) עשוי להשבית את ה-Wi-Fi לטובת רשת סלולרית.
- זה בסדר לשמור בצורה חכמה במטמון תוכן שאתם מצפים מהמשתמשים לשמור שבו נעשה שימוש, מומלץ לאפשר למשתמש לשנות את ההתנהגות הזו.
- נפח האחסון במכוניות משתנה, לכן צריך לתת למשתמשים אפשרות למחוק תוכן אופליין.
שאלות נפוצות
בקטעים הבאים ריכזנו תשובות לכמה שאלות נפוצות בנושא מערכת ההפעלה Android Automotive.
האם יש הגבלות או המלצות לגבי השימוש בספריות ובערכות SDK של צד שלישי?
אין הנחיות ספציפיות לגבי שימוש בספריות ובערכות SDK של צד שלישי. גם אם תבחרו להשתמש בספריות ובערכות SDK של צד שלישי, האחריות לתשלום כדי לעמוד בכל דרישות האיכות של אפליקציות הרכב.
איך מפרסמים את האפליקציה ל-Android Automotive OS באמצעות Google Play Console?
תהליך פרסום האפליקציה דומה לתהליך של פרסום אפליקציה לטלפון, אבל צריך להשתמש גורם צורה אחר. כדי לצרף את האפליקציה לשימוש ב-Android Automotive סוג הגרסה של מערכת ההפעלה, פועלים לפי השלבים הבאים:
- פותחים את Play Console.
- בוחרים את האפליקציה הרצויה.
- בתפריט הימני, לוחצים על פרסום > הגדרה > הגדרות מתקדמות > צורה גורמים.
- בוחרים באפשרות הוספת גורם צורה > Android Automotive OS, ואז פועלים לפי ב-Play Console.
פתרון בעיות
ריכזנו כאן כמה עזרה בתרחישים נפוצים לפתרון בעיות ב-Android Automotive OS.
גם אחרי שמסירים את האפליקציה של ספריית האפליקציות ברכב מהגדרות המערכת, מופיעה הודעת שגיאה כשמנסים להתקין גרסה חדשה.
כדי לוודא שהאפליקציה הוסרה, משתמשים בפקודה
adb uninstall app.package.name