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

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

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

الخصوصية

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

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

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

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

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

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

الأمان

تستخدم مقابس طبقة المقابس الآمنة محرك Conscrypt SSL تلقائيًا

يستند التنفيذ التلقائي لـ SSLSocket في Android إلى Conscrypt. منذ الإصدار 11 من نظام التشغيل Android، يتم تنفيذ ذلك داخليًا استنادًا إلى SSLEngine في Conscrypt.

Scudo Hardened Allocator

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

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

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

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

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

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

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

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

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

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

أداة تنظيف واصف الملف (fdsan)

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

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

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

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

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

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

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

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

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

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

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

إذا كان تطبيقك يملك أداة توفير المحتوى المرتبطة بمعرّف موارد منتظم للمحتوى، تأكَّد من عدم تصدير أداة توفير المحتوى. ننصحك باتّباع أفضل الممارسات المتعلقة بالأمان.

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

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

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

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