التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 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، أن تتعطّل أو تواجه مشاكل أخرى. يُعدّ هذا التغيير ضروريًا للتوافق مع الأجهزة المستقبلية التي تم تفعيل إضافة وضع علامات الذاكرة ARM (MTE) لها. للحصول على المزيد من المعلومات، يمكنك الاطّلاع على المؤشرات التي تم وضع علامات عليها.

لإيقاف هذه الميزة، يُرجى الاطّلاع على مستندات البيان 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

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

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

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

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

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

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

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

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

Firebase

Firebase JobDispatcher وGCMNetworkManager

إذا كان تطبيقك يستهدف المستوى 30 أو أعلى لواجهة برمجة التطبيقات، يتم إيقاف طلبات البيانات من واجهة برمجة التطبيقات JobDispatcher وGcmNetworkManager على الأجهزة التي تعمل بالإصدار 6.0 من نظام التشغيل Android (المستوى 23 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. للحصول على معلومات عن عملية النقل، يُرجى الاطّلاع على نقل البيانات من Firebase JobDispatcher إلى 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 لواجهة برمجة التطبيقات)، يتم الآن معاودة الاتصال إلى OnSharedPreferenceChangeListener.onSharedPreferenceChanged باستخدام مفتاح null عند طلب الرمز Editor.clear.

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

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

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

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

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