مثل الإصدارات السابقة، يتضمّن Android 11 تغييرات في السلوك قد تؤثر في تطبيقك. تنطبق تغييرات السلوك التالية حصريًا على التطبيقات التي تستهدف Android 11 أو الإصدارات الأحدث. إذا كان تطبيقك يضبط
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_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
لمزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يُرجى الاطّلاع على اختبار وتصحيح أخطاء تغييرات سلوك النظام الأساسي في تطبيقك.
تحتوي مؤشرات الذاكرة الديناميكية الآن على علامة غير صفرية في البايت الأكثر أهمية (MSB). قد تتعطّل الآن التطبيقات التي تستخدم المؤشرات بشكل غير صحيح، بما في ذلك التطبيقات التي تعدّل البت الأكثر أهمية، أو قد تواجه مشاكل أخرى. هذا التغيير ضروري لإتاحة الأجهزة المستقبلية التي تم تفعيل ميزة Memory Tagging Extension (MTE) من ARM فيها. لمزيد من المعلومات، يُرجى الاطّلاع على المؤشرات المُصنَّفة.
لإيقاف هذه الميزة، يُرجى الاطّلاع على مستندات بيان allowNativeHeapPointerTagging.
تعديلات على الإشعارات المؤقتة
تم حظر الإشعارات المؤقتة المخصّصة من الخلفية
لأسباب تتعلق بالأمان وللحفاظ على تجربة مستخدم جيدة، يحظر النظام
رسائل الإعلام المؤقتة التي تحتوي على طرق عرض مخصّصة إذا تم إرسال هذه الرسائل من الخلفية بواسطة
تطبيق يستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث. يُرجى العِلم أنّ إشعارات Toast النصية لا تزال مسموحًا بها، وهي إشعارات Toast يتم إنشاؤها باستخدام Toast.makeText() ولا تستدعي setView().
إذا حاول تطبيقك نشر إشعار مؤقت يحتوي على طريقة عرض مخصّصة من الخلفية، لن يعرض النظام الرسالة للمستخدم. بدلاً من ذلك، يسجّل النظام الرسالة التالية في logcat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
عمليات معاودة الاتصال المتعلقة برسائل Toast
إذا أردت تلقّي إشعار عند ظهور رسالة مؤقتة (نصية أو مخصّصة) أو اختفائها، استخدِم طريقة addCallback() التي تمت إضافتها في Android 11.
تغييرات في واجهة برمجة التطبيقات الخاصة برسائل الإشعار المؤقتة النصية
بالنسبة إلى التطبيقات التي تستهدف الإصدار 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_NAMEadb 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_NAMEadb 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_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
إذا كان هناك أكثر من تطبيق كاميرا واحد مثبَّت مسبقًا على النظام، يعرض النظام مربّع حوار للمستخدم لاختيار تطبيق. إذا أردت أن يستخدم تطبيقك تطبيق كاميرا محدّدًا تابعًا لجهة خارجية لالتقاط الصور أو الفيديوهات نيابةً عنه، يمكنك توضيح هذه الأهداف من خلال ضبط اسم حزمة أو مكوّن للطلب.
حزم التطبيقات وتثبيتها
ملفات الموارد المضغوطة
تفاصيل التغيير
تغيير الاسم: RESOURCES_ARSC_COMPRESSED
رقم تعريف التغيير: 132742131
كيفية التبديل
أثناء اختبار توافق تطبيقك مع Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
لمزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يُرجى الاطّلاع على اختبار وتصحيح أخطاء تغييرات سلوك النظام الأساسي في تطبيقك.
لا يمكن تثبيت التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 30) أو الإصدارات الأحدث إذا كانت تحتوي على ملف resources.arsc مضغوط أو إذا لم يكن هذا الملف محاذيًا لحدود 4 بايت. لا يمكن للنظام تعيين هذا الملف في الذاكرة في حال توفّر أي من
هذه الشروط. يجب قراءة جداول الموارد التي لا يمكن ربطها بالذاكرة في مخزن مؤقت في ذاكرة الوصول العشوائي (RAM)، ما يؤدي إلى ضغط غير ضروري على الذاكرة في النظام وزيادة استخدام ذاكرة الوصول العشوائي (RAM) على الجهاز بشكل كبير.
إذا كنت تستخدم في السابق ملف resources.arsc مضغوطًا، جرِّب استراتيجيات بديلة، مثل تقليص موارد التطبيق أو طرق أخرى لتقليص تطبيقك وإخفاء رمزه البرمجي وتحسينه.
الإصدار 2 من مخطّط توقيع حِزم APK مطلوب الآن
التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) والموقَّعة حاليًا باستخدام الإصدار الأول من مخطّط توقيع حِزم APK فقط، يجب الآن توقيعها أيضًا باستخدام الإصدار الثاني من مخطّط توقيع حِزم APK أو إصدار أحدث. لا يمكن للمستخدمين تثبيت أو تحديث التطبيقات التي تم توقيعها فقط باستخدام الإصدار الأول من نظام توقيع APK على الأجهزة التي تعمل بنظام التشغيل Android 11.
للتحقّق من أنّ تطبيقك موقَّع باستخدام الإصدار 2 أو إصدار أحدث من مخطّط توقيع حِزم APK،
يمكنك استخدام استوديو Android
أو أداة apksigner في سطر الأوامر.
Firebase
Firebase JobDispatcher وGCMNetworkManager
إذا كان تطبيقك يستهدف المستوى 30 من واجهة برمجة التطبيقات أو مستوى أحدث، سيتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات في مكتبة FirebaseJobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بنظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. للحصول على معلومات حول نقل البيانات، يُرجى الاطّلاع على نقل البيانات من Firebase JobDispatcher إلى WorkManager و نقل البيانات من GCMNetworkManager إلى WorkManager.
التعرُّف على الكلام
بسبب التغييرات التي طرأت على ظهور الحزمة، تحتاج التطبيقات التي تستهدف نظام التشغيل Android 11 وتتفاعل مع خدمة التعرّف على الكلام إلى إضافة عنصر <queries> التالي إلى ملفات البيان الخاصة بها:
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
تغييرات في عمليات معاودة الاتصال لـ OnSharedPreferenceChangeListener
تفاصيل التغيير
تغيير الاسم: CALLBACK_ON_CLEAR_CHANGE
رقم تعريف التغيير: 119147584
كيفية التبديل
أثناء اختبار توافق تطبيقك مع Android 11، يمكنك تفعيل هذا التغيير أو إيقافه باستخدام أوامر ADB التالية:
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
لمزيد من المعلومات حول إطار عمل التوافق وتبديل التغييرات، يُرجى الاطّلاع على اختبار وتصحيح أخطاء تغييرات سلوك النظام الأساسي في تطبيقك.
بالنسبة إلى التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات)، يتم الآن إجراء معاودة اتصال إلى
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
باستخدام مفتاح null كلما تم استدعاء
Editor.clear.
القيود المفروضة على الواجهات غير التابعة لحزمة تطوير البرامج (SDK)
يتضمّن Android 11 قوائم معدَّلة لواجهات غير تابعة لحزمة تطوير البرامج (SDK) ومحظورة استنادًا إلى التعاون مع مطوّري برامج Android وأحدث الاختبارات الداخلية. نحرص على توفير بدائل عامة قبل فرض قيود على الواجهات غير المتوفّرة في حزمة SDK كلما أمكن ذلك.
إذا كان تطبيقك لا يستهدف الإصدار 11 من نظام التشغيل Android، قد لا تؤثر بعض هذه التغييرات فيك على الفور. ومع ذلك، على الرغم من أنّه يمكنك حاليًا استخدام بعض الواجهات غير المتوفّرة في حزمة SDK (وفقًا لمستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، فإنّ استخدام أي طريقة أو حقل غير متوفّر في حزمة SDK ينطوي دائمًا على مخاطرة كبيرة بتعطُّل تطبيقك.
إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفّرة في حزمة SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك البدء في التخطيط للانتقال إلى بدائل حزمة SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لاستخدام واجهات غير حِزم تطوير البرامج (SDK). إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفّرة في حزمة SDK لميزة في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.
لمزيد من المعلومات حول التغييرات في هذا الإصدار من Android، يمكنك الاطّلاع على التعديلات على القيود المفروضة على الواجهات غير المضمّنة في حزمة تطوير البرامج (SDK) في Android 11. لمزيد من المعلومات حول الواجهات غير المتوفّرة في حزمة SDK بشكل عام، يُرجى الاطّلاع على القيود المفروضة على الواجهات غير المتوفّرة في حزمة SDK.