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

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

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

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

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

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

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

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

On Android 14, the system can place context-registered broadcasts in a queue while the app is in the cached state. This is similar to the queuing behavior that Android 12 (API level 31) introduced for async binder transactions. Manifest-declared broadcasts aren't queued, and apps are removed from the cached state for broadcast delivery.

When the app leaves the cached state, such as returning to the foreground, the system delivers any queued broadcasts. Multiple instances of certain broadcasts might be merged into one broadcast. Depending on other factors, such as system health, apps might be removed from the cached state, and any previously queued broadcasts are delivered.

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

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

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

Invalid packageName: com.example.anotherapp

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

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

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

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

يقتصر حجم mlock على 64 كيلوبايت

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

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

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

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

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

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

الأمان

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

Starting with Android 14, apps with a targetSdkVersion lower than 23 can't be installed. Requiring apps to meet these minimum target API level requirements improves security and privacy for users.

Malware often targets older API levels in order to bypass security and privacy protections that have been introduced in newer Android versions. For example, some malware apps use a targetSdkVersion of 22 to avoid being subjected to the runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API level 23). This Android 14 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level will result in an installation failure, with the following message appearing in Logcat:

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

On devices upgrading to Android 14, any apps with a targetSdkVersion lower than 23 will remain installed.

If you need to test an app targeting an older API level, use the following ADB command:

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

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

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

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

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