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

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

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

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

يتضمّن الإصدار Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية التي تعدّل أو توسّع الإمكانات الأساسية المختلفة لنظام Android.

تحسينات الحصة في JobScheduler

اعتبارًا من الإصدار 16 من Android، سنعدّل حصة وقت تنفيذ المهام العادية والمهام المُسرَّعة استنادًا إلى العوامل التالية:

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

يؤثر هذا التغيير في المهام المُجدوَلة باستخدام WorkManager وJobScheduler و DownloadManager. لتصحيح أخطاء سبب إيقاف إحدى المهام، ننصحك بتسجيل سبب إيقاف مَهمتك من خلال الاتصال WorkInfo.getStopReason() (بالنسبة إلى مهام JobScheduler، اتصل JobParameters.getStopReason()).

للحصول على معلومات عن كيفية تأثير حالة تطبيقك في الموارد التي يمكنه استخدامها، اطّلِع على حدود الموارد لإدارة الطاقة. لمزيد من المعلومات حول أفضل الممارسات لتوفير استهلاك البطارية، يُرجى الرجوع إلى الإرشادات حول تحسين استخدام البطارية لواجهات برمجة التطبيقات الخاصة بجدولة المهام.

ننصحك أيضًا بالاستفادة من واجهة برمجة التطبيقات الجديدة JobScheduler#getPendingJobReasonsHistory التي تم طرحها في Android 16 لمعرفة سبب عدم تنفيذ إحدى المهام.

الاختبار

لاختبار سلوك تطبيقك، يمكنك تفعيل إلغاء تحسينات quot;حصة المهام" معيّنة طالما أنّ التطبيق قيد التشغيل على جهاز Android 16.

لإيقاف فرض "ستلتزم الحالة العليا بحصة وقت تشغيل المهمة"، نفِّذ الرمز التاليadb:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME

لإيقاف فرض "الوظائف التي يتم تنفيذها بشكل متزامن مع خدمة تعمل في المقدّمة ستلتزم بحصة وقت تشغيل الوظيفة"، نفِّذ الأمر التالي adb:

adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME

لاختبار سلوك معيّن لحزمة التطبيقات في وضع الاستعداد، يمكنك ضبط حزمة التطبيقات في وضع الاستعداد لتطبيقك باستخدام الأمر adb التالي:

adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted

لفهم حزمة التطبيق في وضع الاستعداد التي يندرج تطبيقك ضمنها، يمكنك الحصول على حزمة التطبيق في وضع الاستعداد لتطبيقك باستخدام الأمر adb التالي:

adb shell am get-standby-bucket APP_PACKAGE_NAME

سبب إيقاف المهام الفارغة المهجورة

An abandoned job occurs when the JobParameters object associated with the job has been garbage collected, but JobService#jobFinished(JobParameters, boolean) has not been called to signal job completion. This indicates that the job may be running and being rescheduled without the app's awareness.

Apps that rely on JobScheduler, don't maintain a strong reference to the JobParameters object, and timeout will now be granted the new job stop reason STOP_REASON_TIMEOUT_ABANDONED, instead of STOP_REASON_TIMEOUT.

If there are frequent occurrences of the new abandoned stop reason, the system will take mitigation steps to reduce job frequency.

Apps should use the new stop reason to detect and reduce abandoned jobs.

If you're using WorkManager, AsyncTask, or DownloadManager, you aren't impacted because these APIs manage the job lifecycle on your app's behalf.

إيقاف الإعداد JobInfo#setImportantWhileForeground نهائيًا

JobInfo.Builder#setImportantWhileForeground(boolean) 方法用于在调度应用位于前台或暂时豁免于后台限制时指示作业的优先级。

自 Android 12(API 级别 31)起,此方法已废弃。从 Android 16 开始,它不再有效,系统会忽略调用此方法。

此功能移除也适用于 JobInfo#isImportantWhileForeground()。从 Android 16 开始,如果调用该方法,该方法会返回 false

لم يعُد نطاق أولوية البث المجدوَل عالميًا.

Android apps are allowed to define priorities on broadcast receivers to control the order in which the receivers receive and process the broadcast. For manifest-declared receivers, apps can use the android:priority attribute to define the priority and for context-registered receivers, apps can use the IntentFilter#setPriority() API to define the priority. When a broadcast is sent, the system delivers it to receivers in order of their priority, from highest to lowest.

In Android 16, broadcast delivery order using the android:priority attribute or IntentFilter#setPriority() across different processes will not be guaranteed. Broadcast priorities will only be respected within the same application process rather than across all processes.

