كما هو الحال في الإصدارات السابقة، يتضمّن نظام التشغيل Android 11 تغييرات في السلوك قد تؤثر في تطبيقك، مع العلم بأنّ التغييرات التالية المتعلّقة بالسلوك تنطبق حصريًا على التطبيقات
التي تستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث. في حال ضبط تطبيقك السمة targetSdkVersion
على القيمة 30
، عليك تعديله للتوافق مع هذه السلوكيات بشكل صحيح، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر في جميع التطبيقات التي تعمل بنظام التشغيل Android 11.
الخصوصية
يقدّم Android 11 تغييرات وقيودًا لتحسين خصوصية المستخدم، بما في ذلك ما يلي:
- فرض مساحة التخزين المحدّدة النطاق: يقتصر الوصول إلى أدلة مساحة التخزين الخارجية على دليل خاص بالتطبيق وأنواع محدَّدة من الوسائط التي أنشأها التطبيق.
- إعادة الضبط التلقائي للأذونات: إذا لم يتفاعل المستخدمون مع تطبيق لبضعة أشهر، يعيد النظام ضبط أذونات الوصول إلى المعلومات الحساسة للتطبيق تلقائيًا.
- الوصول إلى الموقع الجغرافي في الخلفية: يجب توجيه المستخدمين إلى إعدادات النظام لمنح التطبيقات الإذن بتحديد الموقع الجغرافي في الخلفية.
- إذن الوصول إلى الحزمة: عندما يطلب أحد التطبيقات الاطّلاع على قائمة التطبيقات المثبَّتة على الجهاز، تتم فلترة القائمة التي يتم عرضها.
لمزيد من المعلومات، اطّلِع على صفحة الخصوصية.
الأمان
وضع علامات على عناصر متعددة
تغيير التفاصيل
تغيير الاسم: NATIVE_HEAP_POINTER_TAGGING
رقم تعريف التغيير: 135754954
كيفية التبديل
أثناء اختبار توافق تطبيقك مع نظام التشغيل Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
للحصول على مزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يمكنك الاطّلاع على اختبار تغييرات سلوك النظام الأساسي وتصحيحها في تطبيقك.
تحتوي المؤشرات المجمّعة الآن على علامة غير صفرية في البايت الأكثر أهمية (MSB). يمكن للتطبيقات التي تستخدم المؤشرات بشكل غير صحيح، بما في ذلك تلك التي تعدِّل MSB، أن تتعطّل أو تواجه مشاكل أخرى. يُعدّ هذا التغيير ضروريًا للتوافق مع الأجهزة المستقبلية التي تم تفعيل إضافة وضع علامات الذاكرة ARM (MTE) لها. للحصول على المزيد من المعلومات، يمكنك الاطّلاع على المؤشرات التي تم وضع علامات عليها.
لإيقاف هذه الميزة، يُرجى الاطّلاع على
مستندات البيان allowNativeHeapPointerTagging
.
تعديلات على الخبز المحمّص
يتم حظر الإشعارات المخصّصة من الخلفية.
لأسباب تتعلّق بالأمان وللحفاظ على تقديم تجربة جيدة للمستخدم، يحظر النظام
الإشعارات المنقّحة التي تتضمّن طرق عرض مخصّصة في حال تم إرسال هذه الإشعارات من الخلفية
من خلال تطبيق يستهدف نظام التشغيل Android 11 أو الإصدارات الأحدث. تجدر الإشارة إلى أنّه لا يزال يُسمح باستخدام الإشعارات النصية، وهي أنواع الخبز المحمّص التي يتم إنشاؤها باستخدام Toast.makeText()
، ولا تتطلب طلب setView()
.
وإذا حاول تطبيقك نشر إشعار منبثق يحتوي على عرض مخصّص من الخلفية على أي حال، لا يعرض النظام الرسالة للمستخدم. بدلاً من ذلك، يسجل النظام الرسالة التالية في Logcat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
إعلامات معاودة الاتصال
إذا كنت تريد تلقّي إشعار عند ظهور أو اختفاء نخب (نص أو مخصّص)،
استخدِم طريقة
addCallback()
التي تمت إضافتها في نظام التشغيل Android 11.
تغييرات في واجهة برمجة تطبيقات Text Toast
في التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، تظهر الآثار الجانبية التالية على الإشعارات النصية:
- تعرض طريقة
getView()
null
. - لا تعكس القيم المعروضة للطرق التالية القيم الفعلية، لذا يجب عدم الاعتماد عليها في تطبيقك:
- الطرق التالية لا تتطلّب العمليات، لذا يجب ألّا يستخدمها التطبيق:
إمكانية الاتصال
تم تقييد الإذن بالاطّلاع على قاعدة بيانات APN
تغيير التفاصيل
تغيير الاسم: APN_READING_PERMISSION_CHANGE_ID
رقم تعريف التغيير: 124107808
كيفية التبديل
أثناء اختبار توافق تطبيقك مع نظام التشغيل Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
للحصول على مزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يمكنك الاطّلاع على اختبار تغييرات سلوك النظام الأساسي وتصحيحها في تطبيقك.
إنّ التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android تتطلّب الآن الحصول على
Manifest.permission.WRITE_APN_SETTINGS
الإذن المميّز لقراءة قاعدة بيانات اسم نقطة الوصول (APN)
لمقدِّم الخدمة أو الوصول إليها. تؤدي محاولة الوصول إلى قاعدة بيانات APN بدون هذا الإذن
إلى إنشاء استثناء أمان.
تسهيل الاستخدام
بيان التفاعل مع محرّكات تحويل النص إلى كلام في ملف البيان
بسبب التغييرات في مستوى رؤية الحزمة، على التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android وتتفاعل مع محرّك تحويل النص إلى كلام (TTS) إضافة عنصر <queries>
التالي إلى ملفات البيان:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
الإفصاح عن استخدام زر تسهيل الاستخدام في ملف البيانات الوصفية
تغيير التفاصيل
تغيير الاسم: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
رقم تعريف التغيير: 136293963
كيفية التبديل
أثناء اختبار توافق تطبيقك مع نظام التشغيل Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
للحصول على مزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يمكنك الاطّلاع على اختبار تغييرات سلوك النظام الأساسي وتصحيحها في تطبيقك.
بدءًا من نظام التشغيل Android 11، لا يمكن لخدمة تسهيل الاستخدام التابعة لك إصدار بيان وقت تشغيل بأنّها ارتباط بها زرّ تسهيل الاستخدام في النظام. في حال إلحاق AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
بالسمة flags
في عنصر AccessibilityServiceInfo
، لن يمرِّر إطار العمل أحداث معاودة الاتصال بشأن زر تسهيل الاستخدام إلى خدمتك.
لتلقّي أحداث معاودة الاتصال حول تسهيل الاستخدام ضمن خدمة تسهيل الاستخدام، استخدِم ملف البيانات الوصفية لخدمة تسهيل الاستخدام من أجل توضيح ارتباط خدمتك بزر أدوات تسهيل الاستخدام. أدرِج القيمة flagRequestAccessibilityButton
في تعريفك للسمة
accessibilityFlags
. من الأماكن الشائعة لملف البيانات الوصفية الخاصة بخدمة تسهيل الاستخدام res/raw/accessibilityservice.xml
.
الكاميرا
تتطلب إجراءات الغرض من الوسائط استخدام الكاميرا التلقائية للنظام.
بدءًا من نظام التشغيل Android 11، يمكن لتطبيقات كاميرا النظام المثبَّتة مسبقًا فقط الاستجابة لإجراءات الأهداف التالية:
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
إذا توفّر أكثر من تطبيق واحد مثبَّت مسبقًا لكاميرا النظام، سيقدّم النظام مربّع حوار للمستخدم ليختار أحد التطبيقات. وإذا أردت أن يستخدم تطبيقك تطبيق كاميرا محدّد تابعًا لجهة خارجية لالتقاط الصور أو الفيديوهات نيابةً عنه، يمكنك توضيح هذه الأغراض من خلال تحديد اسم حزمة أو مكوّن للهدف.
إنشاء حزمة للتطبيق وتثبيتها
ملفات الموارد المضغوطة
تغيير التفاصيل
تغيير الاسم: RESOURCES_ARSC_COMPRESSED
رقم تعريف التغيير: 132742131
كيفية التبديل
أثناء اختبار توافق تطبيقك مع نظام التشغيل Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
للحصول على مزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يمكنك الاطّلاع على اختبار تغييرات سلوك النظام الأساسي وتصحيحها في تطبيقك.
لا يمكن تثبيت التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث إذا كانت
تحتوي على ملف resources.arsc
مضغوط أو إذا لم تتم محاذاة هذا الملف
على حدود 4 بايت. لا يمكن للنظام تعيين هذا الملف من خلال الذاكرة في حال وجود أيٌّ من هذه الشروط. يجب قراءة جداول الموارد التي لا يمكن تعيينها للذاكرة في مخزن مؤقت في ذاكرة الوصول العشوائي، مما يؤدي إلى ضغط غير ضروري في الذاكرة على النظام وزيادة استخدام ذاكرة الوصول العشوائي (RAM) بشكل كبير على الجهاز.
إذا كنت تستخدم في السابق ملف resources.arsc
مضغوطًا، جرِّب استراتيجيات بديلة، مثل تقليص موارد التطبيق أو طرق أخرى لتصغير حجم تطبيقك وتشويشه وتحسينه.
يجب الآن استخدام الإصدار 2 من مخطّط توقيع حزمة APK
بالنسبة إلى التطبيقات التي تستهدِف Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والتي لا يتم توقيعها حاليًا إلا باستخدام الإصدار 1 من مخطّط توقيع APK، يجب أن تكون هذه التطبيقات تحمل توقيعها الآن باستخدام الإصدار 2 من مخطّط توقيع APK أو الإصدارات الأحدث. لا يمكن للمستخدمين تثبيت أو تحديث التطبيقات التي تم توقيعها فقط باستخدام الإصدار 1 من مخطّط توقيع حزمة APK على الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android.
للتحقّق من توقيع تطبيقك باستخدام الإصدار 2 من مخطّط توقيع حزمة APK أو إصدار أحدث،
يمكنك استخدام استوديو Android
أو أداة apksigner
في سطر الأوامر.
Firebase
Firebase JobDispatcher وGCMNetworkManager
إذا كان تطبيقك يستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات، يتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات JobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. للحصول على معلومات عن عملية النقل، يُرجى الاطّلاع على نقل البيانات من Firebase JobDispatcher إلى WorkManager ونقل البيانات من GCMNetworkManager إلى WorkManager.
التعرّف على الكلام
بسبب التغييرات في مستوى رؤية الحزمة، على التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android وتتفاعل مع خدمة التعرّف على الكلام إضافة العنصر <queries>
التالي إلى ملفات البيان:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
تغييرات معاودة الاتصال لـ OnSharedPreferencesChangeListener
تغيير التفاصيل
تغيير الاسم: CALLBACK_ON_CLEAR_CHANGE
رقم تعريف التغيير: 119147584
كيفية التبديل
أثناء اختبار توافق تطبيقك مع نظام التشغيل Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
للحصول على مزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يمكنك الاطّلاع على اختبار تغييرات سلوك النظام الأساسي وتصحيحها في تطبيقك.
بالنسبة إلى التطبيقات التي تستهدف Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، يتم الآن معاودة الاتصال إلى
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
باستخدام مفتاح null
عند طلب الرمز Editor.clear
.
قيود الواجهة غير المتوفرة في حزمة تطوير البرامج (SDK)
يتضمّن الإصدار 11 من نظام Android قوائم معدَّلة للواجهات المفروض عليها قيود غير المتوافقة مع حزمة SDK، وذلك استنادًا إلى التعاون مع مطوّري تطبيقات Android وأحدث الاختبارات الداخلية. كلّما أمكن، نحرص على توفُّر بدائل عامة قبل حظر الواجهات التي لا تستخدم حزمة SDK.
إذا كان تطبيقك لا يستهدف الإصدار 11 من نظام التشغيل Android، قد لا تؤثر بعض هذه التغييرات في تطبيقك على الفور. ومع ذلك، على الرغم من أنّه يمكنك حاليًا استخدام بعض الواجهات غير المتوفّرة في حزمة SDK (بناءً على مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، قد يؤدي استخدام أي طريقة أو حقل غير تلك المتوفّرة في حزمة SDK دائمًا إلى تعطُّل تطبيقك.
إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفّرة في SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك بدء التخطيط للنقل إلى بدائل حزمة SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لاستخدام واجهات غير متوفّرة في حزمة SDK. إذا لم تتمكن من العثور على بديل لاستخدام واجهة غير متوفرة في حزمة SDK لميزة في تطبيقك، فعليك طلب واجهة برمجة تطبيقات عامة جديدة.
لمزيد من المعلومات حول التغييرات في هذا الإصدار من نظام التشغيل Android، يمكنك الاطّلاع على تعديلات على القيود المفروضة على الواجهة غير المتوفّرة في حزمة تطوير البرامج (SDK) في نظام التشغيل Android 11. لمعرفة المزيد من المعلومات حول الواجهات التي لا تستخدم حزمة SDK بوجه عام، يمكنك الاطّلاع على القيود المفروضة على الواجهات غير المتوفرة في حزمة SDK.