تم تصميم 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 أو حزمة تطبيق Android (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. غالبًا ما يضيف كل إصدار متتالٍ من المنصة واجهات برمجة تطبيقات غير متوفّرة في الإصدار السابق. للإشارة إلى مجموعة واجهات برمجة التطبيقات المتاحة، يحدّد كل إصدار من النظام الأساسي مستوى واجهة برمجة التطبيقات. على سبيل المثال، مستوى واجهة برمجة التطبيقات 31 هو Android 12، ومستوى واجهة برمجة التطبيقات 33 هو Android 13.
يجب تحديد قيمتَي
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(36) ... } }
أنيق
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 36 ... } }
لمزيد من المعلومات حول ملف 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 (عالية جدًا جدًا) وغيرها
يتوافق تطبيقك تلقائيًا مع جميع أحجام الشاشات وكثافتها، لأنّ النظام يُجري تعديلات على تصميم واجهة المستخدم وموارد الصور حسب الحاجة لكل شاشة. توفير صور نقطية محسّنة لكثافات الشاشة الشائعة
حسِّن تجربة المستخدم من خلال استخدام التنسيقات المرنة قدر الإمكان. عندما تكون هناك تخطيطات لتغييرات كبيرة في الإعدادات، مثل الوضع العمودي والوضع الأفقي، أو أحجام النوافذ الكبيرة مقابل الصغيرة، ننصحك بتوفير تخطيطات بديلة تتسم بالمرونة مع التغييرات الأصغر في الإعدادات. يؤدي ذلك إلى تحسين تجربة المستخدم على الأجهزة اللوحية والهواتف والأجهزة القابلة للطي. ويساعد أيضًا عندما يتغير حجم النوافذ في وضع النوافذ المتعددة.
للحصول على معلومات حول كيفية إنشاء موارد بديلة للشاشات المختلفة وكيفية حصر تطبيقك على أحجام شاشات معيّنة عند الضرورة، يُرجى الاطّلاع على نظرة عامة حول التوافق مع الشاشات وإرشادات جودة التطبيقات على الشاشات الكبيرة.
التحكّم في مدى توفّر تطبيقك لأسباب تجارية
بالإضافة إلى حظر توفّر تطبيقك استنادًا إلى خصائص الجهاز، قد تحتاج إلى حظر توفّر تطبيقك لأسباب تجارية أو قانونية. في هذه الحالة، يوفّر "متجر Google Play" خيارات فلترة في Play Console تتيح لك التحكّم في مدى توفّر تطبيقك لأسباب غير فنية، مثل لغة المستخدم أو مشغّل شبكة الجوّال.
تستند الفلترة حسب التوافق الفني، مثل مكوّنات الأجهزة المطلوبة، دائمًا إلى المعلومات الواردة في ملف APK أو AAB. أمّا الفلترة لأسباب غير فنية، مثل الموقع الجغرافي، فتتم دائمًا في Google Play Console.
معلومات إضافية:
- نظرة عامة على مراجع التطبيق
- معلومات حول كيفية تنظيم تطبيقات Android لفصل موارد التطبيق عن رمز التطبيق، بما في ذلك كيفية توفير موارد بديلة لإعدادات جهاز معيّنة.
- الفلاتر في Google Play
- معلومات عن الطرق المختلفة التي يمكن أن يمنع بها "متجر Google Play" تثبيت تطبيقك على أجهزة مختلفة
- الأذونات على Android
- كيفية تقييد Android وصول التطبيقات إلى واجهات برمجة تطبيقات معيّنة من خلال نظام أذونات يتطلّب موافقة المستخدم على استخدام تطبيقك لواجهات برمجة التطبيقات هذه