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

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

تعديلات على الإشعارات المنبثقة

يتم حظر الإشعارات المنبثقة المخصّصة من الخلفية.

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

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

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

طلبات معاودة الاتصال في Toast

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

تغييرات في Text toast API

تظهر التطبيقات التي تستهدف الإصدار 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

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

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

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

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

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

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

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

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

الكاميرا

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

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

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

تغليف التطبيق وتثبيته

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

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

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

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

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

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

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

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

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

Firebase

Firebase JobDispatcher وGCMNetworkManager

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

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

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

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

تغييرات في دالة ردّ الاتصال لـ OnSharedPreferenceChangeListener

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

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

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

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

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

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

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

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

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