Also, broadcast priorities will be automatically confined to the range (SYSTEM_LOW_PRIORITY + 1, SYSTEM_HIGH_PRIORITY - 1). Only system components will be allowed to set SYSTEM_LOW_PRIORITY, SYSTEM_HIGH_PRIORITY as broadcast priority.

Your app might be impacted if it does either of the following:

  1. Your application has declared multiple processes with the same broadcast intent, and has expectations around receiving those intents in a certain order based on the priority.
  2. Your application process interacts with other processes and has expectations around receiving a broadcast intent in a certain order.

If the processes need to coordinate with each other, they should communicate using other coordination channels.

التغييرات الداخلية في ART

Android 16 includes the latest updates to the Android Runtime (ART) that improve the Android Runtime's (ART's) performance and provide support for additional Java features. Through Google Play System updates, these improvements are also available to over a billion devices running Android 12 (API level 31) and higher.

As these changes are released, libraries and app code that rely on internal structures of ART might not work correctly on devices running Android 16, along with earlier Android versions that update the ART module through Google Play system updates.

Relying on internal structures (such as non-SDK interfaces) can always lead to compatibility problems, but it's particularly important to avoid relying on code (or libraries containing code) that leverages internal ART structures, since ART changes aren't tied to the platform version the device is running on and they go out to over a billion devices through Google Play system updates.

All developers should check whether their app is impacted by testing their apps thoroughly on Android 16. In addition, check the known issues to see if your app depends on any libraries that we've identified that rely on internal ART structures. If you do have app code or library dependencies that are affected, seek public API alternatives whenever possible and request public APIs for new use cases by creating a feature request in our issue tracker.

وضع التوافق مع حجم الصفحة البالغ 16 كيلوبايت

وفّر الإصدار 15 من Android إمكانية استخدام صفحات ذاكرة بحجم 16 كيلوبايت لتحسين أداء المنصة. يضيف الإصدار 16 من Android وضع ملف شخصي متوافقًا، ما يسمح بتشغيل بعض التطبيقات المُنشأة لصفحات ذاكرة بحجم 4 كيلوبايت على جهاز تم ضبطه لصفحات ذاكرة بحجم 16 كيلوبايت.

عندما يكون تطبيقك قيد التشغيل على جهاز يعمل بنظام Android 16 أو إصدار أحدث، إذا رصد نظام Android أنّ تطبيقك يحتوي على صفحات ذاكرة بحجم 4 كيلوبايت، سيستخدم تلقائيًا وضع التوافق ويعرض مربّع حوار إشعار للمستخدم. سيؤدي ضبط سمة android:pageSizeCompat في AndroidManifest.xml لتفعيل وضع التوافق مع الإصدارات القديمة إلى منع عرض مربّع الحوار عند تشغيل تطبيقك. لاستخدام السمة android:pageSizeCompat، عليك تجميع تطبيقك باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android 16.

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

مربّع حوار وضع التوافق الذي يظهر عندما يرصد النظام أنّه يمكن تشغيل تطبيق مُحاذَى بحجم 4 كيلوبايت بشكلٍ أفضل إذا تم محاذاة 16 كيلوبايت.

تجربة المستخدم وواجهة المستخدم للنظام

يتضمّن الإصدار Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية التي تهدف إلى توفير تجربة استخدام أكثر اتساقًا وسهولة.

إيقاف نهائي لإعلانات تسهيل الاستخدام المزعجة

Android 16 deprecates accessibility announcements, characterized by the use of announceForAccessibility or the dispatch of TYPE_ANNOUNCEMENT accessibility events. These can create inconsistent user experiences for users of TalkBack and Android's screen reader, and alternatives better serve a broader range of user needs across a variety of Android's assistive technologies.

Examples of alternatives:

The reference documentation for the deprecated announceForAccessibility API includes more details about suggested alternatives.

إتاحة وضع "التنقّل باستخدام ثلاثة أزرار"

Android 16 brings predictive back support to the 3-button navigation for apps that have properly migrated to predictive back. Long-pressing the back button initiates a predictive back animation, giving you a preview of where the back swipe takes you.

This behavior applies across all areas of the system that support predictive back animations, including the system animations (back-to-home, cross-task, and cross-activity).

The predictive back animations in 3-button navigation mode.

أشكال الأجهزة

