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