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

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

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

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

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

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

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

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

在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。

当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例可以合并为一个广播。根据其他因素(例如系统运行状况),系统可能会从缓存状态中移除应用,并且传输之前加入队列的所有广播。

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

从 Android 14 开始,当您的应用调用 killBackgroundProcesses() 时,该 API 只能终止您自己应用的后台进程。

如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:

Invalid packageName: com.example.anotherapp

您的应用不应使用 killBackgroundProcesses() API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。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 كيلوبايت.

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

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

从设计上讲,当应用的进程移至后台且没有任何其他应用进程组件在运行时,应用进程将处于缓存状态。此类应用进程可能会因系统内存压力而终止。在此状态下,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) والحِزم الداعمة للمؤسسات
  • إشعارات الوسائط
  • حزمة "أداة اختيار البحث" التلقائية

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

لتحسين خصوصية المستخدم، يزيد 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 如何出于隐私保护目的而过滤软件包可见性