تغييرات السلوك: جميع التطبيقات

يتضمّن نظام Android 11 الأساسي تغييرات على السلوك قد تؤثر في تطبيقك، وتسري تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على Android 11، بغض النظر عن targetSdkVersion. يجب اختبار تطبيقك ثم تعديله حسب الحاجة لإتاحة هذه التعديلات بشكل صحيح، حيثما ينطبق ذلك.

احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android.

الخصوصية

يقدّم Android 11 تغييرات وقيودًا لتحسين خصوصية المستخدمين، بما في ذلك ما يلي:

  • أذونات لمرة واحدة: يمنح المستخدمين خيار منح المزيد من أذونات الوصول المؤقت إلى أذونات الموقع الجغرافي والميكروفون والكاميرا.
  • إذن الوصول إلى مربّع حوار الأذونات: يشير الرفض المتكرّرة للإذن إلى "عدم السؤال مرّة أخرى".
  • تدقيق الوصول إلى البيانات: يمكنك الاطّلاع على معلومات عن أماكن وصول تطبيقك إلى البيانات الخاصة، سواء في الرمز البرمجي للتطبيق أو في رمز المكتبات التابعة.
  • أذونات نافذة تنبيه النظام: يتم منح فئات معيّنة من التطبيقات إذن SYSTEM_ALERT_WINDOW تلقائيًا عند الطلب. بالإضافة إلى ذلك، إنّ الأغراض التي تتضمّن إجراء هدف ACTION_MANAGE_OVERLAY_PERMISSION تجلب المستخدمين دائمًا إلى الشاشة في إعدادات النظام.
  • معرّفات شريحة SIM الدائمة: في نظام التشغيل Android 11 والإصدارات الأحدث، يتم حظر الوصول إلى معرّفات ICCID غير القابلة لإعادة الضبط من خلال الإجراء getIccId(). تُرجع الطريقة سلسلة فارغة وغير فارغة. لتحديد شريحة SIM مثبتة على الجهاز بشكل فريد، استخدِم الطريقة getSubscriptionId() بدلاً من ذلك. يوفّر معرّف الاشتراك قيمة فهرسة (تبدأ من 1) لتحديد شرائح SIM التي تم تركيبها بشكل فريد، بما في ذلك الشرائح المادية والإلكترونية. وتكون قيمة هذا المعرّف ثابتة لشريحة SIM معيّنة ما لم تتم إعادة ضبط الجهاز على الإعدادات الأصلية.

لمزيد من المعلومات، اطّلِع على صفحة الخصوصية.

إشعارات التعرّض لفيروس كورونا

يحدِّث Android 11 النظام الأساسي مع وضع نظام إشعارات التعرّض لفيروس كورونا في الاعتبار. يمكن للمستخدمين الآن تشغيل تطبيقات "إشعارات التعرّض لفيروس كورونا" على نظام التشغيل Android 11 بدون الحاجة إلى تفعيل إعدادات الموقع الجغرافي للجهاز. ويُستثنى من ذلك "نظام إشعارات التعرّض لفيروس كورونا" فقط، لأنّه تم تصميمه بطريقة لا تتيح للتطبيقات التي تستخدمها استنتاج الموقع الجغرافي للجهاز من خلال البحث عن بلوتوث.

لحماية خصوصية المستخدم، لا يزال يُحظر على جميع التطبيقات الأخرى إجراء البحث عن طريق البلوتوث ما لم يكن إعداد الموقع الجغرافي للجهاز مفعّلاً وتم منحه المستخدم إذن تحديد الموقع الجغرافي. يمكنك قراءة المزيد من المعلومات في مشاركتنا تحديث بشأن "إشعارات التعرّض لفيروس كورونا".

الأمان

مقابس طبقة المقابس الآمنة تستخدم محرك طبقة المقابس الآمنة Conscrypt بشكل افتراضي

يستند تنفيذ SSLSocket التلقائي على Android إلى Conscrypt. منذ نظام التشغيل Android 11، تم تطوير هذا التنفيذ داخليًا على أساس SSLEngine من Conscrypt.

ألوكاتور المقوى

