إنشاء تطبيقات مستضافة لنظام التشغيل Android Automotive

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

اختبار تطبيقك الحالي على محاكي نظام التشغيل Android Automotive

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

عند تشغيل تطبيقك، انتبه إلى مشاكل التوافق، مثل ما يلي:

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

ضبط ملفات البيان لتطبيقك

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

ميزات نظام التشغيل Android Automotive المطلوبة

لكي يتم إدراجها في "متجر Play" داخل سيارة، يجب أن تتضمّن التطبيقات المصمَّمة لنظام التشغيل Android Automotive عنصر <uses-feature> التالي في ملف AndroidManifest.xml:

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

لا يمكن للتطبيقات التي يتم إرسالها إلى قنوات الإصدار غير المخصّصة للسيارات تضمين العنصر <uses-feature> المعروض في نموذج الرمز السابق لأنّها لا يمكن أن تعتمد على أجهزة خاصة بالسيارة. لذلك، لشحن التطبيق نفسه لكل من الأجهزة الخاصة بالسيارات وغير السيارات، يجب عليك إنشاء شكلين على الأقل لتطبيقك: أحدهما للأجهزة الخاصة بالسيارات والآخر للأجهزة المحمولة. لمزيد من المعلومات حول كيفية تحضير هذه النكهات المنفصلة، راجع الوثائق التالية:

يمكن أن يتشارك نمطا التطبيق في اسم الحزمة نفسه، ولكن يجب أن يكون لهما رموز إصدار مختلفة لأنّه يتم تحميلهما إلى مسارات "متجر Play" بشكل منفصل.

وبدلاً من استخدام نكهات منفصلة، يمكنك استخدام أسماء حزم منفصلة لحِزم APK أو حِزم التطبيقات المخصّصة للأجهزة الجوّالة وتلك الخاصة بالسيارات. لمعرفة النتائج الإيجابية لكل نهج، يمكنك الاطّلاع على أسماء الحِزم في دليل مطوِّر تطبيقات الوسائط.

بالإضافة إلى العنصر المعروض في نموذج الرمز السابق، يجب أن تتضمّن التطبيقات المصمَّمة لنظام التشغيل Android Automotive عناصر <uses-feature> التالية في العنصر الجذر <manifest>:

<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"/>

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

التأكد من عدم وجود أنشطة من شأنها تشتيت الانتباه

للتأكّد من أنّ تطبيقك متاح للاستخدام فقط أثناء ركن السيارة، لا تضمّن العنصر <meta-data> التالي في أي عنصر <activity> في البيان:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

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

إدخالات البيان الخاصة بالفئة

بالإضافة إلى المتطلبات السابقة التي تسري على جميع التطبيقات المحجوزة، هناك متطلبات إضافية لفئات الفيديو والألعاب:

تحسين تطبيقك لنظام التشغيل Android Automotive

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

تحسين المحتوى للشاشات الكبيرة

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

على وجه التحديد، يمكنك الاطّلاع على دليلَي إتاحة أحجام الشاشات المختلفة ودليل نقل بيانات واجهة المستخدم إلى التنسيقات سريعة الاستجابة للحصول على تفاصيل حول الاستفادة إلى أقصى حد من أحجام الشاشات الكبيرة، والاطّلاع على معارض الوسائط والألعاب لاستلهام أفكار بشأن التصميم والتوجيه.

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

استخدام المساحات الداخلية للنوافذ وأشكال زخرفية للعرض

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

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

أشرطة النظام، والوضع المجسم، والعرض من الحافة إلى الحافة

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

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

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

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

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

التكيّف مع الشاشات ذات الشكل غير المنتظم

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

رسم بياني لجهاز يعمل بنظام التشغيل Android Automotive تظهر فيه شاشة منحنية جهة اليمين.
الشكل 1: جهاز يعمل بنظام التشغيل Android Automotive ويعرض شاشة منحنية جهة اليمين المنطقة الخضراء هي مستطيل آمن لا يتداخل مع المربّع المحيط لرسم المنحنى.

إذا كان تطبيقك لا يظهر من حافة إلى أخرى، لن تحتاج إلى اتخاذ أي إجراء ليتم عرضه داخل المنطقة الآمنة.

إذا كان تطبيقك يعرض أجزاءً من الحافة إلى الأخرى، يمكنك اختيار الطريقة التي تريد أن يتصرف بها في ما يتعلق بالأشكال المقطوعة للشاشة. يمكنك تحقيق ذلك باستخدام الموارد عن طريق ضبط السمة android:windowLayoutInDisplayCutoutMode لسمة مظهر تطبيقك أو في وقت التشغيل من خلال تعديل سمة layoutInDisplayCutoutMode النافذة.

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

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

إيقاف الميزات

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

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

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

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

بالنسبة إلى ميزة "نافذة ضمن النافذة"، يجب اتّباع أفضل الممارسات المعمول بها للتحقّق مما إذا كانت الميزة متاحة وتستجيب بشكل مناسب.

التعامل مع سيناريوهات عدم الاتصال بالإنترنت

مع تزايد اتصال السيارات بالإنترنت، ننصح باستخدام التطبيقات للتشغيل بدون اتصال بالإنترنت، كما هو الحال في الحالات التالية:

  • يمكن للمستخدمين إيقاف بيانات الجوّال المقدَّمة كجزء من حزمة الاشتراك من الشركة المصنّعة للسيارة.
  • قد يكون الوصول إلى بيانات الجوّال محدودًا في مناطق معيّنة.
  • قد تكون السيارات المزوّدة بأجهزة لاسلكية Wi-Fi خارج نطاق شبكة Wi-Fi، أو قد يوقف المصنّع الأصلي للجهاز شبكة Wi-Fi لصالح شبكة الجوّال.

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

استخدام مراجع بديلة

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

توزيع التطبيق

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

تقديم ملاحظات عن التطبيقات المتوقفة

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

إنشاء عدد جديد