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

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

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

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

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

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

مزيد من المعلومات عن التغييرات في الإذن لجدولة رسائل التنبيهات المُحدَّدة

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

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

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

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

Starting in Android 14, when your app calls killBackgroundProcesses(), the API can kill only the background processes of your own app.

If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:

Invalid packageName: com.example.anotherapp

Your app shouldn't use the killBackgroundProcesses() API or otherwise attempt to influence the process lifecycle of other apps, even on older OS versions. Android is designed to keep cached apps in the background and kill them automatically when the system needs memory. If your app kills other apps unnecessarily, it can reduce system performance and increase battery consumption by requiring full restarts of those apps later, which takes significantly more resources than resuming an existing cached app.

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

Starting from Android 14, the Android Bluetooth stack more strictly adheres to Version 5.2 of the Bluetooth Core Specification and requests the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using the BluetoothGatt#requestMtu(int) API, and disregards all subsequent MTU requests on that ACL connection.

To address this change and make your app more robust, consider the following options:

  • Your peripheral device should respond to the Android device's MTU request with a reasonable value that can be accommodated by the peripheral. The final negotiated value will be a minimum of the Android requested value and the remote provided value (for example, min(517, remoteMtu))
    • Implementing this fix could require a firmware update for peripheral
  • Alternatively, limit your GATT characteristic writes based on the minimum between the known supported value of your peripheral and the received MTU change
    • A reminder that you should reduce 5 bytes from the supported size for the headers
    • For example: arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5

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

Android 14 introduces a new reason an app can be placed into the restricted standby bucket. The app's jobs trigger ANR errors multiple times due to onStartJob, onStopJob, or onBind method timeouts. (See JobScheduler reinforces callback and network behavior for changes to onStartJob and onStopJob.)

To track whether or not the app has entered the restricted standby bucket, we recommend logging with the API UsageStatsManager.getAppStandbyBucket() on job execution or UsageStatsManager.queryEventsForSelf() on app startup.

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

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

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

By design, an app's process is in a cached state when it's moved to the background and no other app process components are running. Such an app process is subject to being killed due to system memory pressure. Any work that Activity instances perform after the onStop() method has been called and returned, while in this state, is unreliable and strongly discouraged.

Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.

Apps that use typical framework-supported lifecycle APIs – such as services, JobScheduler, and Jetpack WorkManager – shouldn't be impacted by these changes.

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

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

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

إذا كنت تستخدِم حاليًا وحدات البكسل القابلة للتوسّع (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 لمستوى رؤية الحِزم لأغراض تتعلّق بالخصوصية