مثل الإصدارات السابقة، يتضمّن 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، قد تتعطل الآن أو تواجه مشاكل أخرى. وهذا التغيير ضروري كي يتوافق مع الأجهزة المستقبلية مع تفعيل إضافة وضع علامات الذاكرة (MTE) التي تتضمّن معالجات ARM. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة المؤشرات المُشار إليها.
لإيقاف هذه الميزة، يُرجى الاطّلاع على مستندات بيان التطبيق allowNativeHeapPointerTagging
.
التعديلات على الإشعارات المحمصة
يتم حظر الإشعارات المنبثقة المخصّصة من الخلفية.
لأسباب تتعلق بالأمان والحفاظ على تجربة مستخدم جيدة، يحظر النظام
الرسائل المنبثقة التي تحتوي على طرق عرض مخصّصة إذا تم إرسال هذه الرسائل المنبثقة من الخلفية من قِبل
تطبيق يستهدف الإصدار 11 من نظام التشغيل Android أو إصدارًا أحدث. يُرجى العلم أنّه لا يزال مسموحًا باستخدام مربّعات الرسائل المنبثقة النصية، وهي مربّعات يتم إنشاؤها باستخدام Toast.makeText()
ولا تستدعي setView()
.
إذا حاول تطبيقك نشر إشعار عائم يحتوي على عرض مخصّص من الخلفية، لن يعرض النظام الرسالة للمستخدم. بدلاً من ذلك، يسجِّل النظام الرسالة التالية في logcat:
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
استدعاءات نخب
إذا أردت تلقّي إشعارات عند ظهور إشعار منبثق (نص أو مخصّص) أو اختفائه،
استخدِم الطريقة
addCallback()
التي تمت إضافتها في Android 11.
تغييرات في Text toast API
تظهر التطبيقات التي تستهدف الإصدار 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
لمزيد من المعلومات عن إطار عمل التوافق وتغييرات التبديل، يُرجى الاطّلاع على مقالة اختبار التغييرات في سلوك النظام الأساسي وتصحيح أخطائها في تطبيقك.
اعتبارًا من الإصدار 11 من Android، لا يمكن لخدمة تسهيل الاستخدام تقديم
بيان وقت التشغيل الذي يشير إلى أنّها مرتبطة بزر تسهيل الاستخدام في النظام. إذا عمِدت إلى
إلحاق AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
بخاصية
flags
لعنصر AccessibilityServiceInfo
، لن يُرسِل إطار العمل
أحداث الاستدعاء لزر تسهيل الاستخدام إلى خدمتك.
لتلقّي أحداث الاستدعاء المتعلّقة بتسهيل الاستخدام في خدمة تسهيل الاستخدام، استخدِم
ملف البيانات الوصفية لخدمة تسهيل الاستخدام للإشارة إلى ارتباط خدمتك
بزر تسهيل الاستخدام. أدرِج قيمة flagRequestAccessibilityButton
في
تعريفك لسمة
accessibilityFlags
. من الأماكن الشائعة لملف البيانات الوصفية لخدمة تسهيل الاستخدام هو
res/raw/accessibilityservice.xml
.
الكاميرا
تتطلّب إجراءات نية الوسائط استخدام الكاميرا التلقائية للنظام.
بدءًا من الإصدار 11 من نظام التشغيل Android، يمكن فقط لتطبيقات كاميرا النظام المثبَّتة مسبقًا الاستجابة لإجراءات النية التالية:
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 (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث إذا كانت
تحتوي على ملف resources.arsc
مضغوط أو إذا لم يكن هذا الملف مُحاذاً
على حدود 4 بايت. ولا يمكن للنظام تعيين هذا الملف للذاكرة في حالة وجود أي من هذه الشروط. يجب قراءة جداول الموارد التي لا يمكن ربطها بالذاكرة في ملف تخزين مؤقت في ذاكرة الوصول العشوائي (RAM)، ما يؤدي إلى زيادة غير ضرورية في الضغط على الذاكرة في النظام وزيادة كبيرة في استخدام ذاكرة الوصول العشوائي على الجهاز.
إذا كنت تستخدم في السابق ملف resources.arsc
مضغوطًا، جرِّب اتّباع استراتيجية بديلة، مثل تصغير موارد
التطبيق أو طرق أخرى لتصغير تطبيقك وتشفيره وتحسينه.
الإصدار 2 من مخطّط توقيع حزمة APK مطلوب الآن
بالنسبة إلى التطبيقات التي تستهدف الإصدار Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والتي يتم توقيعها حاليًا باستخدام نظام توقيع APK v1 فقط، يجب الآن توقيعها أيضًا باستخدام نظام توقيع APK v2 أو إصدار أحدث. لا يمكن للمستخدمين تثبيت التطبيقات أو تحديثها التي تم توقيعها باستخدام الإصدار 1 من "نظام توقيع APK" فقط على الأجهزة التي تعمل بنظام التشغيل Android 11.
للتأكّد من أنّ تطبيقك موقَّع باستخدام الإصدار 2 من مخطّط توقيع حِزم APK أو إصدار أحدث،
يمكنك استخدام Android Studio،
أو أداة apksigner
في سطر الأوامر.
Firebase
Firebase JobDispatcher وGCMNetworkManager
إذا كان تطبيقك يستهدف المستوى 30 أو أعلى من واجهة برمجة التطبيقات، سيتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات في Firebase JobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بنظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. للحصول على معلومات عن نقل البيانات، يُرجى الاطّلاع على مقالتَي نقل البيانات من Firebase JobDispatcher إلى WorkManager ونقل البيانات من GCMNetworkManager إلى WorkManager.
التعرّف على الكلام
بسبب التغييرات التي طرأت على إذن الوصول إلى
الحزمة، على التطبيقات التي تستهدف
الإصدار 11 من نظام التشغيل Android وتتفاعل مع خدمة التعرّف على الكلام
إضافة عنصر <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_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
لمزيد من المعلومات عن إطار عمل التوافق وتغييرات التبديل، يُرجى الاطّلاع على مقالة اختبار التغييرات في سلوك النظام الأساسي وتصحيح أخطائها في تطبيقك.
بالنسبة إلى التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات)، عند استدعاء دالة
Editor.clear
، يتم الآن إجراء ردّ اتصال لدالة
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
باستخدام مفتاح null
.
قيود الواجهة غير المتوفرة في حزمة SDK
يتضمّن الإصدار 11 من Android قوائم معدَّلة للواجهات غير المتوافقة مع حِزم تطوير البرامج (SDK) والتي تم حظرها استنادًا إلى التعاون مع مطوّري تطبيقات Android وأحدث الاختبار الداخلي. نحرص كلما أمكن ذلك على توفير بدائل عامة قبل حظر الواجهات غير المستندة إلى حزمة SDK.
إذا كان تطبيقك لا يستهدف الإصدار 11 من نظام التشغيل Android، قد لا تسري بعض هذه التغييرات عليك على الفور. ومع ذلك، يمكنك حاليًا استخدام بعض الواجهات التي لا تتوفّر في حزمة SDK (اعتمادًا على مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، إلا أنّ استخدام أي حقل أو طريقة غير متوفّرة في حزمة SDK يؤدي دائمًا إلى تعطّل تطبيقك.
إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفرة في حزمة SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفرة في حزمة SDK، عليك البدء في التخطيط لنقل البيانات إلى بدائل حِزم SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لاستخدام واجهات غير متوفرة في حزمة SDK. إذا لم تتمكّن من العثور على بديل لاستخدام واجهة غير متوفرة في حزمة تطوير البرامج (SDK) لإحدى الميزات في تطبيقك، عليك طلب واجهة برمجة تطبيقات عامة جديدة.
للاطّلاع على مزيد من المعلومات عن التغييرات في هذا الإصدار من Android، اطّلِع على التعديلات على قيود واجهات غير حزمة SDK في Android 11. للاطّلاع على مزيد من المعلومات حول الواجهات غير المتوفّرة في حزمة SDK بشكل عام، اطّلِع على القيود المفروضة على الواجهات غير المتوفّرة في حزمة SDK.