مثل الإصدارات السابقة، يتضمّن 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
طلبات معاودة الاتصال في Toast
إذا كنت تريد تلقّي إشعار عند ظهور إشعار عابر (نصي أو مخصّص) أو اختفائه،
استخدِم الأسلوب
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.