نظرة عامة على توافق الأجهزة

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

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

وإذا لزم الأمر، يمكنك تحديد متطلبات ميزات تطبيقك والتحكّم في أنواع الأجهزة التي يمكنها تثبيت تطبيقك من "متجر Google Play". ويوضِّح هذا المستند كيفية التحكّم في الأجهزة التي يمكنها الوصول إلى تطبيقاتك وكيفية تحضيرها للوصول إلى الجمهور المناسب.

ماذا يعني "التوافق"؟

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

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

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

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

التحكّم في مدى توفُّر تطبيقك على الأجهزة

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

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

ميزات الجهاز

لإدارة مدى توفُّر تطبيقك استنادًا إلى ميزات الجهاز، يحدِّد نظام Android معرّفات الميزات لأي ميزة من ميزات الأجهزة أو البرامج التي قد لا تتوفّر على جميع الأجهزة. على سبيل المثال، معرّف ميزة أداة استشعار البوصلة هو FEATURE_SENSOR_COMPASS، ورقم تعريف الميزة لأدوات التطبيق هو FEATURE_APP_WIDGETS.

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

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

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

يقارن متجر Google Play بين الميزات التي يتطلبها تطبيقك الميزات المتاحة على كل جهاز من أجهزة المستخدمين لتحديد ما إذا كان التطبيق متوافقًا مع كل جهاز. إذا كان الجهاز لا يحتوي على كل الميزات التي يتطلبها تطبيقك، لن يتمكن المستخدم من تثبيت تطبيقك.

ومع ذلك، إذا كانت الوظيفة الأساسية لتطبيقك لا تتطلب ميزة على الجهاز، اضبط السمة required على "false" وتحقَّق من توفُّر ميزة الجهاز في وقت التشغيل. إذا لم تكن ميزة التطبيق متاحة على الجهاز الحالي، يمكنك خفض ميزة التطبيق المتجاوب على نحو ملائم. على سبيل المثال، يمكنك الاستعلام عمّا إذا كانت الميزة متاحة من خلال طلب hasSystemFeature() على النحو التالي:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

للحصول على معلومات حول جميع الفلاتر التي يمكنك استخدامها للتحكم في مدى توفُّر تطبيقك من خلال "متجر Google Play"، راجِع مستندات الفلاتر على Google Play.

إصدار النظام الأساسي

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

يجب تحديد قيمتَي minSdkVersion وtargetSdkVersion في ملف build.gradle:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

رائع

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

لمزيد من المعلومات حول ملف build.gradle، يُرجى الاطّلاع على ضبط الإصدار.

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

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

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

إعدادات الشاشة

يعمل نظام التشغيل Android على أجهزة بأحجام مختلفة، مثل الهواتف والأجهزة اللوحية وأجهزة التلفزيون. لتصنيف الأجهزة حسب نوع الشاشة، يحدّد نظام التشغيل Android سمتَين لكل جهاز، وهما: حجم الشاشة (الحجم الفعلي للشاشة) وكثافة الشاشة (الكثافة الفيزيائية لوحدات البكسل على الشاشة، والمعروفة باسم DPI). لتبسيط الإعدادات المختلفة، يعمِّم Android هذه الصِيَغ إلى مجموعات يسهّل استهدافها:

  • أربعة أحجام عامة: صغير، عادي، كبير، كبير جدًا
  • عدة كثافات معممة: mdpi (متوسطة)، hdpi (مرتفع)، xhdpi (مرتفعة جدًا)، xxhdpi (مرتفع جدًا)، وغير ذلك

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

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

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

التحكّم في مدى توفُّر تطبيقك لأغراض تجارية

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

وتعتمد فلترة التوافق الفني، مثل مكوّنات الأجهزة المطلوبة، دائمًا على المعلومات المُضمنة في ملف APK أو ملف AAB. ومع ذلك، يتم دائمًا إجراء الفلترة لأسباب غير تقنية، مثل المنطقة الجغرافية، في Google Play Console.

معلومات إضافية:

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