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

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

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

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

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

精确的闹钟适用于用户指定的通知,或是在确切时间需要执行的操作。从 Android 14 开始,系统不再向以 Android 13 及更高版本为目标平台的大多数新安装应用预先授予 SCHEDULE_EXACT_ALARM 权限,该权限默认处于拒绝状态。

详细了解安排精确闹钟的权限变化

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

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

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

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

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

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

Invalid packageName: com.example.anotherapp

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

تم ضبط وحدة النقل القصوى (MTU) على 517 لأول عميل GATT يطلب وحدة نقل قصوى

اعتبارًا من الإصدار 14 من Android، يلتزم حِزمة Android Bluetooth بشكل أكثر صرامة بالإصدار 5.2 من مواصفات Bluetooth الأساسية ويطلب وحدة النقل القصوى (MTU) لبروتوكول ATT في BLE‏ (البروتوكول الخفيف لواجهة برمجة التطبيقات) لتكون 517 بايت عندما يطلب أول عميل GATT وحدة النقل القصوى باستخدام BluetoothGatt#requestMtu(int) API، ويتجاهل كل طلبات MTU التالية في اتصال ACL هذا.

لحلّ هذه المشكلة وجعل تطبيقك أكثر أمانًا، ننصحك بالاطّلاع على الخطوات التالية:

  • يجب أن يستجيب الجهاز الملحق لطلب وحدة تحكُّم في حدود الجلسة (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 كيلوبايت

在 Android 14(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试

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

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,Activity 实例在调用并返回 onStop() 方法后执行的任何工作均不可靠,强烈建议不要这样做。

Android 14 对此设计引入了一致性和强制执行要求。在应用进程进入缓存状态后不久,系统会禁止后台工作,直到进程组件重新进入生命周期的活跃状态。

使用框架支持的典型生命周期 API(例如服务JobSchedulerJetpack WorkManager)的应用应该不受这些变化的影响。

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

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

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

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

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

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

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

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

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

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

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

اطّلِع على مزيد من المعلومات في الدليل حول كيفية عرض معلومات أمان البيانات بشكل أكثر وضوحًا على نظام التشغيل Android 14.

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

الضبط غير الخطي لحجم الخط بما يصل إلى ‎200%

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

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

الأمان

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

بدءًا من نظام التشغيل Android 14، سيتم توفير 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 التالي :com

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

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

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

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

مزيد من المعلومات حول كيفية فلترة Android لمستوى رؤية الحِزم لأغراض تتعلّق بالخصوصية