يستخدم نظام التشغيل Android 11 Scudo Hardened Allocator داخليًا على توزيع حصص أجزاء الخدمة. يستطيع Scudo اكتشاف وتخفيف بعض أنواع مخالفات أمان الذاكرة. إذا ظهرت لك أعطال مرتبطة بـ Scudo (على سبيل المثال، Scudo ERROR:) في تقارير الأعطال الأصلية، راجِع مستندات تحديد مشاكل Scudo وحلّها.

إحصاءات استخدام التطبيق

لحماية المستخدمين بشكل أفضل، يخزِّن Android 11 إحصاءات استخدام التطبيقات لكل مستخدم في مساحة تخزين بيانات الاعتماد المشفّرة. ولذلك، لا يمكن للنظام أو أي تطبيقات الوصول إلى هذه البيانات ما لم يتم عرض الخطأ isUserUnlocked() بعد true، ويتم ذلك بعد حدوث أحد الإجراءات التالية:

  • يفتح المستخدم قفل جهازه للمرة الأولى بعد بدء تشغيل النظام.
  • يبدِّل المستخدم إلى حسابه على الجهاز.

إذا كان تطبيقك يرتبط بمثيل UsageStatsManager، تأكَّد من استدعاء الطرق على هذا الكائن بعد أن يفتح المستخدم قفل جهازه. وبخلاف ذلك، تعرض واجهة برمجة التطبيقات الآن قيمًا فارغة أو فارغة.

دعم محاكي شبكة الجيل الخامس

يضيف نظام التشغيل Android 11 واجهات برمجة تطبيقات شبكة الجيل الخامس لتمكين تطبيقاتك من إضافة ميزات متطوّرة. لاختبار الميزات عند إضافتها، يمكنك استخدام الإمكانات الجديدة لمحاكي حزمة تطوير البرامج (SDK) لنظام التشغيل Android. تمت إضافة الوظيفة الجديدة في الإصدار 30.0.22 من المحاكي. يؤدي اختيار إعدادات شبكة الجيل الخامس إلى ضبط TelephonyDisplayInfo على OVERRIDE_NETWORK_TYPE_NR_NSA، وتعديل معدل نقل البيانات المقدَّر، والسماح لك بضبط الحد الأقصى للقياس للتحقّق من استجابة تطبيقك بشكل مناسب للتغييرات التي تطرأ على حالة NET_CAPABILITY_TEMPORARILY_NOT_METERED.

الأداء وتصحيح الأخطاء

تصحيح الأخطاء المرتبطة بمكالمات واجهة برمجة التطبيقات JobScheduler API

يتيح نظام Android 11 إمكانية تصحيح الأخطاء في التطبيقات لتحديد طلبات البيانات من واجهة برمجة التطبيقات JobScheduler المحتمَلة التي تجاوزت حدود معدّل نقل بيانات معيّنة. ويمكن للمطوّرين استخدام هذه الميزة لتحديد المشاكل المحتملة في الأداء. بالنسبة إلى التطبيقات التي تم ضبط سمة البيان debuggable على "صحيح"، ستعرض طلبات البيانات من واجهة برمجة التطبيقات JobScheduler التي تتجاوز حدود المعدّل RESULT_FAILURE. وتم ضبط حدود قصوى لا تهدف إلى تجنُّب حالات الاستخدام المشروعة.

معقّم واصف الملفات (fdsan)

قدّم Android 10 الإصدار fdsan (منظِّف أداة وصف الملفات). ترصد fdsan إساءة معالجة ملكية واصف الملفات، مثل الاستخدام بعد الإغلاق والإغلاق المزدوج. سيتم تغيير الوضع التلقائي لـ fdsan في الإصدار 11 من Android. يتم الآن إلغاء ميزة "fdsan" عند رصد أي خطأ، وكان السلوك السابق هو تسجيل تحذير والمتابعة. إذا ظهرت لك أعطال في تطبيقك بسبب fdsan، يُرجى الرجوع إلى fdsan documentation.

قيود الواجهة غير المتوفرة في حزمة تطوير البرامج (SDK)

يتضمّن الإصدار 11 من نظام Android قوائم معدَّلة للواجهات المفروض عليها قيود غير المتوافقة مع حزمة SDK، وذلك استنادًا إلى التعاون مع مطوّري تطبيقات Android وأحدث الاختبارات الداخلية. كلّما أمكن، نحرص على توفُّر بدائل عامة قبل حظر الواجهات التي لا تستخدم حزمة SDK.

