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

تم تصميم 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 لحظر وصول التطبيقات إلى واجهات برمجة تطبيقات معيّنة من خلال نظام أذونات يتطلّب موافقة المستخدم على استخدام تطبيقك لواجهات برمجة التطبيقات هذه.