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

يتضمّن نظام 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() عند بدء تشغيل التطبيق.

لا يزيد حجم قفل mlock عن 64 كيلوبايت.

In Android 14 (API level 34) and higher, the platform reduces the maximum memory that can be locked using mlock() to 64 KB per process. In previous versions, the limit was 64 MB per process. This restriction promotes better memory management across apps and the system. To provide more consistency across devices, Android 14 adds a new CTS test for the new mlock() limit on compatible devices.

فرض النظام استخدام موارد التطبيقات المُخزَّنة مؤقتًا

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

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

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

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

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

If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.

This change applies to apps that prevent users from dismissing foreground notifications by setting Notification.FLAG_ONGOING_EVENT through Notification.Builder#setOngoing(true) or NotificationCompat.Builder#setOngoing(true). The behavior of FLAG_ONGOING_EVENT has changed to make such notifications actually dismissable by the user.

These kinds of notifications are still non-dismissable in the following conditions:

  • When the phone is locked
  • If the user selects a Clear all notification action (which helps with accidental dismissals)

Also, this new behavior doesn't apply to notifications in the following use cases:

  • CallStyle notifications
  • Device policy controller (DPC) and supporting packages for enterprise
  • Media notifications
  • The default Search Selector package

ظهور معلومات "أمان البيانات" أكثر وضوحًا

To enhance user privacy, Android 14 increases the number of places where the system shows the information you have declared in the Play Console form. Currently, users can view this information in the Data safety section on your app's listing in Google Play.

We encourage you to review your app's location data sharing policies and take a moment to make any applicable updates to your app's Google Play Data safety section.

Learn more in the guide about how data safety information is more visible on Android 14.

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

تكبير الخط غير الخطي إلى 200%

Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).

If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.

الأمان

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

واعتبارًا من الإصدار 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 إذن الوصول إلى الحزمة لأغراض الخصوصية.