إضافة إمكانية استخدام نظام التشغيل Android Automotive إلى تطبيقك المستنِد إلى نموذج

يتيح نظام التشغيل Android Automotive للمستخدمين تثبيت التطبيقات في السيارة. للوصول إلى مستخدمي هذا النظام الأساسي، عليك توزيع تطبيق ملائم لقائدي السيارات يتوافق مع نظام التشغيل Android Automotive. يمكنك إعادة استخدام جميع الرموز البرمجية والموارد تقريبًا في تطبيق Android Auto، ولكن يجب إنشاء إصدار منفصل يفي بالمتطلبات الموضحة في هذه الصفحة.

لتشغيل تطبيق السيارة على نظام التشغيل Android Automotive، تحتاج إلى أحدث إصدار من Templates Host (مضيف النماذج)، الذي يأتي كتطبيق النظام.

نظرة عامة على التطوير

لا تتطلب إضافة نظام التشغيل Android Automotive سوى بضع خطوات، كما هو موضّح في الأقسام ضمن هذه الصفحة:

  1. إنشاء وحدة خاصة بالسيارات
  2. الإعلان عن التوافق مع نظام التشغيل Android Automotive
  3. تعريف CarAppService وCarAppActivity
  4. تعديل تبعيات Gradle

استخدِم استوديو Bumblebee أو إصدار أحدث لضمان تفعيل جميع ميزات نظام التشغيل Automotive.

إنشاء وحدة خاصة بالسيارات

بعض مكونات نظام التشغيل Android Automotive، مثل البيان، لها متطلبات خاصة بنظام التشغيل. أنشئ وحدة يمكنها إبقاء التعليمات البرمجية لهذه المكونات منفصلة عن التعليمات البرمجية الأخرى في مشروعك، مثل الكود المستخدم لتطبيق هاتفك.

بالنسبة لمشروع حالي، اتبع هذه الخطوات لإضافة وحدة سيارات إلى مشروعك:

  1. في "استوديو Android"، انقر على ملف > جديد > وحدة جديدة.
  2. اختَر وحدة السيارات، ثم انقر على التالي.
  3. أدخِل اسم التطبيق/المكتبة. هذا هو الاسم الذي يراه المستخدمون لتطبيقك على نظام التشغيل Android Automotive.
  4. أدخِل اسم الوحدة.
  5. عدِّل اسم الحزمة ليطابق تطبيقك الحالي.
  6. اختَر API 29: Android 10 (Q) للحد الأدنى من حزمة تطوير البرامج (SDK)، ثم انقر على التالي. إنّ جميع السيارات التي تتيح استخدام "مكتبة تطبيقات السيارة" على نظام التشغيل Android Automotive تعمل على المستوى 29 من واجهة برمجة التطبيقات Android 10 أو المستوى 29 أو الإصدارات الأحدث، لذلك يستهدف اختيار هذه القيمة جميع السيارات المتوافقة.

  7. اختر إضافة ما من نشاط، ثم انقر على إنهاء.

إذا كنت تبدأ مشروعًا جديدًا:

  1. في "استوديو Android"، انقر على ملف > جديد > مشروع جديد.
  2. اختَر السيارات لنوع المشروع.
  3. اختَر ما مِن نشاط، ثم انقر على التالي.
  4. أدخِل اسمًا لمشروعك. هذا هو الاسم الذي يراه المستخدمون لتطبيقك على نظام التشغيل Android Automotive.
  5. أدخِل اسم الحزمة. راجِع قسم أسماء الحِزم للحصول على مزيد من التفاصيل حول تحديد اسم الحزمة.
  6. اختَر API 29: Android 10 (Q) للحد الأدنى من حزمة تطوير البرامج (SDK)، ثم انقر على التالي.

    إنّ جميع السيارات التي تتيح استخدام "مكتبة تطبيقات السيارة" على نظام التشغيل Android Automotive تعمل على المستوى 29 من واجهة برمجة التطبيقات Android 10 أو المستوى 29 أو الإصدارات الأحدث، لذلك يستهدف اختيار هذه القيمة جميع السيارات المتوافقة.

