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