على غرار الإصدارات السابقة، يتضمّن 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). يمكن أن تتعطّل التطبيقات التي تستخدم المؤشرات بشكلٍ غير صحيح، بما في ذلك التطبيقات التي تعدّل البايت الأكثر أهمية، أو قد تواجه مشاكل أخرى. هذا التغيير ضروري لدعم الأجهزة المستقبلية التي تم تفعيل إضافة وضع علامات الذاكرة (MTE) من ARM عليها. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة المؤشرات التي تم وضع علامات عليها.
لإيقاف هذه الميزة، يُرجى الاطّلاع على 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.
تغييرات على واجهة برمجة التطبيقات للإشعارات المؤقتة النصية
بالنسبة إلى التطبيقات التي تستهدف Android 11 أو الإصدارات الأحدث، تظهر الآثار الجانبية التالية للإشعارات المؤقتة النصية:
- تعرض طريقة
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
لمزيد من المعلومات عن إطار التوافق وتفعيل التغييرات أو إيقافها، يُرجى الاطّلاع على مقالة اختبار تغييرات سلوك النظام الأساسي وتصحيح أخطائها في تطبيقك.
تتطلب التطبيقات التي تستهدف Android 11 الآن الإذن المميّز
Manifest.permission.WRITE_APN_SETTINGS
لقراءة قاعدة بيانات أسماء نقاط الوصول (APN) لمزوّد خدمة الاتصالاتأو الوصول إليها. سيؤدي محاولة الوصول إلى قاعدة بيانات أسماء نقاط الوصول بدون هذا الإذن إلى إنشاء استثناء أمني.
تسهيل الاستخدام
الإعلان عن التفاعل مع محرّكات تحويل النص إلى كلام في ملف البيان
بسبب التغييرات التي تم إجراؤها على إمكانية رؤية الحِزمة، تحتاج التطبيقات التي تستهدف Android 11 وتتفاعل مع محرّك تحويل النص إلى كلام (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
لمزيد من المعلومات عن إطار التوافق وتفعيل التغييرات أو إيقافها، يُرجى الاطّلاع على مقالة اختبار تغييرات سلوك النظام الأساسي وتصحيح أخطائها في تطبيقك.
لا يمكن تثبيت التطبيقات التي تستهدف Android 11 (المستوى 30 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث إذا كانت تحتوي على ملف resources.arsc مضغوط أو إذا لم يكن هذا الملف محاذيًا على حدّ 4 بايت. لا يمكن للنظام ربط هذا الملف بالذاكرة إذا كان أي من هذين الشرطين متوفرًا. يجب قراءة جداول الموارد التي لا يمكن ربطها بالذاكرة في مخزن مؤقت في ذاكرة الوصول العشوائي (RAM)، ما يؤدي إلى ضغط غير ضروري على الذاكرة في النظام وزيادة كبيرة في استخدام ذاكرة الوصول العشوائي على الجهاز.
إذا كنت تستخدم سابقًا ملفًا مضغوطًا resources.arsc، جرِّب استراتيجيات بديلة
بدلاً من ذلك، مثل تقليل موارد التطبيق أو استخدام طرق أخرى لـ
تقليل حجم تطبيقك وإخفاء رموزه وتحسينه.
يجب الآن استخدام الإصدار 2 من مخطّط توقيع حزمة APK
يجب الآن توقيع التطبيقات التي تستهدف Android 11 (المستوى 30 من واجهة برمجة التطبيقات) والتي يتم توقيعها حاليًا باستخدام الإصدار 1 من مخطّط توقيع حزمة APK فقط باستخدام الإصدار 2 من مخطّط توقيع حزمة APK أو الإصدارات الأحدث. لا يمكن للمستخدمين تثبيت التطبيقات التي يتم توقيعها باستخدام الإصدار 1 من مخطّط توقيع حزمة APK فقط أو تحديثها على الأجهزة التي تعمل بنظام التشغيل Android 11.
للتحقّق من توقيع تطبيقك باستخدام الإصدار 2 من مخطّط توقيع حزمة APK أو الإصدارات الأحدث، يمكنك استخدام استوديو Android أو أداة apksigner على سطر الأوامر.
Firebase
Firebase JobDispatcher وGCMNetworkManager
إذا كان تطبيقك يستهدف المستوى 30 من واجهة برمجة التطبيقات أو المستويات الأحدث، يتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات في Firebase JobDispatcher و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
لمزيد من المعلومات عن إطار التوافق وتفعيل التغييرات أو إيقافها، يُرجى الاطّلاع على مقالة اختبار تغييرات سلوك النظام الأساسي وتصحيح أخطائها في تطبيقك.
بالنسبة إلى التطبيقات التي تستهدف Android 11 (المستوى 30 من واجهة برمجة التطبيقات)، يتم الآن إجراء معاودة اتصال بـ
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
باستخدام مفتاح null في كل مرة يتم فيها استدعاء
Editor.clear.
قيود على الواجهات غير المتوفّرة في حزمة SDK
يتضمّن Android 11 قوائم محدَّثة بالواجهات غير المتوفّرة في حزمة SDK والمحظورة استنادًا إلى التعاون مع مطوّري Android وأحدث الاختبارات الداخلية. نحرص على توفير بدائل عامة كلما أمكن ذلك قبل فرض قيود على الواجهات غير المتوفّرة في حزمة SDK.
إذا كان تطبيقك لا يستهدف Android 11، قد لا تؤثّر بعض هذه التغييرات فيك على الفور. ومع ذلك، على الرغم من أنّه يمكنك حاليًا استخدام بعض الواجهات غير المتوفّرة في حزمة SDK (استنادًا إلى مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، فإنّ استخدام أي طريقة أو حقل غير متوفّر في حزمة SDK يحمل دائمًا خطرًا كبيرًا بتعطُّل تطبيقك.
إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفّرة في حزمة SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك البدء في التخطيط لنقل البيانات إلى بدائل حزمة SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لاستخدام واجهات غير متوفّرة في حزمة SDK. إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفّرة في حزمة SDK لميزة في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.
لمزيد من المعلومات عن التغييرات في هذا الإصدار من Android، يُرجى الاطّلاع على مقالة تعديلات على القيود المفروضة على الواجهات غير المتوفّرة في حزمة SDK في Android 11. لمزيد من المعلومات عن الواجهات غير المتوفّرة في حزمة SDK بشكلٍ عام، يُرجى الاطّلاع على مقالة القيود المفروضة على الواجهات غير المتوفّرة في حزمة SDK.