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

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

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

الأمان

تستخدم مقابس طبقة المقابس الآمنة محرك 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 واجهات برمجة تطبيقات الجيل الخامس لتمكين تطبيقاتك من إضافة ميزات متطورة. لاختبار الميزات أثناء إضافتها، يمكنك استخدام الإمكانات الجديدة لمحاكي حزمة تطوير البرامج (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 من واجهة برمجة التطبيقات) أو إصدار أقدم، يجب استخدام حزمة تطوير البرامج (SDK) لتطبيق "خرائط Google" لنظام التشغيل Android بدلاً من ذلك.

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

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

إذا كان تطبيقك يشارك عنوان URI خاصًا بالمحتوى مع تطبيق آخر، يجب أن يمنح Intent أذونات الوصول إلى عنوان URI من خلال ضبط أحد علامات Intent التالية على الأقل: 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", ...).