يتضمّن الإصدار 14 من نظام التشغيل Android تغييرات في السلوك قد تؤثّر في تطبيقك.
تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على الإصدار 14 من نظام التشغيل Android،
بغض النظر عن
targetSdkVersion. عليك اختبار تطبيقك ثم تعديله حسب الحاجة ليتوافق مع هذه الميزات بشكل صحيح، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثّر فقط في التطبيقات التي تستهدف الإصدار 14 من نظام التشغيل Android.
الوظيفة الأساسية
يتم رفض المنبّهات المحدَّدة الوقت تلقائيًا
تكون المنبّهات المحدّدة الوقت مخصّصة للإشعارات التي يقصدها المستخدم أو للإجراءات التي
يجب أن تحدث في وقت محدد. بدءًا من الإصدار 14 من نظام التشغيل Android، لم يعُد يتم منح الإذن
SCHEDULE_EXACT_ALARM
مسبقًا لمعظم التطبيقات المثبَّتة حديثًا
التي تستهدف الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ويتم رفضه تلقائيًا.
مزيد من المعلومات عن التغييرات في الإذن لجدولة رسائل التنبيهات المُحدَّدة
يتم وضع عمليات البث المسجَّلة حسب السياق في قائمة الانتظار أثناء تخزين التطبيقات مؤقتًا
في Android 14، يمكن للنظام وضع عمليات البث المسجّلة السياق في قائمة انتظار أثناء تشغيل التطبيق في حالة ذاكرة التخزين المؤقت. يشبه ذلك الوضع في قائمة المحتوى التالي. الذي قدَّمه نظام Android 12 (المستوى 31 من واجهة برمجة التطبيقات) لأداة الربط غير المتزامنة المعاملات. إنّ عمليات البث التي يعلَن عنها البيان ليست في قائمة الانتظار وتتم إزالة التطبيقات. من حالة التخزين المؤقت لتسليم البث.
عندما يترك التطبيق حالة ذاكرة التخزين المؤقت، مثل العودة إلى المقدّمة، يتم تنفيذ أي عمليات بث في قائمة انتظار. نُسخ متعددة من عمليات بث معيّنة في بث واحد. اعتمادًا على عوامل أخرى، مثل النظام وقد تتم إزالة التطبيقات من حالة ذاكرة التخزين المؤقت، وأي من التطبيقات التي سبق أن تمت إضافتها إلى قائمة الانتظار رسائل البث المباشر.
يمكن للتطبيقات إنهاء عمليات الخلفية الخاصة بها فقط
بدءًا من الإصدار 14 من نظام التشغيل Android، عندما يطلب تطبيقك killBackgroundProcesses()،
لا يمكن لواجهة برمجة التطبيقات إنهاء سوى العمليات التي تعمل في الخلفية لتطبيقك.
إذا مررت اسم الحزمة لتطبيق آخر، فلن يكون لهذه الطريقة أي تأثير في في خلفية هذا التطبيق، وستظهر الرسالة التالية في Logcat:
Invalid packageName: com.example.anotherapp
يجب ألا يستخدم تطبيقك واجهة برمجة التطبيقات killBackgroundProcesses() أو يحاول بأي شكل آخر.
للتأثير في دورة حياة عمليات التطبيقات الأخرى، حتى في إصدارات أنظمة التشغيل القديمة.
تم تصميم Android للاحتفاظ بالتطبيقات المخزّنة مؤقتًا في الخلفية ومنعها
تلقائيًا عندما يحتاج النظام إلى ذاكرة. إذا كان تطبيقك يغلق التطبيقات الأخرى
غير الضرورية، يمكن أن يؤدي ذلك إلى تقليل أداء النظام وزيادة استهلاك البطارية
من خلال طلب إعادة تشغيل هذه التطبيقات بالكامل لاحقًا، ما يستغرق موارد
أكثر بكثير من استئناف تطبيق حالي محفوظ في ذاكرة التخزين المؤقت.
تم ضبط وحدة النقل القصوى (MTU) على 517 لأول عميل GATT يطلب وحدة نقل قصوى
اعتبارًا من الإصدار 14 من Android، يلتزم حِزمة Android Bluetooth بشكل أكثر صرامة بالإصدار 5.2 من مواصفات Bluetooth الأساسية ويطلب
وحدة النقل القصوى (MTU) لبروتوكول ATT في BLE (البروتوكول الخفيف لواجهة برمجة التطبيقات) لتكون 517 بايت عندما يطلب أول عميل GATT وحدة النقل القصوى باستخدام BluetoothGatt#requestMtu(int) API، ويتجاهل كل طلبات MTU التالية
في اتصال ACL هذا.
لحلّ هذه المشكلة وجعل تطبيقك أكثر أمانًا، ننصحك بالاطّلاع على الخطوات التالية:
- يجب أن يستجيب الجهاز الملحق لطلب وحدة تحكُّم في حدود الجلسة (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(API 级别 34)及更高版本中,平台将可使用 mlock() 锁定的最大内存量减少到每个进程 64 KB。在之前的版本中,每个进程的上限为 64 MB。此限制有助于更好地管理应用和系统的内存。为了在各种设备上提供更一致的体验,Android 14 针对兼容设备上的新 mlock() 限制添加了一项新的 CTS 测试。
يفرض النظام استخدام موارد التطبيقات المخزَّنة مؤقتًا
وفقًا للتصميم، تكون عملية التطبيق في حالة تخزين مؤقت عند نقلها إلى
الخلفية ولا يتم تشغيل أي مكوّنات أخرى لعملية التطبيق. وقد يتم إنهاء عملية التطبيق هذه
بسبب الضغط على ذاكرة النظام. إنّ أي عمل تؤديه مثيلات 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، ما يوفّر للمستخدمين خيارات إضافية لتسهيل الاستخدام.
إذا كنت تستخدم وحدات بكسل قابلة للتوسّع (sp) لتحديد حجم النص، من المحتمل ألا يكون لهذا التغيير تأثير كبير في تطبيقك. ومع ذلك، عليك إجراء اختبار لواجهة المستخدم مع تفعيل الحد الأقصى لحجم الخط (200%) للتأكّد من أنّ تطبيقك يمكنه استيعاب أحجام خطوط أكبر بدون التأثير في سهولة الاستخدام.
الأمان
الحد الأدنى لمستوى واجهة برمجة التطبيقات المستهدف القابل للتثبيت
从 Android 14 开始,targetSdkVersion 低于 23 的应用无法安装。要求应用满足这些最低目标 API 级别要求有助于提高用户的安全性和隐私性。
恶意软件通常会以较旧的 API 级别为目标平台,以绕过在较新版本 Android 中引入的安全和隐私保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 14 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示以下消息:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
在升级到 Android 14 的设备上,targetSdkVersion 低于 23 的所有应用都将继续保持安装状态。
如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:
adb install --bypass-low-target-sdk-block FILENAME.apk
قد يتم إخفاء أسماء حِزم مالكي الوسائط
يتيح "متجر الوسائط" طلبات البحث عن عمود OWNER_PACKAGE_NAME الذي يشير إلى التطبيق الذي حفظ ملف وسائط معيّنًا. بدءًا من الإصدار
14 من نظام التشغيل Android، يتم إخفاء هذه القيمة ما لم يكن أحد الشروط التالية
صحيحًا على الأقل:
- يحتوي التطبيق الذي يخزّن ملف الوسائط على اسم حزمة يكون مرئيًا دائمًا للتطبيقات الأخرى.
يطلب التطبيق الذي يجري طلب بحث في متجر الوسائط إذن
QUERY_ALL_PACKAGES.
مزيد من المعلومات حول كيفية فلترة Android لمستوى رؤية الحِزم لأغراض تتعلّق بالخصوصية