التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android

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

التعديلات على الإشعارات المحمصة

تم حظر الإشعارات الفورية المخصّصة التي تظهر في الخلفية.

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

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

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

استدعاءات نخب

إذا أردت تلقّي إشعارات عند ظهور إشعار منبثق (نص أو مخصّص) أو اختفائه، استخدِم الطريقة addCallback() التي تمت إضافتها في Android 11.

تغييرات واجهة برمجة التطبيقات Text toast

في التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث، تظهر التأثيرات الجانبية التالية لتفعيل الإشعارات الفورية عن النصوص:

إمكانية الاتصال

وصول محدود لقراءة قاعدة بيانات 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

للمزيد من المعلومات حول إطار عمل التوافق والتغييرات، يمكنك الاطّلاع على اختبار وتصحيح الأخطاء في سلوك النظام الأساسي في تطبيقك.

يجب الآن الحصول على إذن مميّز لـ Manifest.permission.WRITE_APN_SETTINGS على التطبيقات التي تستهدف Android 11 لقراءة قاعدة بيانات اسم نقطة الوصول لمقدِّم خدمة الاتصالات أو الوصول إليها. تؤدي محاولة الوصول إلى قاعدة بيانات APN بدون هذا الإذن إلى إنشاء استثناء أمان.

تسهيل الاستخدام

تعريف التفاعل مع محركات تحويل النص إلى كلام في ملف البيان

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

للمزيد من المعلومات حول إطار عمل التوافق والتغييرات، يمكنك الاطّلاع على اختبار وتصحيح الأخطاء في سلوك النظام الأساسي في تطبيقك.

بدءًا من الإصدار Android 11، لا يمكن لخدمة تسهيل الاستخدام إصدار بيان في وقت التشغيل يفيد بأنّ هناك ارتباطًا بزر إمكانية الوصول في النظام. في حال إلحاق AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON بالسمة flags للعنصر AccessibilityServiceInfo، لن يجتاز إطار العمل أحداث استدعاء زر أدوات تسهيل الاستخدام في خدمتك.

لتلقّي أحداث معاودة الاتصال بشأن إمكانية الوصول ضمن خدمة تسهيل الاستخدام، يمكنك استخدام ملف البيانات الوصفية لخدمة تسهيل الاستخدام للإشارة إلى ارتباط خدمتك بزر إمكانية الوصول. أدرِج القيمة flagRequestAccessibilityButton في تعريفك للسمة accessibilityFlags. هناك موقع شائع لملف البيانات الوصفية لخدمة تسهيل الاستخدام هو res/raw/accessibilityservice.xml.

الكاميرا

تتطلّب "الإجراءات حسب النية بالشراء" استخدام الكاميرا التلقائية للنظام.

بدءًا من نظام التشغيل Android 11، ستقتصر الاستجابة إلى إجراءات intent التالية على تطبيقات كاميرا النظام المثبَّتة مسبقًا فقط:

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

إنشاء حزمة للتطبيق وتثبيته

ملفات الموارد المضغوطة

تغيير التفاصيل

تغيير الاسم: 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

للمزيد من المعلومات حول إطار عمل التوافق والتغييرات، يمكنك الاطّلاع على اختبار وتصحيح الأخطاء في سلوك النظام الأساسي في تطبيقك.

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

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

الإصدار 2 من مخطّط توقيع حزمة APK مطلوب الآن

بالنسبة إلى التطبيقات التي تستهدف Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والتي لا يتم توقيعها حاليًا إلا باستخدام الإصدار 1 من مخطّط توقيع حِزم APK، يجب الآن توقيعها أيضًا باستخدام الإصدار 2 من مخطّط توقيع حِزم APK أو الإصدارات الأحدث. لا يمكن للمستخدمين تثبيت أو تحديث التطبيقات الموقَّعة فقط باستخدام الإصدار 1 من مخطّط توقيع حزمة APK على الأجهزة التي تعمل بنظام التشغيل Android 11.

للتحقّق من توقيع تطبيقك باستخدام الإصدار 2 من مخطّط توقيع حزمة APK أو إصدار أحدث، يمكنك استخدام استوديو Android أو أداة apksigner في سطر الأوامر.

Firebase

JobDispatcher وGCMNetworkManager من Firebase

إذا كان تطبيقك يستهدف المستوى 30 أو أعلى من واجهة برمجة التطبيقات، سيتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات في Firebase JobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بنظام التشغيل Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. للحصول على معلومات حول نقل البيانات، يمكنك الاطّلاع على النقل من JobDispatcher في Firebase إلى WorkManager والنقل من GCMNetworkManager إلى WorkManager.

التعرّف على الكلام

بسبب التغييرات التي طرأت على مستوى رؤية الحزمة، تحتاج التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android وتتفاعل مع خدمة التعرّف على الكلام إلى إضافة العنصر <queries> التالي إلى ملفات البيان الخاصة بها:

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

تغييرات معاودة الاتصال لـ OnSharedPreferencesChangeListener

تغيير التفاصيل

تغيير الاسم: 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

للمزيد من المعلومات حول إطار عمل التوافق والتغييرات، يمكنك الاطّلاع على اختبار وتصحيح الأخطاء في سلوك النظام الأساسي في تطبيقك.

بالنسبة إلى التطبيقات التي تستهدف Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، عند استدعاء Editor.clear، يتم الآن استدعاء OnSharedPreferenceChangeListener.onSharedPreferenceChanged باستخدام مفتاح null.

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

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

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

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

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