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

تم تصميم نظام التشغيل 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>

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

ومع ذلك، إذا كانت الوظيفة الأساسية لتطبيقك لا تتطلّب ميزة في الجهاز، اضبط السمة 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();
}

للحصول على معلومات حول جميع الفلاتر التي يمكنك استخدامها للتحكّم في مدى توفّر تطبيقك على &quot;متجر Google Play&quot;، يمكنك الاطّلاع على مستند الفلاتر على 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)
        ...
    }
}

Groovy

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 سمتَين لكل جهاز، وهما حجم الشاشة (الحجم الفعلي للشاشة) وكثافة الشاشة (الكثافة الفعلية لوحدات البكسل على الشاشة، والمعروفة باسم عدد النقاط لكل بوصة). لتبسيط الإعدادات المختلفة، يعمّم نظام التشغيل Android هذه الأنواع في مجموعات تسهّل استهدافها:

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

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

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

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

التحكّم في مدى توفّر تطبيقك لأسباب تتعلّق بالنشاط التجاري

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

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

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

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