تغييرات السلوك: جميع التطبيقات

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

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

الوظيفة الأساسية

يتم تلقائيًا رفض ضبط المنبّهات المحدّدة الوقت.

إنّ المنبّهات المحدّدة الوقت مخصّصة للإشعارات التي يجريها المستخدم، أو لتنفّذ إجراءات يجب أن تتم في وقت محدّد. بدءًا من نظام التشغيل Android 14، SCHEDULE_EXACT_ALARM لم يتم منح الإذن مسبَقًا لمعظم التطبيقات المثبّتة حديثًا والتي تستهدف الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ويتم رفض الإذن تلقائيًا.

مزيد من المعلومات حول التغييرات التي تطرأ على الإذن الخاص بجدولة المنبهات الدقيقة.

يتم وضع عمليات البث المسجّلة للسياق في قائمة الانتظار أثناء التخزين المؤقت للتطبيقات.

على نظام التشغيل Android 14، يمكن للنظام وضع عمليات البث المسجّلة حسب السياق في قائمة انتظار بينما يكون التطبيق في حالة التخزين المؤقت. وهذا يشبه سلوك الوضع في "قائمة المحتوى التالي" الذي يوفّره Android 12 (المستوى 31 من واجهة برمجة التطبيقات) لمعاملات برامج الصنف غير المتزامنة. لا يتم وضع عمليات البث المعلنة في البيان في قائمة الانتظار، وتتم إزالة التطبيقات من حالة التخزين المؤقت لإرسال البث.

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

بإمكان التطبيقات إنهاء العمليات التي تتم في الخلفية فقط

بدءًا من نظام التشغيل Android 14، عندما يطلب تطبيقك الرمز killBackgroundProcesses()، يمكن لواجهة برمجة التطبيقات إيقاف العمليات التي يتم تنفيذها في الخلفية فقط ضمن تطبيقك.

إذا أدخلت اسم الحزمة لتطبيق آخر، فلن يكون لهذه الطريقة أي تأثير على العمليات الخلفية لهذا التطبيق، وتظهر الرسالة التالية في Logcat:

Invalid packageName: com.example.anotherapp

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

تم ضبط MTU على 517 لأول عميل GATT يطلب MTU.

بدءًا من نظام التشغيل Android 14، تلتزم حزمة البلوتوث على Android بشكل أكثر صرامة بالإصدار 5.2 من مواصفات البلوتوث الأساسية وتطلب حجم BLE ATT MTU من وحدة بايتBluetoothGatt#requestMtu(int)

لمعالجة هذا التغيير وجعل تطبيقك أكثر فعالية، يُرجى مراعاة الخيارات التالية:

  • يجب أن يستجيب الجهاز الملحق لطلب وحدة النقل القصوى (MTU) لجهاز Android بقيمة معقولة يمكن توصيلها مع الجهاز الملحق. وستكون القيمة النهائية التي تم التفاوض عليها ضِمن الحدّ الأدنى للقيمة المطلوبة من Android والقيمة المقدَّمة عن بُعد (على سبيل المثال، min(517, remoteMtu)).
    • قد يتطلب تنفيذ هذا الإصلاح تحديث البرامج الثابتة للجهاز الملحق.
  • بدلاً من ذلك، يمكنك تحديد سمات GATT استنادًا إلى الحد الأدنى بين القيمة المتوافقة المعروفة للجهاز الملحق وتغيُّر MTU الذي تم تلقّيه
      .
    • تذكير: يجب تقليل 5 بايت من الحجم المتوافق للعناوين
    • على سبيل المثال: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

سبب جديد لإضافة تطبيق إلى حزمة الاستعداد المحدود

يقدِّم نظام التشغيل Android 14 سببًا جديدًا لإضافة تطبيق إلى حزمة وضع الاستعداد المحدود. تؤدي مهام التطبيق إلى ظهور أخطاء ANR عدّة مرات بسبب انتهاء مهلة طريقة onStartJob أو onStopJob أو onBind. (راجع JobScheduler تعزز معاودة الاتصال وسلوك الشبكة عند إجراء التغييرات على onStartJob وonStopJob.)

لتتبُّع ما إذا كان التطبيق قد دخل إلى حزمة الاستعداد المحدود أم لا، ننصحك بالتسجيل باستخدام واجهة برمجة التطبيقات UsageStatsManager.getAppStandbyBucket() عند تنفيذ المهمة أو UsageStatsManager.queryEventsForSelf() عند بدء تشغيل التطبيق.

حجم محدود بحجم 64 كيلوبايت

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

يفرض النظام استخدام موارد التطبيقات في ذاكرة التخزين المؤقت.

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

يطبّق Android 14 الاتساق والتنفيذ على هذا التصميم. بعد وقت قصير من دخول عملية التطبيق في حالة التخزين المؤقت، لا يُسمَح بالعمل في الخلفية إلى أن يعيد مكوّن العملية الدخول إلى الحالة النشطة لدورة الحياة.

جدير بالذكر أنّ التطبيقات التي تستخدم واجهات برمجة التطبيقات المعتادة لمراحل النشاط والمتوافقة مع إطار العمل، مثل الخدمات وJobScheduler وJetpack WorkManager، يجب ألا تتأثّر بهذه التغييرات.

تجربة المستخدم

تغييرات في تجربة المستخدمين للإشعارات التي لا يمكن إغلاقها

