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

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

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

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

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

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

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

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

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

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

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

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

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

Invalid packageName: com.example.anotherapp

يجب ألا يستخدم تطبيقك واجهة برمجة تطبيقات killBackgroundProcesses() أو يحاول بأي شكل آخر. للتأثير في دورة حياة عمليات التطبيقات الأخرى، حتى في إصدارات أنظمة التشغيل القديمة. تم تصميم 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 الاتساق والتنفيذ على هذا التصميم. بعد وقت قصير من دخول عملية التطبيق في حالة التخزين المؤقت، لا يُسمَح بالعمل في الخلفية إلى أن يعيد مكوّن العملية الدخول إلى الحالة النشطة لدورة الحياة.

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