يتيح نظام التشغيل Android Automotive للمستخدمين تثبيت التطبيقات في السيارة. للوصول إلى مستخدمي هذا النظام الأساسي، عليك توزيع تطبيق ملائم لقائدي السيارات يتوافق مع نظام التشغيل Android Automotive. يمكنك إعادة استخدام الرمز البرمجي والموارد بالكامل تقريبًا في تطبيق Android Auto، ولكن عليك إنشاء إصدار منفصل يستوفي المتطلبات الموضّحة في هذه الصفحة.
لتشغيل تطبيقك المخصّص للسيارة على نظام التشغيل Android Automotive، تحتاج إلى أحدث إصدار من "مستضيف النماذج"، وهو تطبيق نظام.
نظرة عامة على التطوير
لا تتطلّب إضافة توافق مع نظام التشغيل Android Automotive سوى بضع خطوات، كما هو описан في الأقسام في هذه الصفحة:
- إنشاء وحدة مركبة
- الإفصاح عن توافق التطبيق مع نظام التشغيل Android Automotive
- الإفصاح عن
CarAppService
وCarAppActivity
- تعديل متطلّبات Gradle
استخدِم Android Studio Bumblebee أو إصدارًا أحدث لضمان فعالية جميع ميزات نظام التشغيل Automotive.
إنشاء وحدة للمركبات
تفرض بعض مكوّنات نظام التشغيل Android Automotive، مثل البيان، متطلبات خاصة بالنظام الأساسي. أنشئ وحدة يمكنها فصل الرمز البرمجي لهذه المكوّنات عن الرمز البرمجي الآخر في مشروعك، مثل الرمز البرمجي المستخدَم لتطبيق هاتفك.
بالنسبة إلى مشروع حالي، اتّبِع الخطوات التالية لإضافة وحدة سيارات إلى مشروعك:
- في Android Studio، انقر على ملف > جديد > وحدة جديدة.
- اختَر وحدة السيارات، ثم انقر على التالي.
- أدخِل اسم التطبيق/المكتبة. هذا هو الاسم الذي يظهر للمستخدمين عند تثبيت تطبيقك على نظام التشغيل Android Automotive.
- أدخِل اسم الوحدة.
- عدِّل اسم الحزمة ليطابق اسم تطبيقك الحالي.
اختَر المستوى 29 من واجهة برمجة التطبيقات: Android 10 (Q) الحد الأدنى لحزمة تطوير البرامج (SDK)، ثم انقر على التالي. تعمل جميع السيارات المتوافقة مع Car App Library (مكتبة تطبيقات السيارة) على نظام التشغيل Android Automotive من خلال المستوى 29 من واجهة برمجة التطبيقات Android 10 أو الإصدارات الأحدث، لذا فإنّ اختيار هذه القيمة يستهدف جميع السيارات المتوافقة.
اختَر إضافة "ما مِن نشاط"، ثم انقر على إنهاء.
إذا كنت تبدأ مشروعًا جديدًا:
- في Android Studio، انقر على ملف > جديد > مشروع جديد.
- اختَر Automotive (السيارات) في نوع المشروع.
- اختَر ما مِن نشاط، ثم انقر على التالي.
- أدخِل اسمًا لمشروعك. هذا هو الاسم الذي يظهر للمستخدمين عند عرض تطبيقك على نظام التشغيل Android Automotive.
- أدخِل اسم الحزمة. اطّلِع على قسم أسماء الحِزم لمزيد من التفاصيل حول اختيار اسم حزمة.
اختَر المستوى 29 من واجهة برمجة التطبيقات: Android 10 (Q) الحد الأدنى لحزمة تطوير البرامج (SDK)، ثم انقر على التالي.
تعمل جميع السيارات المتوافقة مع Car App Library (مكتبة تطبيقات السيارة) على نظام التشغيل Android Automotive من خلال المستوى 29 من واجهة برمجة التطبيقات Android 10 أو الإصدارات الأحدث، لذا فإنّ اختيار هذه القيمة يستهدف جميع السيارات المتوافقة.
بعد إنشاء الوحدة في 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.
يُرجى العلم أنّه ما مِن أنشطة تمّ الإعلان عنها في البيان.
توضيح متطلبات الميزة
بعد ذلك، أضِف عنصر uses-feature
التالي إلى البيان للإشارة إلى أنّه
يتطلب مضيف نموذج لكي يعمل بشكل صحيح:
<application ...>
...
<uses-feature
android:name="android.software.car.templates_host"
android:required="true" />
</application>
بالإضافة إلى ذلك، إذا كان تطبيقك يتضمّن أي بيان ميزات صريح يحتوي على android:required="true"
أو متطلّبات ميزات ضمنية لأي من الميزة التالية، عليك تعديلها أو إزالتها لكي لا تمنع متطلبات ميزات تطبيقك من توزيعه على المركبات المتوافقة.
android.hardware.wifi
android.hardware.screen.portrait
android.hardware.screen.landscape
android.hardware.camera
إذا تم الإعلان عن ميزة صراحةً في بيان التطبيق، يمكنك إجراء ذلك من خلال:
- حذف العنصر
<uses-feature>
إذا لم تكن الميزة مطلوبة بشكل ضمني - تحديد الميزة صراحةً باستخدام
android:required="false"
إذا كانت إحدى الميزات مطلوبة بشكل ضمني، يمكنك إجراء ذلك من خلال:
- تحديد الميزة صراحةً باستخدام
android:required="false"
- إزالة أو تعديل قيم البيان الأخرى التي تتطلّب بشكل ضمني الميزة
لا يؤثّر تغيير بيانات الميزات في ملف البيان في الأداء الفعلي لتطبيقك، لذا تأكَّد من أنّ تطبيقك لا يزال يعمل بشكل صحيح بدون هذه الميزات.
تعديل متطلّبات Gradle
ضمن وحدة Automotive، عليك إضافة عنصر تابع لملف androidx.car.app:app-automotive
، والذي يتضمّن تنفيذ CarAppActivity
المطلوب لتشغيل تطبيقك على نظام التشغيل Android Automotive.
إذا كنت تُطوّر تطبيقك ليتوافق مع كلّ من Android Auto ونظام التشغيل Android
Automotive، ننصحك بالاحتفاظ بـ CarAppService
في وحدة
منفصلة تشاركها بين وحدات الأجهزة الجوّالة والسيارات. إذا كنت
تستخدم هذا النهج، عليك تعديل وحدة Automotive لتضمين
الوحدة المشتركة باستخدام تبعيات المشروع في 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
استخدِم إدخال البيان التالي للإشارة إلى أنّ تطبيقك متوافق مع نظام التشغيل 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. يجب أن يتضمّن هذا الملف المحتوى التالي:
<automotiveApp>
<uses name="template"/>
</automotiveApp>
الإفصاح عن CarAppService وCarAppActivity
كما هو الحال مع Android Auto، يستخدم نظام التشغيل Android Automotive عملية تنفيذ CarAppService
لتشغيل تطبيقك. يُرجى الرجوع إلى مقالتَي إنشاء CarAppService وSession
وتعريف CarAppService للحصول على تعليمات حول تنفيذ CarAppService
وتعريفها.
على عكس Android Auto، يجب تضمين مكوّن تطبيق إضافي، وهو CarAppActivity
، ليكون بمثابة نقطة دخول لتطبيقك الذي يعمل بنظام التشغيل Android Automotive. يتم تضمين تنفيذ هذا النشاط في عنصر 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
من العنصرapp-automotive
. - يتم ضبط
android:exported
علىtrue
لأنّه يجب أن يكون بالإمكان تشغيل النشاط من خلال تطبيق آخر غير نفسه (أي مشغّل التطبيقات). - يتم ضبط
android:launchMode
علىsingleTask
حتى يتمكّن المستخدم من العودة إلى مثيل النشاط نفسه من مشغّل التطبيقات في حال الانتقال بعيدًا. - تم ضبط
android:theme
على@android:style/Theme.DeviceDefault.NoActionBar
لكي يشغل التطبيق مساحة الشاشة الكاملة المتاحة له. - يشير فلتر الأهداف إلى أنّ هذا هو نشاط مشغِّل التطبيقات.
- هناك عنصر
<meta-data>
يشير إلى نظام التشغيل بأنّه يمكن استخدام التطبيق أثناء فرض قيود على تجربة المستخدم، مثل عندما تكون المركبة في حالة الحركة.
متطلبات إضافية لتطبيقات التنقّل
بالنسبة إلى تطبيقات التنقّل، هناك بعض إدخالات البيان المطلوبة الأخرى لـ CarAppActivity
كما هو موضّح في المقتطف التالي:
<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
النظام بأنّ تطبيقك قادر على عرض الموقع الجغرافي للمستخدم. - يضمن فلتر الأهداف
androidx.car.app.action.NAVIGATE
أن يكون لدى المستخدمين خيار استخدام تطبيقك عند معالجة هدف تنقّل ضمني من تطبيق سيارة آخر.
اعتبارات أخرى
يُرجى مراعاة الاعتبارات الأخرى التالية عند تطوير تطبيقك المتوافق مع نظام التشغيل Android Automotive OS:
أسماء الحِزم
بما أنّك توزّع حزمة Android Package Kit (APK) منفصلة لنظام التشغيل Android Automotive، يمكنك مجددًا استخدام اسم الحزمة من تطبيقك المتوافق مع الأجهزة الجوّالة أو إنشاء اسم حزمة جديد. إذا كنت تستخدم اسم حزمة مختلفًا، سيتضمّن تطبيقك قائمتَين منفصلتَين في "متجر Play". في حال إعادة استخدام اسم الحزمة الحالي، سيتوفّر لتطبيقك بطاقة بيانات متجر واحدة على كلتا المنصّتَين.
يعود هذا القرار بشكل أساسي إلى النشاط التجاري. على سبيل المثال، إذا كان لديك فريق واحد يعمل على تطوير التطبيق المتوافق مع الأجهزة الجوّالة، وفريق منفصل يعمل على تطوير تطبيق نظام التشغيل Android Automotive، قد يكون من المنطقي استخدام أسماء حِزم منفصلة والسماح لكل فريق بإدارة بطاقة بياناته الخاصة على "متجر Play". ليس هناك فرق كبير في الجهد الفني المطلوب لاستخدام أيّ من المنهجَين.
يلخِّص الجدول التالي بعض الاختلافات الرئيسية الأخرى بين الاحتفاظ باسم الحزمة الحالي أو استخدام اسم حزمة جديد:
الميزة | اسم الحزمة نفسه | اسم الحزمة الجديد |
---|---|---|
بطاقة بيانات المتجر | أغنية فردية | عدة تعليقات |
التثبيت المطابق | نعم: إعادة تثبيت التطبيق بسرعة أثناء معالج الإعداد | لا |
عملية المراجعة في "متجر Play" | حظر المراجعات: إذا تعذّر اجتياز المراجعة لحزمة APK واحدة، سيتم حظر حِزم APK الأخرى التي تم إرسالها في الإصدار نفسه. | المراجعات الفردية |
الإحصاءات والمقاييس والمؤشرات الحيوية | البيانات المجمّعة: يمكنك الفلترة حسب اسم الجهاز للحصول على data المتعلّقة بالسيارات. | فصل |
الفهرسة والترتيب في نتائج البحث | الارتقاء من المستوى الحالي | لا يمكن نقل المحتوى |
الدمج مع تطبيقات أخرى | من المرجّح عدم الحاجة إلى إجراء أي تغييرات، بافتراض أنّ رمز الوسائط مشترَك بين حِزم APK. | قد يكون عليك تحديث التطبيق المقابل، مثل تشغيل عناوين URL باستخدام "مساعد Google". |
المحتوى بلا إنترنت
يمكنك توفير إمكانية استخدام التطبيق بلا إنترنت، إذا كان ذلك منطبقًا. من المتوقّع أن تتضمّن السيارات المزوّدة بنظام التشغيل Android Automotive إمكانية الاتصال بالبيانات، ما يعني أنّه يتم تضمين خطة data في تكلفة المركبة أو يدفع المستخدم ثمنها. ومع ذلك، من المتوقّع أيضًا أن تتمتع السيارات بإمكانية اتصال متباينة أكثر من الأجهزة الجوّالة.
في ما يلي بعض النقاط التي يجب أخذها في الاعتبار عند وضع استراتيجية المساعدة بلا إنترنت:
- إنّ أفضل وقت لتنزيل المحتوى هو عندما يكون تطبيقك قيد الاستخدام.
- لا تفترض توفّر شبكة Wi-Fi. قد لا تصل السيارة أبدًا إلى نطاق شبكة Wi-Fi، أو قد يكون المصنّع الأصلي للجهاز قد أوقف شبكة Wi-Fi لصالح شبكة الجوّال.
- على الرغم من أنّه من المقبول تخزين المحتوى الذي تتوقّع أن يستخدمه المستخدمون في ذاكرة التخزين المؤقت بذكاء، ننصحك بالسماح للمستخدم بتغيير هذا السلوك.
- تختلف مساحة القرص في السيارات، لذا امنح المستخدمين طريقة لحذف المحتوى الذي تم تنزيله.
الأسئلة الشائعة
اطّلِع على الأقسام التالية للحصول على إجابات عن بعض الأسئلة الشائعة حول نظام التشغيل Android Automotive.
هل هناك أي قيود أو اقتراحات لاستخدام حِزم SDK والمكتبات التابعة لجهات خارجية؟
ما مِن إرشادات محدّدة حول استخدام حِزم تطوير البرامج (SDK) والمكتبات التابعة لجهات خارجية. إذا اخترت استخدام حِزم SDK والمكتبات التابعة لجهات خارجية، تظل مسؤولاً عن الامتثال لجميع متطلبات جودة تطبيقات السيارات.
كيف يمكنني نشر تطبيق Android Automotive OS باستخدام Google Play Console؟
لمعرفة تفاصيل عن كيفية نشر تطبيقك المتوافق مع نظام التشغيل Android Automotive باستخدام Google Play Console، يُرجى الاطّلاع على مقالة التوزيع على السيارات.
تحديد المشاكل وحلّها
اطّلِع على ما يلي للحصول على مساعدة بشأن بعض السيناريوهات الشائعة لتحديد المشاكل وحلّها على نظام التشغيل Android Automotive.
حتى بعد إلغاء تثبيت أحد تطبيقات "مكتبة تطبيقات السيارات" من إعدادات النظام، تظهر لي رسالة خطأ عند محاولة تثبيت إصدار جديد.
للتأكّد من إلغاء تثبيت التطبيق، استخدِم الأمر
adb uninstall app.package.name
.