إذا كان تطبيقك لا يستهدف الإصدار 11 من نظام التشغيل Android، قد لا تؤثر بعض هذه التغييرات في تطبيقك على الفور. ومع ذلك، على الرغم من أنّه يمكنك حاليًا استخدام بعض الواجهات غير المتوفّرة في حزمة SDK (بناءً على مستوى واجهة برمجة التطبيقات المستهدَف في تطبيقك)، قد يؤدي استخدام أي طريقة أو حقل غير تلك المتوفّرة في حزمة SDK دائمًا إلى تعطُّل تطبيقك.

إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم واجهات غير متوفّرة في SDK، يمكنك اختبار تطبيقك لمعرفة ذلك. إذا كان تطبيقك يعتمد على واجهات غير متوفّرة في حزمة SDK، عليك بدء التخطيط للنقل إلى بدائل حزمة SDK. ومع ذلك، ندرك أنّ بعض التطبيقات لديها حالات استخدام صالحة لاستخدام واجهات غير متوفّرة في حزمة SDK. إذا لم تتمكن من العثور على بديل لاستخدام واجهة غير متوفرة في حزمة SDK لميزة في تطبيقك، فعليك طلب واجهة برمجة تطبيقات عامة جديدة.

لمزيد من المعلومات حول التغييرات في هذا الإصدار من نظام التشغيل Android، يمكنك الاطّلاع على تعديلات على القيود المفروضة على الواجهة غير المتوفّرة في حزمة تطوير البرامج (SDK) في نظام التشغيل Android 11. لمعرفة المزيد من المعلومات حول الواجهات التي لا تستخدم حزمة SDK بوجه عام، يمكنك الاطّلاع على القيود المفروضة على الواجهات غير المتوفرة في حزمة SDK.

تمت إزالة المكتبة المشتركة للإصدار 1 من "خرائط Google"

في الإصدار 11 من نظام Android، تمت إزالة الإصدار الأول من المكتبة المشتركة في "خرائط Google". لقد تم إيقاف هذه المكتبة نهائيًا سابقًا وتوقفت عن العمل في التطبيقات في نظام Android 10. والتطبيقات التي كانت تعتمد سابقًا على هذه المكتبة المشتركة للأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم يجب أن تستخدم حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل Android بدلاً من ذلك.

التفاعل مع التطبيقات الأخرى

مشاركة معرّفات الموارد المنتظمة (URI) للمحتوى

إذا شارك تطبيقك معرّف الموارد المنتظم (URI) للمحتوى مع تطبيق آخر، يجب أن يمنح الغرض منح أذونات الوصول إلى معرّف الموارد المنتظم (URI) من خلال ضبط إحدى علامات الأهداف التالية على الأقل: FLAG_GRANT_READ_URI_PERMISSION وFLAG_GRANT_WRITE_URI_PERMISSION. وبهذه الطريقة، إذا كان التطبيق الآخر يستهدف نظام Android 11، سيظل بإمكانه الوصول إلى معرّف الموارد المنتظم (URI) للمحتوى. يجب أن يتضمّن تطبيقك علامات الأهداف حتى إذا كان معرّف الموارد المنتظم (URI) للمحتوى مرتبطًا بموفِّر محتوى لا يملكه تطبيقك.

إذا كان تطبيقك يملك موفّر المحتوى المرتبط بمعرّف الموارد المنتظم (URI) للمحتوى، تأكّد من عدم تصدير موفّر المحتوى. ننصحك حاليًا باتّباع أفضل ممارسات الأمان هذه.

جارٍ تحميل المكتبة

تحميل المكتبة المشتركة لوحدة ICU بمسار مطلق

لا يمكن للتطبيقات التي تستهدف الإصدار 28 من واجهة برمجة التطبيقات والإصدارات الأقدم استخدام dlopen(3) لتحميل libicuuc بالمسار المطلق "/system/lib/libicuuc.so". وبالنسبة إلى هذه التطبيقات، سيعرض dlopen("/system/lib/libicuuc.so", ...) اسم معرِّف فارغًا.

بدلاً من ذلك، لتحميل المكتبة، يُرجى استخدام اسمها كاسم للملف، على سبيل المثال dlopen("libicuuc.so", ...).