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

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

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

الخصوصية

يقدّم نظام التشغيل 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.

التغييرات في واجهة برمجة التطبيقات الخاصة بإشعارات التنبيه النصية

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

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

وصول محدود للقراءة إلى قاعدة بيانات أسماء نقاط الوصول

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

تغيير الاسم: 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 وتتفاعل مع محرك تحويل النص إلى كلام عنصر <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، يمكن فقط لتطبيقات الكاميرا المثبَّتة مسبقًا على النظام الاستجابة لإجراءات الأهداف التالية:

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

تعبئة التطبيقات وتثبيتها

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

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

تغيير الاسم: 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 الإصدار 1 فقط باستخدام نظام توقيع حِزم APK الإصدار 2 أو الإصدارات الأحدث. لا يمكن للمستخدمين تثبيت التطبيقات أو تحديثها إذا كانت موقَّعة فقط باستخدام نظام توقيع حِزم APK الإصدار 1 على الأجهزة التي تعمل بنظام التشغيل Android 11.

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

Firebase

‫Firebase JobDispatcher وGCMNetworkManager

إذا كان تطبيقك يستهدف المستوى 30 من واجهة برمجة التطبيقات أو المستويات الأحدث، سيتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات في مكتبة FirebaseJobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 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

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

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

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

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

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

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

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