بعد إنشاء الوحدة في "استوديو Android"، افتح ملف 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 التالية إلى البيان:

<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 الأول إلى أنّ تطبيقك يستخدم "Template Host (مضيف النماذج)" للتشغيل. يؤدي ضبط عناصر uses-feature الأربعة المتبقية بشكل صريح على required="false" إلى ضمان عدم تعارض تطبيقك مع ميزات الأجهزة المتوفّرة في الأجهزة التي تعمل بنظام التشغيل Android Automotive.

تعديل تبعيات Gradle

ضمن وحدة السيارات، يجب إضافة تبعية على العنصر androidx.car.app:app-automotive، الذي يتضمّن تنفيذ CarAppActivity المطلوب لتشغيل تطبيقك على نظام التشغيل Android Automotive.

إذا كنت تطوّر تطبيقك ليتوافق مع كل من Android Auto ونظام التشغيل Android Automotive، ننصحك بالاحتفاظ بـ 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

يُرجى استخدام إدخال البيان التالي للإقرار بأنّ تطبيقك متوافق مع نظام التشغيل Android Automotive:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

يشير إدخال البيان هذا إلى ملف XML يوضِّح إمكانيات السيارات التي يوفّرها تطبيقك.

للإشارة إلى أنّ لديك تطبيق Car App Library، أضِف ملف XML باسم automotive_app_desc.xml إلى دليل res/xml/ في وحدة نظام التشغيل Android Automotive. يُفترض أن يتضمن هذا الملف المحتوى التالي:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

تعريف CarAppService وCarAppActivity

كما هو الحال في Android Auto، يستخدم نظام التشغيل Android Automotive عملية تنفيذ CarAppService لتشغيل تطبيقك. يمكنك الرجوع إلى إنشاء CarAppService والجلسة والإعلان عن 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:

أسماء الحِزم

بما أنّك توزِّع ملف APK منفصلاً لنظام التشغيل Android Automotive، يمكنك إعادة استخدام اسم الحزمة من تطبيقك المتوافق مع الأجهزة الجوّالة أو إنشاء اسم حزمة جديد. إذا كنت تستخدم اسم حزمة مختلفًا، سيحتوي تطبيقك على قائمتَي بيانات منفصلتَين على "متجر Play". إذا أعدت استخدام اسم الحزمة الحالي، فإن تطبيقك يحتوي على قائمة واحدة عبر كلا النظامين الأساسيين.

هذا قرار أعمال في الغالب. على سبيل المثال، إذا كان لديك فريق واحد يعمل على التطبيق المتوافق مع الأجهزة الجوّالة وفريق منفصل يعمل على تطبيق "نظام التشغيل Android Automotive"، فقد يكون من المنطقي استخدام أسماء حِزم منفصلة والسماح لكل فريق بإدارة بطاقة بيانات المتجر على "متجر Play". لا يوجد فرق كبير في الجهد الفني المطلوب لاستخدام أي من النهجين.

يلخص الجدول التالي بعض الاختلافات الرئيسية الأخرى بين الاحتفاظ باسم الحزمة الحالي أو استخدام اسم حزمة جديد:

إبراز اسم الحزمة نفسه اسم الحزمة الجديد
بطاقة بيانات المتجر بلوغ القاعدة الأولى عدة تعليقات
التركيب بمرآة عاكسة نعم: إعادة تثبيت التطبيق بسرعة أثناء معالج الإعداد لا
عملية المراجعة على "متجر Play" حظر المراجعات: إذا تعذّرت مراجعة حزمة APK واحدة، يتم حظر حِزم APK الأخرى المرسَلة في الإصدار نفسه. المراجعات الفردية
الإحصاءات والمقاييس والسيريات مجمّعة: يمكنك الفلترة حسب اسم الجهاز للحصول على البيانات الخاصة بالسيارات. فصل
الفهرسة والترتيب في نتائج البحث التركيز على الوضع الحالي غير مُرحَّل
التكامل مع التطبيقات الأخرى على الأرجح لا يلزم إجراء أي تغييرات، بافتراض أنه تتم مشاركة رمز الوسائط بين حزمتَي APK. قد يكون من الضروري تحديث التطبيق المعنيّ، مثل تشغيل معرّف الموارد المنتظم (URI) باستخدام "مساعد Google".