إذا كان تطبيقك يعرض للمستخدمين إشعارات لا يمكن إغلاقها في المقدّمة، يعني ذلك أنّ نظام التشغيل Android 14 قد غيّر السلوك للسماح للمستخدمين برفض هذه الإشعارات.

ينطبق هذا التغيير على التطبيقات التي تمنع المستخدمين من إغلاق الإشعارات التي تعمل في المقدّمة من خلال ضبط Notification.FLAG_ONGOING_EVENT إلى Notification.Builder#setOngoing(true) أو NotificationCompat.Builder#setOngoing(true). وتم تغيير سلوك FLAG_ONGOING_EVENT، بحيث يمكن للمستخدم إغلاق هذه الإشعارات بشكل فعلي.

لا تزال هذه الأنواع من الإشعارات غير قابلة للإغلاق في الحالات التالية:

  • عندما يكون الهاتف مقفلاً
  • إذا اختار المستخدم إجراء محو الكل للإشعارات (ما يساعد في حالات الرفض غير المقصودة)

ولا ينطبق هذا السلوك الجديد أيضًا على الإشعارات في حالات الاستخدام التالية:

  • إشعارات CallStyle
  • وحدة التحكّم بسياسة الجهاز (DPC) والحِزم الداعمة للمؤسسات
  • إشعارات الوسائط
  • حزمة "أداة اختيار البحث" التلقائية

معلومات "أمان البيانات" تظهر بشكل أكبر

لتحسين خصوصية المستخدم، يزيد Android 14 عدد الأماكن التي يعرض فيها النظام المعلومات التي أعلنت عنها في نموذج Play Console. في الوقت الحالي، يمكن للمستخدمين الاطّلاع على هذه المعلومات في قسم أمان البيانات ضِمن بطاقة بيانات تطبيقك على Google Play.

لذلك، ننصحك بمراجعة سياسات مشاركة بيانات الموقع الجغرافي لتطبيقك وإعلامنا بضرورة إجراء أي تعديلات سارية على قسم "أمان البيانات" على Google Play في تطبيقك.

يمكنك الاطّلاع على مزيد من المعلومات في الدليل حول كيفية إظهار معلومات أمان البيانات بشكل أكبر على الإصدار 14 من نظام Android.

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

الضبط غير الخطّي لحجم الخط بنسبة 200%

بدءًا من نظام التشغيل Android 14، يتيح النظام إمكانية زيادة حجم الخط بنسبة تصل إلى 200%، ما يوفّر للمستخدمين ضعاف البصر خيارات إضافية لتسهيل الاستخدام تتوافق مع إرشادات إتاحة محتوى الويب (WCAG).

إذا كنت تستخدم وحدات البكسل (sp) المعدّلة لتحديد حجم النص، لن يؤثر هذا التغيير بشكل كبير في تطبيقك. ومع ذلك، يجب إجراء اختبار واجهة المستخدم مع تفعيل الحد الأقصى لحجم الخط (%200) لضمان ملاءمة التطبيق لأحجام خطوط أكبر بدون التأثير في سهولة الاستخدام.

الأمان

الحد الأدنى لمستوى واجهة برمجة التطبيقات المستهدَف القابل للتثبيت

واعتبارًا من الإصدار 14 من نظام التشغيل Android، لا يمكن تثبيت التطبيقات التي تتضمّن targetSdkVersion أقل من 23. إنّ شرط استيفاء التطبيقات للحد الأدنى من متطلّبات مستوى واجهة برمجة التطبيقات المستهدَف يساهم في تحسين مستوى الأمان والخصوصية للمستخدمين.

تستهدف البرامج الضارة غالبًا مستويات واجهة برمجة التطبيقات القديمة بهدف تجاوز إجراءات حماية الخصوصية والأمان التي تم تقديمها في إصدارات Android الأحدث. على سبيل المثال، تستخدم بعض تطبيقات البرامج الضارة targetSdkVersion من أصل 22 لتجنّب الخضوع لنموذج أذونات وقت التشغيل الذي تم تقديمه في عام 2015 في نظام Android 6.0 Marshmallow (مستوى واجهة برمجة التطبيقات 23). يُصعِّب هذا التغيير في نظام التشغيل Android 14 على البرامج الضارة تجنُّب التحسينات في الأمان والخصوصية. ستؤدي محاولة تثبيت تطبيق يستهدف مستوى أقل لواجهة برمجة التطبيقات إلى حدوث إخفاق في التثبيت، وستظهر الرسالة التالية في Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7

على الأجهزة التي تتم ترقيتها إلى Android 14، ستظلّ أي تطبيقات تتضمّن targetSdkVersion أقل من 23 مثبّتة.

إذا كنت بحاجة إلى اختبار تطبيق يستهدف مستوى واجهة برمجة تطبيقات أقدم، استخدِم أمر ADB التالي:

adb install --bypass-low-target-sdk-block FILENAME.apk

قد يتم إخفاء أسماء حِزم مالك الوسائط

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

  • يحتوي التطبيق الذي خزّن ملف الوسائط على اسم حزمة يظهر دائمًا للتطبيقات الأخرى.
  • يطلب التطبيق الذي يطلب البحث في متجر الوسائط الحصول على إذن QUERY_ALL_PACKAGES.

تعرَّف على مزيد من المعلومات حول كيفية فلترة Android إذن الوصول إلى الحزمة لأغراض الخصوصية.