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

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

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

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

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

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

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

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

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

لكي يتم عرض التطبيقات في "متجر Play" على سيارة، يجب أن تشتمل التطبيقات المُنشَأة لنظام التشغيل Android Automotive على عنصر <uses-feature> في ملف AndroidManifest.xml لميزة android.hardware.type.automotive:

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

بالإضافة إلى العنصر المعروض في نموذج الرمز البرمجي السابق، يجب أن تتضمّن التطبيقات المُنشأة لنظام التشغيل 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 OS.

التأكّد من عدم وجود أنشطة محسّنة للتشويش

لضمان عدم توفّر تطبيقك إلا عند وقوف السيارة، لا تُدرِج العنصر <meta-data> التالي في أي عنصر <activity> ضمن بيانك:

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

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

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

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

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

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

تحسين الأداء على الشاشات الكبيرة

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

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

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

العمل مع النوافذ المضمّنة وفتحات الشاشة

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

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

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

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

بالإضافة إلى ذلك، يتيح نظام التشغيل Android Automotive لمصنّعي السيارات الأصليين التحكّم في ما إذا كان بإمكان التطبيقات عرض أشرطة النظام أو إخفاؤها للدخول إلى الوضع immersive والخروج منه. على سبيل المثال، من خلال منع التطبيقات من إخفاء أشرطة النظام، يمكن لمصنّعي السيارات الأصليين التأكّد من إمكانية الوصول دائمًا إلى عناصر التحكّم في المركبة، مثل عناصر التحكّم في المناخ. إذا منع المصنّع الأصلي للجهاز التطبيقات من التحكّم في أشرطة النظام، لن يحدث أي شيء عندما يستدعي أحد التطبيقات واجهات برمجة التطبيقات 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 OS مزوّد بشاشة منحنية
      على الجانب الأيمن
الشكل 1: جهاز Android Automotive OS مزوّد بشاشة منحنية على الجانب الأيمن المنطقة الخضراء هي المستطيل الآمن الذي لا يتداخل مع مربّع الحدود لجزء الشاشة المخصّص للعرض المنحني.

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

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

بما أنّ أنواع الفتحات في الشاشة على أجهزة Android Automotive OS تختلف عن تلك الموجودة على الأجهزة الجوّالة، لا تستخدِم 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 لجعل استهدافات اللمس أكبر.

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

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

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

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

إنشاء مشكلة جديدة