يتضمّن الإصدار Android 16 (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية على التطبيقات عند عرضها على الشاشات من قِبل مالكي الأجهزة الافتراضية.

عمليات إلغاء مالك الجهاز الافتراضي

A virtual device owner is a trusted or privileged app that creates and manages a virtual device. Virtual device owners run apps on a virtual device and then project the apps to the display of a remote device, such as a personal computer, virtual reality device, or car infotainment system. The virtual device owner is on a local device, such as a mobile phone.

Virtual device owner on phone creates virtual device that projects app to remote display.

Per-app overrides

On devices running Android 16 (API level 36), virtual device owners can override app settings on select virtual devices that the virtual device owners manage. For example, to improve app layout, a virtual device owner can ignore orientation, aspect ratio, and resizability restrictions when projecting apps onto an external display.

Common breaking changes

The Android 16 behavior might impact your app's UI on large screen form factors such as car displays or Chromebooks, especially layouts that were designed for small displays in portrait orientation. To learn how to make your app adaptive for all device form factors, see About adaptive layouts.

References

Companion app streaming

الأمان

يتضمّن الإصدار 16 من Android (المستوى 36 لواجهة برمجة التطبيقات) تغييرات تعزّز أمان النظام للمساعدة في حماية التطبيقات والمستخدمين من التطبيقات الضارّة.

أمان محسَّن ضد هجمات إعادة التوجيه المستندة إلى الأهداف

يوفّر نظام التشغيل Android 16 أمانًا تلقائيًا ضد هجمات Intent إعادة التوجيه العامة، مع الحد الأدنى من التوافق والتغييرات المطلوبة للمطوّرين.

نحن بصدد تقديم حلول تحصين الأمان بشكل تلقائي لمنع Intent عمليات استغلال إعادة التوجيه. في معظم الحالات، لن تواجه التطبيقات التي تستخدم النوايا عادةً أي مشاكل في التوافق. لقد جمعنا المقاييس طوال عملية تطوير التطبيقات بهدف رصد التطبيقات التي قد تواجه مشاكل.

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

إيقاف معالجة إعادة التوجيه المستندة إلى النية

يقدّم نظام التشغيل Android 16 واجهة برمجة تطبيقات جديدة تتيح للتطبيقات إيقاف ميزات أمان الإطلاق. قد يكون ذلك ضروريًا في حالات معيّنة يتداخل فيها سلوك أمان الإعدادات التلقائية مع حالات الاستخدام المشروعة للتطبيق.

بالنسبة إلى التطبيقات التي يتم تجميعها باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل Android 16 (المستوى 36 لواجهة برمجة التطبيقات) أو إصدار أحدث

يمكنك استخدام الطريقة removeLaunchSecurityProtection() مباشرةً في عنصر Intent.

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent")
iSublevel?.removeLaunchSecurityProtection() // Opt out from hardening
iSublevel?.let { startActivity(it) }
بالنسبة إلى التطبيقات التي يتم تجميعها مع الإصدار 15 من نظام التشغيل Android (المستوى 35 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم

على الرغم من أنّه لا يُنصح بذلك، يمكنك استخدام ميزة التأمل للوصول إلى الطريقة removeLaunchSecurityProtection().

val i = intent
val iSublevel: Intent? = i.getParcelableExtra("sub_intent", Intent::class.java)
try {
    val removeLaunchSecurityProtection = Intent::class.java.getDeclaredMethod("removeLaunchSecurityProtection")
    removeLaunchSecurityProtection.invoke(iSublevel)
} catch (e: Exception) {
    // Handle the exception, e.g., log it
} // Opt-out from the security hardening using reflection
iSublevel?.let { startActivity(it) }

لم تعُد التطبيقات المصاحبة تتلقّى إشعارات بشأن مهلات الاستكشاف

Android 16 在配套设备配对流程期间引入了一种新行为,以防恶意应用侵犯用户的位置信息隐私。在 Android 16 上运行的所有配套应用都不再直接通过 RESULT_DISCOVERY_TIMEOUT 收到发现超时通知。而是通过可视对话框通知用户超时事件。当用户关闭对话框时,系统会通过 RESULT_USER_REJECTED 提醒应用关联失败。

搜索时长也从原来的 20 秒延长到了 30 秒,并且用户可以在搜索期间的任何时间停止设备发现。如果在开始搜索的前 20 秒内发现了至少 1 部设备,CDM 会停止搜索其他设备。

إمكانية الاتصال

يتضمّن الإصدار 16 من Android (المستوى 36 من واجهة برمجة التطبيقات) التغييرات التالية في حِزمة البلوتوث لتحسين إمكانية الاتصال بالأجهزة الطرفية.

معالجة محسّنة لخسارة السند

بدءًا من Android 16، تم تعديل حِزمة البلوتوث لتحسين الأمان وتجربة المستخدم عند رصد فقدان الربط عن بُعد. في السابق، كان النظام يزيل الربط تلقائيًا ويُطلق عملية إقران جديدة، ما قد يؤدي إلى إعادة إقران غير مقصودة. لقد لاحظنا في العديد من الحالات أنّ التطبيقات لا تهتم بحدث فقدان الارتباط بطريقة متّسقة.

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