إنشاء تطبيقات مستضافة لنظام التشغيل 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

لكي يتم إدراج التطبيقات المصمَّمة لنظام التشغيل 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 for Cars لمعرفة ما إذا كان التطبيق يعمل على نظام التشغيل Android Automotive أو Android Auto أو ما إذا لم يكن متصلاً بسيارة على الإطلاق.

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

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

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

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

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

استخدام موارد بديلة

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

توزيع تطبيقك

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

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

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

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