محتوى بلا إنترنت

ننصحك بتفعيل الدعم بلا إنترنت في تطبيقك، إن أمكن. من المفترض أن تتوفّر في السيارات التي تعمل بنظام التشغيل Android Automotive إمكانية اتصال بيانات خاصة بها، ما يعني أنّ خطة البيانات مشمولة في تكلفة المركبة أو التي يدفعها المستخدم. ومع ذلك، من المتوقع أيضًا أن يكون لدى السيارات إمكانية اتصال متغيّر أكثر من الأجهزة المحمولة.

إليك بعض الأمور التي يجب وضعها في الاعتبار عند التفكير في استراتيجية الدعم بلا اتصال بالإنترنت:

  • أفضل وقت لتنزيل المحتوى هو أثناء استخدام تطبيقك.
  • لا تفترض أن شبكة WiFi متاحة. ربما لا تدخل السيارة نطاق اتصال WiFi مطلقًا، أو ربما أوقف المصنّع الأصلي للجهاز (OEM) شبكة Wi-Fi لصالح شبكة خلوية.
  • على الرغم من أنه يمكنك التخزين المؤقت للمحتوى الذي تتوقّع أن يستخدمه المستخدمون، ننصحك بالسماح للمستخدم بتغيير هذا السلوك.
  • تختلف مساحة القرص في السيارات، لذا امنح المستخدمين طريقة لحذف المحتوى بلا إنترنت.

الأسئلة الشائعة

راجِع الأقسام التالية للحصول على إجابات عن بعض الأسئلة الشائعة حول نظام التشغيل Android Automotive.

هل هناك أي قيود أو اقتراحات بشأن استخدام حِزم SDK ومكتبات تابعة لجهات خارجية؟

لا تتوفّر إرشادات محدّدة بشأن استخدام حِزم تطوير البرامج (SDK) والمكتبات التابعة لجهات خارجية. إذا اخترت استخدام حِزم تطوير برامج (SDK) ومكتبات تابعة لجهات خارجية، تقع على عاتقك مسؤولية الالتزام بجميع متطلبات جودة تطبيقات السيارات.

كيف أنشر تطبيق نظام التشغيل Android Automotive باستخدام Google Play Console؟

تشبه عملية نشر التطبيق نشر تطبيق هاتف، ولكنك تستخدم شكلاً مختلفًا. لتفعيل تطبيقك من أجل استخدام نوع الإصدار لنظام التشغيل Android Automotive، يُرجى اتّباع الخطوات التالية:

  1. فتح Play Console
  2. اختيار تطبيقك
  3. من القائمة اليمنى، اختَر الإصدار > الإعداد > الإعدادات المتقدمة > عوامل النموذج.
  4. اختَر إضافة شكل الجهاز > نظام التشغيل Android Automotive، ثم اتّبِع التعليمات الواردة في Play Console.

تحديد المشاكل وحلّها

راجع ما يلي للحصول على مساعدة بشأن بعض السيناريوهات الشائعة لتحديد المشاكل وحلّها على نظام التشغيل Android Automotive.

  • حتى بعد إلغاء تثبيت تطبيق Car App Library من إعدادات النظام، يظهر لي خطأ عند محاولة تثبيت إصدار جديد.

    للتأكُّد من إلغاء تثبيت التطبيق، استخدِم الأمر adb uninstall app.package.name.