عند تحميل حِزمة APK، يجب أن تستوفي متطلبات مستوى واجهة برمجة التطبيقات المستهدَف على Google Play.
بدايةً من 31 آب (أغسطس) 2023:
يجب أن تستهدف التطبيقات الجديدة Android 13 (المستوى 33 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث باستثناء تطبيقات Wear OS التي يجب أن تستهدف إصدارًا يتراوح بين Android 11 (المستوى 30) وAndroid 13 (المستوى 33 لواجهة برمجة التطبيقات).
يجب أن تستهدف تحديثات التطبيقات الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث وأن تتكيّف مع التغييرات السلوكية في الإصدار 13 من نظام التشغيل Android، باستثناء تطبيقات Wear OS التي يجب أن تستهدف نظام التشغيل Android 11.
التطبيقات الخاصة بشكل دائم، التي تقتصر على مستخدمين في مؤسسة معيّنة والمخصّصة للتوزيع الداخلي فقط، ليست مطلوبة لاستيفاء متطلبات مستوى واجهة برمجة التطبيقات المستهدَف.
ملاحظة: اعتبارًا من العام 2022، لن تتوفّر بعض التطبيقات القديمة للمستخدمين الجُدد على الأجهزة التي تعمل بإصدارات أحدث من Android.
ما هو الهدف من استهداف حِزم SDK أحدث؟
يقدّم كل إصدار جديد من Android تغييرات تساهم في تحسين الأمان
والأداء وتحسين تجربة المستخدم. لا تسري بعض هذه التغييرات إلا على التطبيقات التي تقدّم بيانًا صريحًا أنّها تدعمها من خلال سمة البيان targetSdkVersion
(المعروفة أيضًا باسم
مستوى واجهة برمجة التطبيقات المستهدَف).
عند ضبط تطبيقك لاستهداف مستوى حديث لواجهة برمجة التطبيقات، يضمن ذلك استفادة المستخدمين من هذه التحسينات، بينما يظلّ بالإمكان تشغيل تطبيقك على إصدارات قديمة من Android. يتيح أيضًا استهداف مستوى حديث لواجهة برمجة التطبيقات لتطبيقك الاستفادة من أحدث ميزات النظام الأساسي لإرضاء المستخدمين. بالإضافة إلى ذلك، اعتبارًا من Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، يظهر تحذير للمستخدمين عند تشغيل تطبيق للمرة الأولى إذا كان التطبيق يستهدف الإصدار Android 5.1 (المستوى 22 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم.
يوضّح هذا المستند النقاط المهمة التي يجب معرفتها بشأن تعديل مستوى واجهة برمجة التطبيقات المستهدَف لاستيفاء متطلبات Google Play.
وعند الانتقال من الإصدارات الأقدم، يُرجى الاطّلاع على قائمة التغييرات الكاملة أدناه.
ملاحظة: إذا كان ملف Gradle يحتوي على
إدخالات البيان، يمكنك تأكيد القيمة الحالية لـ
targetSdkVersion
أو تغييرها في ملف Gradle لتطبيقك، كما هو موضَّح في
ضبط الإصدار.
بدلاً من ذلك، يمكنك استخدام السمة android:targetSdkVersion
في ملف البيان، كما هو موضّح في المستندات الخاصة بعنصر البيان <uses-sdk>.
نقل البيانات من Android 12 (المستوى 31) إلى Android 13 (المستوى 33)
لتحديث تطبيقك لاستهداف الإصدار 13 من نظام التشغيل Android، يُرجى اتّباع قائمة التغييرات في السلوك.
نقل البيانات من Android 11 (المستوى 30) إلى Android 12 (المستوى 31)
الأمان والأذونات
- البلوتوث: يجب استبدال بيانات الأذونات BLUETOOTH وBLUETOOTH_ADMIN بإذنَي BLUETOOTH_SCAN أو BLUETOOTH_ADVERTISE أو BLUETOOTH_CONNECT.
لم تعُد بحاجة إلى تقديم طلبات الحصول على أذونات تشغيل
LOCATION
لعمليات البلوتوث. - الموقع الجغرافي: يمكن للمستخدمين أن يطلبوا من التطبيقات استرداد معلومات الموقع الجغرافي التقريبية فقط. يجب طلب الإذن ACCESS_COARSE_LOCATION في أي وقت تطلب فيه ACCESS_FINE_LOCATION.
- فلاتر الأهداف: إذا كان تطبيقك يحتوي على أنشطة أو خدمات أو أجهزة استقبال بث تستخدم فلاتر الأهداف، عليك الإفصاح بشكل صريح عن سمة android:exported لهذه المكونات.
- الإسبات: قد يتم إدخال التطبيقات في وضع الإسبات إذا لم يتم استخدامها على مدار فترة زمنية. في وضع الإسبات، تتم إعادة ضبط أذونات تشغيل التطبيق وذاكرة التخزين المؤقت، ولا يمكنك تنفيذ المهام أو التنبيهات. يمكنك التحقق من حالة إسبات تطبيقك.
- قابلية التغيّر في الغرض المعلق: يجب تحديد قابلية التغيّر لكل عنصر من عناصر PendingIntent التي ينشئها تطبيقك.
تجربة المستخدم
- الإشعارات المخصّصة:
لن تستخدم الإشعارات التي تتضمّن مشاهدات المحتوى المخصّص مساحة الإشعارات الكاملة،
بدلاً من ذلك، يطبّق النظام نموذجًا عاديًا. يضمن هذا النموذج أن تكون الإشعارات المخصّصة لها نفس زخرفة الإشعارات الأخرى في جميع الحالات. ويتطابق هذا السلوك تقريبًا مع سلوك
Notification.DecoratedCustomViewStyle
. - تغييرات في التحقُّق من روابط تطبيقات Android: عند استخدام التحقق من روابط تطبيقات Android، احرِص على أن تتضمن فلاتر الأهداف فئة BROWSABLE وتتوافق مع مخطط HTTPS.
الأداء
قيود إطلاق الخدمات التي تعمل في المقدّمة: لاستهداف الإصدار 12 من نظام التشغيل Android أو الإصدارات الأحدث، لا يمكن لتطبيقك بدء الخدمات التي تعمل في المقدّمة أثناء تشغيله في الخلفية، باستثناء بعض الحالات الخاصة. إذا حاول أحد التطبيقات بدء خدمة تعمل في المقدّمة أثناء تشغيله في الخلفية، يحدث استثناء (باستثناء بعض الحالات الخاصة).
يمكنك استخدام WorkManager لجدولة العمل السريع وبدء العمل أثناء تشغيل تطبيقك في الخلفية. لإكمال الإجراءات الحساسة للوقت التي يطلبها المستخدم، ابدأ الخدمات التي تعمل في المقدّمة ضمن تنبيه محدّد.
الإشعارات بشأن قيود الترامبولين: عندما ينقر المستخدمون على الإشعارات، تستجيب بعض التطبيقات عن طريق إطلاق مكوّن تطبيق يبدأ النشاط الذي يراه المستخدم ويتفاعل معه. ويُعرف مكون التطبيق هذا باسم ترامبولين الإشعارات.
يجب ألا تبدأ التطبيقات أنشطة من الخدمات أو أجهزة استقبال البث التي يتم استخدامها كأجهزة تصوير للإشعارات. بعد أن ينقر المستخدم على إشعار أو زر إجراء في الإشعار، لن يتمكّن تطبيقك من الاتصال بـ
startActivity()
داخل خدمة أو في جهاز استقبال البث.
يمكنك عرض المجموعة الكاملة من التغييرات التي تؤثر في التطبيقات التي تستهدف الإصدار 12 من نظام التشغيل Android (المستوى 31 من واجهة برمجة التطبيقات).
نقل البيانات من الإصدارات الأقدم من Android 11 (المستوى 30)
اختَر إصدار Android الذي سيتم نقل البيانات منه:
نقل البيانات إلى Android 5 (المستوى 21 من واجهة برمجة التطبيقات)
يمكنك الاطّلاع على صفحة "تغييرات السلوك" المناسبة لكل إصدار من الإصدارات التالية للتأكّد من أنّ تطبيقك قد أخذ في الاعتبار التغييرات التي تم إدخالها في هذه الإصدارات:
- Android 5.0 (المستوى 21)
- Android 4.4 (المستوى 19).
- Android 4.1.x (المستوى 16 من واجهة برمجة التطبيقات).
تابع من خلال اتّباع التعليمات الواردة في القسم التالي.
نقل البيانات إلى Android 6 (المستوى 23 من واجهة برمجة التطبيقات)
تنطبق الاعتبارات التالية على التطبيقات التي تستهدف الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث من النظام الأساسي:
-
-
ولا يتم منح الأذونات الخطيرة إلا في وقت التشغيل. يجب أن توفر تدفقات واجهة المستخدم الخصائص اللازمة لمنح هذه الأذونات.
-
يجب الحرص على أن يكون تطبيقك جاهزًا للتعامل مع رفض طلبات الأذونات، كلما أمكن ذلك. على سبيل المثال، إذا رفض المستخدم طلبًا للوصول إلى نظام تحديد المواقع العالمي (GPS) في الجهاز، تأكَّد من توفّر طريقة أخرى للمتابعة في تطبيقك.
-
للحصول على قائمة شاملة بالتغييرات التي تم إدخالها على الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات)، يمكنك الاطّلاع على صفحة تغييرات السلوك لهذا الإصدار من النظام الأساسي.
تابع من خلال اتّباع التعليمات الواردة في القسم التالي.
نقل البيانات إلى Android 7 (المستوى 24 من واجهة برمجة التطبيقات)
تنطبق الاعتبارات التالية على التطبيقات التي تستهدف الإصدار 7.0 من نظام التشغيل Android والإصدارات الأحدث من النظام الأساسي:
-
القيلولة وتطبيقات وضع الاستعداد
تصميم يتوافق مع السلوكيات الموضّحة في قسم تحسين القيلولة وتطبيقات وضع الاستعداد، والذي يشمل تغييرات متزايدة تم إدخالها على مستوى العديد من إصدارات الأنظمة الأساسية.
عندما يكون الجهاز في وضع "القيلولة" و"وضع الاستعداد للتطبيق"، يعمل النظام على النحو التالي:
- تقييد الوصول إلى الشبكة
- تأجيل المنبّهات والمزامنة والمهام
- فرض قيود على عمليات البحث باستخدام نظام تحديد المواقع العالمي (GPS) وشبكة Wi-Fi
- لحظر رسائل المراسلة عبر السحابة الإلكترونية من Firebase ذات الأولوية العادية.
-
تغييرات الأذونات
- يحظر النظام الوصول إلى الأدلة الخاصة للتطبيقات.
-
يؤدي عرض معرّف الموارد المنتظم (URI)
file://
خارج تطبيقك إلى تشغيلFileUriExposedException
. إذا كنت بحاجة إلى مشاركة الملفات خارج التطبيق، استخدِمFileProvider
.
-
يمنع النظام الربط بمكتبات غير NDK.
للحصول على قائمة شاملة بالتغييرات التي تم إدخالها على الإصدار Android 7.0 (المستوى 24 لواجهة برمجة التطبيقات)، يمكنك الاطّلاع على صفحة تغييرات السلوك لهذا الإصدار من النظام الأساسي.
تابع من خلال اتّباع التعليمات الواردة في القسم التالي.
نقل البيانات إلى Android 8 (المستوى 26 من واجهة برمجة التطبيقات)
تنطبق الاعتبارات التالية على التطبيقات التي تستهدف الإصدار 8.0 من نظام التشغيل Android والإصدارات الأحدث من النظام الأساسي:
-
حدود التنفيذ في الخلفية
-
يحظر النظام الخدمات على التطبيقات التي لا تعمل في المقدّمة.
-
يقدِّم
startService()
الآن استثناءً عندما يحاول أحد التطبيقات استدعاؤه، بينما يكون استخدامstartService()
محظورًا. -
لبدء الخدمات التي تعمل في المقدّمة، يجب أن يستخدم التطبيق
startForeground()
وstartForegroundService()
. - يجب مراجعة التغييرات التي تم إجراؤها على واجهة برمجة تطبيقات JobScheduler API بعناية، كما هو موثق في صفحة تغييرات السلوك لنظام التشغيل Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات).
- تتطلّب ميزة المراسلة عبر السحابة الإلكترونية من Firebase الإصدار 10.2.1 من حزمة تطوير البرامج (SDK) لخدمات Google Play أو إصدار أحدث.
- عند استخدام المراسلة عبر السحابة الإلكترونية من Firebase، يخضع تسليم الرسائل لحدود التنفيذ في الخلفية. عندما يكون العمل في الخلفية ضروريًا عند استلام الرسالة، مثل تنفيذ مزامنة البيانات في الخلفية، يجب أن يحدِّد تطبيقك المهام من خلال أداة إرسال الوظائف من Firebase أو JobIntentService بدلاً من ذلك. لمزيد من المعلومات، راجِع مستندات "المراسلة عبر السحابة الإلكترونية من Firebase".
-
يقدِّم
-
عمليات البث الضمنية
-
يتم حظر عمليات البث الضمنية. للحصول على معلومات عن التعامل مع الأحداث في الخلفية، يُرجى الاطّلاع على مستندات
JobScheduler
API.
-
يتم حظر عمليات البث الضمنية. للحصول على معلومات عن التعامل مع الأحداث في الخلفية، يُرجى الاطّلاع على مستندات
-
الحدود القصوى المسموح بها للمواقع الجغرافية في الخلفية
-
يمكن للتطبيقات التي تعمل في الخلفية الوصول بشكل محدود إلى بيانات الموقع الجغرافي.
- على الأجهزة التي تتضمن "خدمات Google Play"، استخدِم موفّر الموقع الجغرافي المدمج للحصول على تحديثات دورية للموقع الجغرافي.
-
يمكن للتطبيقات التي تعمل في الخلفية الوصول بشكل محدود إلى بيانات الموقع الجغرافي.
-
يحظر النظام الخدمات على التطبيقات التي لا تعمل في المقدّمة.
-
قنوات الإشعارات
- يجب تحديد خصائص مقاطعة الإشعارات لكل قناة على حدة.
- عليك ضبط إشعارات لقناة كي تظهر الإشعارات.
-
يتوافق هذا الإصدار من النظام الأساسي مع
NotificationCompat.Builder
.
-
الخصوصية
- يتم تحديد ANDROID_ID على مستوى كل مفتاح توقيع تطبيق.
للحصول على قائمة شاملة بالتغييرات التي تم إدخالها على نظام Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يمكنك الاطّلاع على صفحة تغييرات السلوك لهذا الإصدار من النظام الأساسي.
نقل البيانات من Android 8 (API 26) إلى Android 9 (واجهة برمجة التطبيقات 28)
-
إدارة الطاقة
- تفرض حِزم تطبيقات وضع الاستعداد قيودًا جديدة في الخلفية استنادًا إلى التفاعل مع التطبيق، مثل تأجيل المهام والمنبهات والحصص في الرسائل ذات الأولوية العالية.
- تؤدي تحسينات توفير شحن البطارية إلى زيادة القيود على تطبيقات وضع الاستعداد للتطبيقات.
-
إذن الخدمة التي تعمل في المقدّمة
- يجب طلب الإذن العادي
FOREGROUND_SERVICE
(وليس إذن التشغيل)
- يجب طلب الإذن العادي
-
التغييرات على الخصوصية
- وصول محدود إلى أدوات الاستشعار في الخلفية
- تم تقييد الوصول إلى سجلات المكالمات، الآن في مجموعة أذونات
CALL_LOG
. - تم تقييد الوصول إلى أرقام الهواتف، يتطلب
إذن
READ_CALL_LOG
- تم تقييد الوصول إلى معلومات شبكة Wi-Fi
للحصول على قائمة شاملة بالتغييرات التي تم إدخالها على Android 9.0 (المستوى 28 من واجهة برمجة التطبيقات)، يمكنك الاطّلاع على التغييرات المتعلّقة بالسلوك.
نقل البيانات من Android 9 (المستوى 28) إلى Android 10 (المستوى 29 من واجهة برمجة التطبيقات)
-
الإشعارات
بملء الشاشة
-
يجب طلب الإذن العادي
USE_FULL_SCREEN_INTENT
(وليس إذن التشغيل).
-
يجب طلب الإذن العادي
-
يتوافق مع الأجهزة القابلة للطي والأجهزة ذات الشاشات الكبيرة
-
يمكن الآن ضبط أنشطة متعددة في الحالة "مستأنفة" في الوقت نفسه، ولكن تم التركيز على نشاط واحد فقط.
-
يؤثّر هذا التغيير في سلوك
onResume()
وonPause()
. -
مفهوم جديد لدورة الحياة وهو "تم استئناف أعلى مستوى"، والذي يمكن رصده
من خلال الاشتراك في
onTopResumedActivityChanged()
.- يمكن "استئناف أعلى مستوى جديد" لنشاط واحد فقط.
-
يؤثّر هذا التغيير في سلوك
-
عند ضبط
resizeableActivity
علىfalse
، يمكن للتطبيقات أيضًا تحديدminAspectRatio
الذي يعمل تلقائيًا على عرض شاشة عريضة أفقيًا على التطبيق وفقًا لنِسب عرض إلى ارتفاع أضيق.
-
يمكن الآن ضبط أنشطة متعددة في الحالة "مستأنفة" في الوقت نفسه، ولكن تم التركيز على نشاط واحد فقط.
-
التغييرات على الخصوصية
-
التخزين الفرعي
- ويقتصر الوصول إلى وحدة التخزين الخارجية على دليل خاص بالتطبيق فقط وعلى أنواع معيّنة من الوسائط التي أنشأها التطبيق.
-
تم تقييد الوصول إلى الموقع الجغرافي أثناء تشغيل التطبيق في الخلفية،
يتطلّب ذلك إذن
ACCESS_BACKGROUND_LOCATION
. - تم تقييد الوصول إلى المعرّفات غير القابلة لإعادة الضبط، مثل IMEI والرقم التسلسلي.
-
تم تقييد الوصول إلى معلومات النشاط البدني، مثل
عدد خطوات المستخدم، ما يتطلب الحصول على إذن
ACTIVITY_RECOGNITION
. -
تم حظر الوصول إلى بعض واجهات برمجة تطبيقات الاتصال الهاتفي والبلوتوث وشبكة Wi-Fi، ما يتطلّب الحصول على إذن
ACCESS_FINE_LOCATION
. -
وصول محدود إلى إعدادات Wi-Fi
- لم يعُد بإمكان التطبيقات تفعيل شبكة Wi-Fi أو إيقافها مباشرةً، وسيكون عليها إجراء ذلك باستخدام لوحات الإعدادات.
-
القيود المفروضة على بدء الاتصال بشبكة Wi-Fi،
والتي تتطلب استخدام
WifiNetworkSpecifier
أوWifiNetworkSuggestion
.
-
التخزين الفرعي
نقل البيانات من Android 10 (المستوى 29) إلى Android 11 (المستوى 30)
-
الخصوصية
- فرض مساحة التخزين المُفصَّلة : يجب أن تستخدِم التطبيقات نموذج التخزين المحدَّد النطاق الذي يتم فيه حفظ الملفات الخاصة بالتطبيقات والوسائط وأنواع الملفات الأخرى والوصول إليها باستخدام مواقع جغرافية مخصَّصة.
- إعادة ضبط الأذونات تلقائيًا: إذا لم يتفاعل المستخدمون مع تطبيق لبضعة أشهر، سيعيد النظام ضبط أذونات الوصول إلى المعلومات الحساسة للتطبيق تلقائيًا. ومن المفترض ألا يؤثر ذلك على معظم التطبيقات. إذا كان تطبيقك يعمل بشكل أساسي في الخلفية بدون تفاعلات المستخدم، يمكنك أن تطلب من المستخدمين إيقاف إعادة الضبط التلقائي.
- الوصول إلى الموقع الجغرافي في الخلفية: يجب أن تطلب التطبيقات إذن تحديد الموقع الجغرافي في المقدّمة والخلفية بشكل منفصل. لا يمكن منح إذن الوصول إلى الموقع الجغرافي في الخلفية إلا من خلال إعدادات التطبيق بدلاً من مربّعات حوار أذونات التشغيل.
-
مستوى رؤية الحزمة: عندما يطلب أحد التطبيقات
قائمة التطبيقات والخدمات المثبَّتة على الجهاز، تتم فلترة القائمة التي يتم عرضها.
- إذا كنت تستخدم خدمتَي تحويل النص إلى كلام أو التعرّف على الكلام، ستحتاج إلى إضافة عناصر طلبات البحث للخدمات إلى ملف البيان.
-
الأمان
- ملفات "resource.arsc" المضغوطة لم تعُد متوافقة
- يجب الآن استخدام الإصدار 2 من نظام توقيع APK. لأسباب تتعلّق بالتوافق مع الأنظمة القديمة، على المطوّرين أيضًا مواصلة التوقيع باستخدام الإصدار 1 من مخطّط توقيع حزمة APK.
- قيد واجهة غير متوفرة في حزمة SDK لا يُنصَح باستخدام واجهات غير متوفّرة في حزمة SDK للتطبيقات التي تستهدف المستوى 30 من واجهة برمجة التطبيقات، لأنّه تم الآن حظر بعض هذه الواجهات التي لا تتضمّن حزمة SDK. راجِع الواجهات التي لا تستخدم حزمة SDK والمحظورة الآن في نظام التشغيل Android 11 للحصول على قائمة شاملة بالواجهات المحظورة غير المستنِدة إلى حزمة SDK.
للحصول على قائمة شاملة بالتغييرات التي تم إدخالها على نظام Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، يُرجى الاطّلاع على صفحة تغييرات السلوك.
ويمكنك متابعة التحديث إلى واجهة برمجة التطبيقات 31 باتّباع التعليمات الواردة في القسم السابق.
تحديث التطبيقات
أثناء تعديل مستوى واجهة برمجة التطبيقات المستهدَف لتطبيقاتك، ننصحك باعتماد أحدث ميزات النظام الأساسي لتحديث تطبيقاتك ولإرضاء المستخدمين.
- ننصحك باستخدام camX، التي يتوفّر فيها إصدار تجريبي، للاستفادة إلى أقصى حد من استخدام الكاميرا.
- استخدِم مكونات Jetpack لمساعدتك في اتّباع أفضل الممارسات وتجنُّب كتابة الرموز النموذجية وتبسيط المهام المعقّدة كي تتمكّن من التركيز على الرمز الذي يهمّك.
- يمكنك استخدام Kotlin لكتابة تطبيقات أفضل بشكل أسرع وباستخدام رمز أقل.
- وتأكَّد من اتّباع متطلبات الخصوصية وأفضل الممارسات.
- إتاحة المظهر الداكن في تطبيقاتك
- يمكنك إضافة دعم التنقُّل بالإيماءات إلى تطبيقاتك.
- نقل تطبيقك من خدمة "المراسلة عبر السحابة الإلكترونية من Google " (GCM) إلى أحدث إصدار من "المراسلة عبر السحابة الإلكترونية من Firebase".
- الاستفادة من الإدارة المتقدمة للنوافذ.
- دعم نسب عرض إلى ارتفاع أكبر (أكثر من 16:9) للاستفادة من التطورات الحديثة في الأجهزة. تأكد من تغيير حجم التطبيق لملء مساحة الشاشة المتاحة. لا تنصّح إلا بالحد الأقصى لنسبة العرض إلى الارتفاع كحل أخير. للحصول على مزيد من المعلومات حول الحد الأقصى لنِسب العرض إلى الارتفاع، يُرجى الاطّلاع على الإقرار بدعم الشاشة المحظورة.
- يمكنك إضافة إتاحة النوافذ المتعددة لمساعدة تطبيقك في زيادة الإنتاجية وإدارة شاشات العرض المتعددة.
- إذا كانت تجربة التطبيق المصغّرة الرائعة ستؤدي إلى تحسين تجربة المستخدم، يمكنك إضافة إتاحة وظيفة نافذة ضمن النافذة.
- يتم تحسين الأداء لملاءمة الأجهزة التي تتضمّن صورة مقطوعة للشاشة.
- لا تفترض ارتفاع شريط الحالة. بدلاً من ذلك، استخدِم
WindowInsets
وView.OnApplyWindowInsetsListener
. شاهِد هذا الفيديو للحصول على شرح. - لا تفترض أن التطبيق يحتوي على النافذة بأكملها. بدلاً من ذلك، عليك تأكيد
الموقع الجغرافي باستخدام
View.getLocationInWindow()
، وليسView.getLocationOnScreen()
. - عند التعامل مع
MotionEvent
، استخدِمMotionEvent.getX()
وMotionEvent.getY()
، وليسMotionEvent.getRawX()
،MotionEvent.getRawY()
.
التحقّق من حِزم تطوير البرامج (SDK) والمكتبات وتحديثها
تأكَّد من أنّ تبعيات حزمة تطوير البرامج (SDK) التابعة لجهة خارجية تتوافق مع واجهة برمجة التطبيقات 31: ينشرها بعض موفِّري حِزم SDK في بيانهم، بينما يتطلب البعض الآخر تحقيقًا إضافيًا. إذا كنت تستخدم حزمة تطوير برامج (SDK) لا تتوافق مع واجهة برمجة التطبيقات 31، ننصحك بإعطاء الأولوية للعمل مع موفِّر حِزم SDK لحلّ المشكلة.
بالإضافة إلى ذلك، تجدر الإشارة إلى أنّ targetSdkVersion
لتطبيقك أو لعبتك قد يحظر
الوصول إلى مكتبات أنظمة Android الأساسية الخاصة. لمزيد من التفاصيل، يُرجى الاطّلاع على ربط تطبيقات NDK بمكتبات النظام الأساسي.
يجب أيضًا التحقّق من أي قيود قد تكون متوفّرة في إصدار "مكتبة دعم Android" الذي تستخدمه.
وكما هي الحال دائمًا، عليك التأكّد من التوافق بين الإصدار الرئيسي
من مكتبة دعم Android وcompileSdkVersion
في تطبيقك.
ننصحك باختيار جهاز targetSdkVersion
أصغر من أو يساوي الإصدار الرئيسي لمكتبة الدعم. ننصحك بالتحديث إلى آخر إصدار متوافق مع "مكتبة الدعم" للاستفادة من أحدث ميزات التوافق وإصلاح الأخطاء.
اختبار تطبيقك
بعد تحديث مستوى واجهة برمجة التطبيقات لتطبيقك وميزاته حسب الحاجة، عليك اختبار بعض حالات الاستخدام الأساسية. الاقتراحات التالية ليست شاملة، ولكنها تهدف إلى توجيه عملية الاختبار. نقترح اختبار ما يلي:
- أن يجمّع تطبيقك وفق واجهة برمجة التطبيقات 29 بدون أخطاء أو تحذيرات.
- أن تطبيقك يتّبع استراتيجية للحالات التي يرفض فيها المستخدم
طلبات الأذونات ويطلب منه الحصول على أذونات ولإجراء ذلك، اتّبِع الخطوات التالية:
- انتقِل إلى شاشة "معلومات التطبيق" في التطبيق وأوقف كل إذن.
- افتح التطبيق وتأكَّد من عدم حدوث أي أعطال.
- إجراء اختبارات حالة الاستخدام الأساسية والتأكد من طلب الأذونات المطلوبة مرة أخرى.
- يتعامل مع ميزة "القيلولة" مع النتائج المتوقعة وبدون أخطاء.
- باستخدام adb، ضع جهاز الاختبار في Doze أثناء تشغيل تطبيقك.
- اختبار أي حالات استخدام تؤدي إلى ظهور رسائل "المراسلة عبر السحابة الإلكترونية من Firebase".
- اختبِر أيّ حالات استخدام تستخدِم "المنبهات" أو "الوظائف".
- تخلص من أي تبعيات للخدمات التي تعمل في الخلفية.
- اضبط تطبيقك على وضع الاستعداد للتطبيقات
- اختبِر أي حالات استخدام تؤدي إلى ظهور رسائل "المراسلة عبر السحابة الإلكترونية من Firebase".
- يُرجى اختبار أي حالات استخدام تستخدِم المنبّهات.
- باستخدام adb، ضع جهاز الاختبار في Doze أثناء تشغيل تطبيقك.
- التعامل مع الصور / الفيديوهات الجديدة التي يتم التقاطها
- تأكَّد من أنّ تطبيقك
يعالج عمليات البث المشروطة لكلّ من
ACTION_NEW_PICTURE
وACTION_NEW_VIDEO
بشكل صحيح (أي أنّه تم النقل إلى مهام JobScheduler). - تأكَّد من أنّ أي حالات استخدام مهمة تعتمد على هذه الأحداث ستظلّ ناجحة.
- تأكَّد من أنّ تطبيقك
يعالج عمليات البث المشروطة لكلّ من
- معالجة مشاركة الملفات مع التطبيقات الأخرى
- اختبِر أي حالة استخدام تشارك بيانات الملف مع أي تطبيق آخر (حتى تطبيق آخر من مطوّر البرامج نفسه).
- اختبِر المحتوى في التطبيق الآخر ولا يؤدي إلى حدوث أعطال.
معلومات إضافية
تفعيل ميزة تلقّي الرسائل الإلكترونية في Google Play Console كي نتمكّن من إرسال أخبار وإشعارات مهمة إليك من Android وGoogle Play، بما في ذلك النشرة الإخبارية الشهرية للشركاء.