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

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

إذا أردت تلقّي إشعارات عند ظهور إشعار منبثق (نص أو مخصّص) أو اختفائه، استخدِم الطريقة 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.