يتضمّن نظام Android 14 الأساسي تغييرات في السلوك قد تؤثر في تطبيقك. وتنطبق التغييرات التالية في السلوك على جميع التطبيقات عند تشغيلها على الإصدار 14 من Android،
بغض النظر عن
targetSdkVersion
. يجب عليك اختبار تطبيقك ثم تعديله حسب الحاجة لدعم ذلك بشكل صحيح، حيثما أمكن.
تأكَّد أيضًا من مراجعة قائمة التغييرات في السلوك التي تؤثر فقط في التطبيقات التي تستهدف Android 14.
الوظيفة الأساسية
يتم رفض المنبّهات الدقيقة المحدَّدة تلقائيًا.
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) لمعاملات الصنف غير المتزامن. لا يتم وضع عمليات البث التي تم الإعلان عنها بتنسيق البيان في قائمة الانتظار، وتتم إزالة التطبيقات من حالة التخزين المؤقت لتسليم البث.
عندما يترك التطبيق حالة التخزين المؤقت، مثل العودة إلى المقدّمة، يرسل النظام أي بث في قائمة الانتظار. يمكن دمج عدة أحداث بث معين في بث واحد. استنادًا إلى عوامل أخرى، مثل كفاءة النظام، قد تتم إزالة التطبيقات من حالة ذاكرة التخزين المؤقت ويتم تسليم أي بث في قائمة الانتظار سابقًا.
يمكن للتطبيقات إنهاء عملياتها في الخلفية فقط
从 Android 14 开始,当您的应用调用 killBackgroundProcesses()
时,该 API 只能终止您自己应用的后台进程。
如果您传入另一个应用的软件包名称,此方法对该应用的后台进程没有影响,并且 Logcat 中会显示以下消息:
Invalid packageName: com.example.anotherapp
您的应用不应使用 killBackgroundProcesses()
API,也不得以其他方式尝试影响其他应用的进程生命周期,即使在旧版操作系统上也是如此。Android 旨在让缓存应用在后台运行,并在系统需要内存时自动终止它们。如果您的应用会不必要地终止其他应用,则由于之后需要完全重启这些应用,因此可能会降低系统性能并增加耗电量,这比恢复现有缓存应用所消耗的资源要多得多。
تم ضبط MTU على 517 لأول عميل GATT يطلب MTU.
بدءًا من نظام التشغيل Android 14، تلتزم حِزم البلوتوث في Android بشكل صارم
بالإصدار 5.2 من مواصفات البلوتوث الأساسية وتطلب
ضبط BLE ATT MTU على 517 بايت عندما يطلب عميل GATT الأول وحدة MTU باستخدام واجهة برمجة التطبيقات BluetoothGatt#requestMtu(int)
، ويتجاهل جميع طلبات MTU اللاحقة المتعلّقة بهذا الاتصال.
لمعالجة هذا التغيير وجعل تطبيقك أكثر فعالية، يُرجى مراعاة الخيارات التالية:
- يجب أن يستجيب الجهاز الملحق لطلب MTU لجهاز Android بقيمة
معقولة يمكن للجهاز الملحق استيعابها. وستكون القيمة النهائية التي تم التفاوض عليها هي الحدّ الأدنى للقيمة التي يطلبها Android والقيمة المقدَّمة عن بُعد (أي
min(517, remoteMtu)
).- قد يتطلب تنفيذ هذا الإصلاح تحديث البرامج الثابتة للأجهزة الملحقة.
- بدلاً من ذلك، يمكنك تحديد سمات GATT استنادًا إلى الحدّ الأدنى
بين القيمة المتوافقة المعروفة للأجهزة الملحقة وتغيير MTU الذي تم تلقّيه.
- تذكير بأنه يجب تقليل 5 بايت من الحجم المسموح به للعناوين
- على سبيل المثال:
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
سبب جديد لإضافة تطبيق إلى حزمة الاستعداد المحدود
Android 14 引入了将应用放入受限待机存储分区的新原因。由于 onStartJob
、onStopJob
或 onBind
方法超时,应用的作业会多次触发 ANR 错误。(如需了解对 onStartJob
和 onStopJob
的更改,请参阅 JobScheduler 加强回调和网络行为。)
如需跟踪应用是否已进入受限待机存储分区,我们建议您在作业执行时使用 API UsageStatsManager.getAppStandbyBucket()
进行日志记录,或在应用启动时使用 UsageStatsManager.queryEventsForSelf()
进行日志记录。
حجم الحد الأقصى 64 كيلوبايت
在 Android 14 及更高版本中,平台将可以使用 mlock()
锁定的最大内存减少到每个进程 64 KB。在以前的版本中,每个进程的上限是 64 MB。这一新限制可促进跨应用和系统更好地进行内存管理。为了在设备间提供更高的一致性,Android 14 针对兼容设备上的新 mlock()
限制添加了新的 CTS 测试。
يفرض النظام استخدام موارد التطبيق في ذاكرة التخزين المؤقت
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 ميزة "الوصول إلى الصور المحددة" التي تسمح للمستخدمين بمنح التطبيقات إذن الوصول إلى صور وفيديوهات معيّنة في مكتبتهم، بدلاً من منح الوصول إلى جميع الوسائط من نوع معيّن.
إذا لم تكن تستخدم "أداة اختيار الصور" حتى الآن، ننصحك باستخدامها في تطبيقك لتوفير تجربة متّسقة لاختيار الصور والفيديوهات التي تحسِّن أيضًا خصوصية المستخدم بدون الحاجة إلى طلب أي أذونات مساحة التخزين.
إذا كنت تحتفظ بأداة اختيار المعرض باستخدام أذونات مساحة التخزين وكنت بحاجة إلى التحكّم بشكل كامل في عملية التنفيذ، يمكنك تعديل عملية التنفيذ لاستخدام إذن READ_MEDIA_VISUAL_USER_SELECTED
الجديد. إذا لم يستخدم تطبيقك الإذن الجديد، يشغّل النظام تطبيقك في وضع التوافق.
إشعارات Intent بملء الشاشة
在 Android 11(API 级别 30)中,任何应用都可以在手机处于锁定状态时使用 Notification.Builder.setFullScreenIntent
发送全屏 intent。您可以通过在 AndroidManifest 中声明 USE_FULL_SCREEN_INTENT
权限,在应用安装时自动授予此权限。
全屏 intent 通知适用于需要用户立即注意的极高优先级通知,例如用户来电或用户配置的闹钟设置。从 Android 14 开始,获准使用此权限的应用仅限于提供通话和闹钟的应用。对于不适合此情况的任何应用,Google Play 商店会撤消其默认的 USE_FULL_SCREEN_INTENT
权限。
在用户更新到 Android 14 之前,在手机上安装的应用仍拥有此权限。用户可以开启和关闭此权限。
您可以使用新 API NotificationManager.canUseFullScreenIntent
检查应用是否具有该权限;如果没有,应用可以使用新 intent ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT
启动设置页面,在该页面中,用户可以授予权限。
تغييرات في طريقة تلقّي المستخدمين للإشعارات التي لا يمكن إغلاقها
如果您的应用向用户显示不可关闭的前台通知,请注意:Android 14 已更改此行为,允许用户关闭此类通知。
这项变更适用于通过 Notification.Builder#setOngoing(true)
或 NotificationCompat.Builder#setOngoing(true)
设置 Notification.FLAG_ONGOING_EVENT
来阻止用户关闭前台通知的应用。FLAG_ONGOING_EVENT
的行为已发生变化,使用户实际上能够关闭此类通知。
在以下情况下,此类通知仍不可关闭:
- 当手机处于锁定状态时
- 如果用户选择全部清除通知操作(有助于防止意外关闭)
此外,这一新行为不适用于以下用例中的不可关闭通知:
- 使用
MediaStyle
创建的通知 - 安全和隐私用例的政策限制使用
- 企业设备政策控制器 (DPC) 和支持软件包
معلومات "أمان البيانات" مرئية بشكل أكبر
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 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 التالي:
adb install --bypass-low-target-sdk-block FILENAME.apk
قد يتم إخفاء أسماء حِزم مالك الوسائط
يوفّر متجر الوسائط طلبات البحث عن العمود OWNER_PACKAGE_NAME
، الذي يشير إلى التطبيق الذي خزّن ملف وسائط معيّن. بدءًا من نظام التشغيل Android
14، يتم تنقيح هذه القيمة ما لم ينطبق أحد الشروط التالية على الأقل:
- يحتوي التطبيق الذي خزّن ملف الوسائط على اسم حزمة يظهر دائمًا للتطبيقات الأخرى.
ويطلب التطبيق الذي يستعلم من متجر الوسائط الحصول على إذن
QUERY_ALL_PACKAGES
.
تعرَّف على المزيد من المعلومات حول كيفية تصفية Android لمستوى ظهور الحزمة لأغراض الخصوصية.