يتضمّن نظام Android 14 الأساسي تغييرات في السلوك قد تؤثر في تطبيقك.
تنطبق التغييرات التالية في السلوك على جميع التطبيقات عند تشغيلها على Android 14،
بغض النظر عن
targetSdkVersion
. وعليك اختبار تطبيقك ثم تعديله حسب الحاجة ليناسب هذه الميزات بشكل صحيح، حيثما ينطبق ذلك.
واحرص أيضًا على مراجعة قائمة تغييرات السلوك التي تؤثر فقط على التطبيقات التي تستهدف الإصدار 14 من نظام التشغيل Android.
الوظيفة الأساسية
يتم تلقائيًا رفض تحديد مواعيد المنبّهات المحدَّدة الوقت.
إنّ المنبّهات المحدّدة الوقت مخصّصة للإشعارات التي يجريها المستخدم، أو لتنفّذ إجراءات يجب أن تتم في وقت محدّد. بدءًا من نظام التشغيل Android 14،
SCHEDULE_EXACT_ALARM
لم يتم منح الإذن مسبَقًا لمعظم التطبيقات المثبّتة حديثًا والتي تستهدف الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ويتم رفض الإذن تلقائيًا.
مزيد من المعلومات حول التغييرات التي تطرأ على الإذن الخاص بجدولة المنبهات الدقيقة.
تتم إضافة أحداث البث المسجّلة للسياق إلى قائمة الانتظار أثناء تخزين التطبيقات مؤقتًا
على نظام التشغيل Android 14، يمكن للنظام وضع عمليات البث المسجّلة حسب السياق في قائمة انتظار بينما يكون التطبيق في حالة التخزين المؤقت. وهذا يشبه سلوك الوضع في "قائمة المحتوى التالي" الذي يوفّره Android 12 (المستوى 31 من واجهة برمجة التطبيقات) لمعاملات برامج الصنف غير المتزامنة. لا يتم وضع عمليات البث المعلنة في البيان في قائمة الانتظار، وتتم إزالة التطبيقات من حالة التخزين المؤقت لإرسال البث.
عندما يغادر التطبيق حالة التخزين المؤقت، كالعودة إلى المقدّمة، يعرض النظام أي عمليات بث في قائمة الانتظار. قد يتم دمج أحداث متعددة من عمليات بث معينة في بث واحد. استنادًا إلى عوامل أخرى، مثل حالة النظام، قد تتم إزالة التطبيقات من حالة ذاكرة التخزين المؤقت، ويتم تسليم أي عمليات بث في قائمة الانتظار سابقًا.
تستطيع التطبيقات إنهاء عملياتها الخاصة بالخلفية فقط
بدءًا من نظام التشغيل Android 14، عندما يطلب تطبيقك الرمز killBackgroundProcesses()
،
يمكن لواجهة برمجة التطبيقات إيقاف العمليات التي يتم تنفيذها في الخلفية فقط ضمن تطبيقك.
إذا أدخلت اسم الحزمة لتطبيق آخر، فلن يكون لهذه الطريقة أي تأثير على العمليات الخلفية لهذا التطبيق، وتظهر الرسالة التالية في Logcat:
Invalid packageName: com.example.anotherapp
يجب ألّا يستخدم تطبيقك واجهة برمجة التطبيقات killBackgroundProcesses()
أو أن يحاول
التأثير في مراحل نشاط التطبيقات الأخرى، حتى على إصدارات نظام التشغيل الأقدم.
تم تصميم Android للاحتفاظ بالتطبيقات المخزنة مؤقتًا في الخلفية وإيقافها تلقائيًا عندما يحتاج النظام إلى ذاكرة. إذا أوقف تطبيقك تطبيقات أخرى بدون داعٍ، يمكن أن يؤدي ذلك إلى خفض أداء النظام وزيادة استهلاك البطارية من خلال طلب إعادة تشغيل تلك التطبيقات بالكامل في وقت لاحق، ما يستهلك موارد أكثر بكثير من استئناف تطبيق حالي مخزَّن مؤقتًا.
تم ضبط وحدة النقل القصوى (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 سببًا جديدًا لإضافة تطبيق إلى حزمة وضع الاستعداد المحدود.
تؤدي مهام التطبيق إلى ظهور أخطاء ANR عدّة مرات بسبب انتهاء مهلة طريقة onStartJob
أو onStopJob
أو onBind
.
(راجع JobScheduler تعزز معاودة الاتصال وسلوك الشبكة عند إجراء التغييرات
على onStartJob
وonStopJob
.)
لتتبُّع ما إذا كان التطبيق قد دخل إلى حزمة الاستعداد المحدود أم لا،
ننصحك بالتسجيل باستخدام واجهة برمجة التطبيقات UsageStatsManager.getAppStandbyBucket()
عند تنفيذ المهمة أو UsageStatsManager.queryEventsForSelf()
عند بدء تشغيل التطبيق.
لا يزيد حجم قفل mlock عن 64 كيلوبايت.
في Android 14 (المستوى 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) والحِزم الداعمة للمؤسسات
- إشعارات الوسائط
- حزمة "أداة اختيار البحث" التلقائية
ظهور معلومات "أمان البيانات" أكثر وضوحًا
لتحسين خصوصية المستخدم، يزيد 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
قد يتم إخفاء أسماء حِزم مالك الوسائط
The media store supports queries for the OWNER_PACKAGE_NAME
column, which
indicates the app that stored a particular media file. Starting in Android
14, this value is redacted unless at least one of the following conditions is
true:
- The app that stored the media file has a package name that is always visible to other apps.
The app that queries the media store requests the
QUERY_ALL_PACKAGES
permission.
Learn more about how Android filters package visibility for privacy purposes.