يتضمّن نظام التشغيل Android 14 تغييرات في السلوك قد تؤثر في تطبيقك.
تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على الإصدار 14 من نظام التشغيل Android،
بغض النظر عن
targetSdkVersion
. عليك
اختبار تطبيقك ثم تعديله حسب الحاجة لتفعيل هذه الميزات بشكل صحيح، حيث
ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف الإصدار 14 من Android.
الوظيفة الأساسية
يتم تلقائيًا رفض جدولة المنبّهات المحدَّدة الوقت.
Exact alarms are meant for user-intentioned notifications, or for actions that
need to happen at a precise time. Starting in Android 14, the
SCHEDULE_EXACT_ALARM
permission is no longer being pre-granted to most newly installed apps
targeting Android 13 and higher—the permission is denied by default.
Learn more about the changes to the permission for scheduling exact alarms.
يتم وضع أحداث البث المسجَّلة في السياق في قائمة الانتظار أثناء وضع التطبيقات في ذاكرة التخزين المؤقت.
في Android 14، يمكن للنظام وضع عمليات البث المسجّلة السياق في قائمة انتظار أثناء تشغيل التطبيق في حالة ذاكرة التخزين المؤقت. يشبه ذلك الوضع في قائمة المحتوى التالي. الذي قدَّمه نظام Android 12 (المستوى 31 من واجهة برمجة التطبيقات) لأداة الربط غير المتزامنة المعاملات. إنّ عمليات البث التي يعلَن عنها البيان ليست في قائمة الانتظار وتتم إزالة التطبيقات. من حالة التخزين المؤقت لتسليم البث.
عندما يترك التطبيق حالة ذاكرة التخزين المؤقت، مثل العودة إلى المقدّمة، يتم تنفيذ أي عمليات بث في قائمة انتظار. نُسخ متعددة من عمليات بث معيّنة في بث واحد. اعتمادًا على عوامل أخرى، مثل النظام وقد تتم إزالة التطبيقات من حالة ذاكرة التخزين المؤقت، وأي من التطبيقات التي سبق أن تمت إضافتها إلى قائمة الانتظار رسائل البث المباشر.
يمكن للتطبيقات إنهاء عملياتها في الخلفية فقط.
بدءًا من الإصدار 14 من نظام التشغيل Android، عندما يطلب تطبيقك killBackgroundProcesses()
،
لا يمكن لواجهة برمجة التطبيقات إنهاء سوى العمليات التي تعمل في الخلفية لتطبيقك.
إذا مررت اسم الحزمة لتطبيق آخر، فلن يكون لهذه الطريقة أي تأثير في في خلفية هذا التطبيق، وستظهر الرسالة التالية في Logcat:
Invalid packageName: com.example.anotherapp
يجب ألا يستخدم تطبيقك واجهة برمجة التطبيقات killBackgroundProcesses()
أو يحاول بأي شكل آخر.
للتأثير في دورة حياة عمليات التطبيقات الأخرى، حتى في إصدارات أنظمة التشغيل القديمة.
تم تصميم Android للاحتفاظ بالتطبيقات المخزّنة مؤقتًا في الخلفية ومنعها
تلقائيًا عندما يحتاج النظام إلى ذاكرة. إذا كان تطبيقك يغلق التطبيقات الأخرى
غير الضرورية، يمكن أن يؤدي ذلك إلى تقليل أداء النظام وزيادة استهلاك البطارية
من خلال طلب إعادة تشغيل هذه التطبيقات بالكامل لاحقًا، ما يستغرق موارد
أكثر بكثير من استئناف تطبيق حالي محفوظ في ذاكرة التخزين المؤقت.
يتم ضبط وحدة النقل القصوى على 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 introduces a new reason an app can be placed into the restricted standby bucket.
The app's jobs trigger ANR errors multiple times due to onStartJob
,
onStopJob
, or onBind
method timeouts.
(See JobScheduler reinforces callback and network behavior for changes
to onStartJob
and onStopJob
.)
To track whether or not the app has entered the restricted standby bucket,
we recommend logging with the API UsageStatsManager.getAppStandbyBucket()
on job execution or UsageStatsManager.queryEventsForSelf()
on app startup.
mlock محدودة بـ 64 كيلوبايت
In Android 14 (API level 34) and higher, the platform reduces the maximum memory
that can be locked using mlock()
to 64 KB per process. In
previous versions, the limit was 64 MB per process. This restriction
promotes better memory management across apps and the system. To provide more
consistency across devices, Android 14 adds a new CTS test for the
new mlock()
limit on compatible devices.
يفرض النظام استخدام موارد التطبيقات المخزَّنة مؤقتًا.
وفقًا للتصميم، تكون عملية التطبيق في حالة تخزين مؤقت عند نقلها إلى
الخلفية ولا يتم تشغيل أي مكوّنات أخرى لعملية التطبيق. وقد يتم إنهاء عملية التطبيق هذه
بسبب الضغط على ذاكرة النظام. إنّ أي عمل تؤديه مثيلات Activity
بعد استدعاء طريقة onStop()
ومحاولة
إعادتها، في هذه الحالة، غير موثوق به ويُنصح بعدم استخدامه.
يقدّم نظام Android 14 اتساقًا وفرضًا لهذا التصميم. بعد وقت قصير من دخول عملية التطبيق في حالة التخزين المؤقت، لا يُسمح بتنفيذ العمل في الخلفية إلى أن يعود أحد مكونات العملية إلى حالة نشطة من دورة الحياة.
من المفترض ألا تتأثر التطبيقات التي تستخدم واجهات برمجة تطبيقات نموذجية متاحة في إطار العمل، مثل
services وJobScheduler
وJetpack WorkManager،
بهذه التغييرات.
تجربة المستخدم
تغييرات على تجربة المستخدمين للإشعارات غير القابلة للإغلاق
If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.
This change applies to apps that prevent users from dismissing foreground
notifications by setting Notification.FLAG_ONGOING_EVENT
through
Notification.Builder#setOngoing(true)
or
NotificationCompat.Builder#setOngoing(true)
. The behavior of
FLAG_ONGOING_EVENT
has changed to make such notifications actually
dismissable by the user.
These kinds of notifications are still non-dismissable in the following conditions:
- When the phone is locked
- If the user selects a Clear all notification action (which helps with accidental dismissals)
Also, this new behavior doesn't apply to notifications in the following use cases:
CallStyle
notifications- Device policy controller (DPC) and supporting packages for enterprise
- Media notifications
- The default Search Selector package
معلومات أمان البيانات أكثر وضوحًا
To enhance user privacy, Android 14 increases the number of places where the system shows the information you have declared in the Play Console form. Currently, users can view this information in the Data safety section on your app's listing in Google Play.
We encourage you to review your app's location data sharing policies and take a moment to make any applicable updates to your app's Google Play Data safety section.
Learn more in the guide about how data safety information is more visible on Android 14.
تسهيل الاستخدام
الضبط غير الخطّي لحجم الخط ليصل إلى %200
从 Android 14 开始,系统支持字体放大高达 200%,为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的其他无障碍功能选项。
如果您已使用放大像素 (sp) 单位来定义文本大小,这项更改可能不会对您的应用产生太大影响。不过,您应在启用最大字号 (200%) 的情况下执行界面测试,确保应用能够在不影响易用性的情况下适应较大的字号。
الأمان
الحد الأدنى لمستوى واجهة برمجة التطبيقات المستهدف القابل للتثبيت
بدءًا من نظام التشغيل Android 14، سيتم توفير
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 التالي :com
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.