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

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

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

الأمان

تستخدم مأخذ التوصيلات طبقة المقابس الآمنة (SSL) محرك Conscrypt SSL بشكل تلقائي

تعتمد طريقة تنفيذ 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.

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

تصحيح أخطاء الحدود القصوى لطلبات البيانات من واجهة برمجة التطبيقات Job Scheduler

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

جارٍ تحميل المكتبة المشتركة لوحدة العناية المركّزة (ICU) مع المسار المطلق

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

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