يتضمّن الإصدار 14 من نظام التشغيل Android تغييرات في السلوك قد تؤثّر في تطبيقك.
تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على الإصدار 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.
يتم وضع عمليات البث المسجَّلة حسب السياق في قائمة الانتظار أثناء تخزين التطبيقات مؤقتًا
On Android 14, the system can place context-registered broadcasts in a queue while the app is in the cached state. This is similar to the queuing behavior that Android 12 (API level 31) introduced for async binder transactions. Manifest-declared broadcasts aren't queued, and apps are removed from the cached state for broadcast delivery.
When the app leaves the cached state, such as returning to the foreground, the system delivers any queued broadcasts. Multiple instances of certain broadcasts might be merged into one broadcast. Depending on other factors, such as system health, apps might be removed from the cached state, and any previously queued broadcasts are delivered.
يمكن للتطبيقات إنهاء عمليات الخلفية الخاصة بها فقط
Starting in Android 14, when your app calls killBackgroundProcesses(),
the API can kill only the background processes of your own app.
If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:
Invalid packageName: com.example.anotherapp
Your app shouldn't use the killBackgroundProcesses() API or otherwise attempt
to influence the process lifecycle of other apps, even on older OS versions.
Android is designed to keep cached apps in the background and kill them
automatically when the system needs memory. If your app kills other apps
unnecessarily, it can reduce system performance and increase battery consumption
by requiring full restarts of those apps later, which takes significantly more
resources than resuming an existing cached app.
تم ضبط وحدة النقل القصوى (MTU) على 517 لأول عميل GATT يطلب وحدة نقل قصوى.
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 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.
يفرض النظام استخدام موارد التطبيقات المخزَّنة مؤقتًا
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) والحِزم الداعمة للمؤسسات
- إشعارات الوسائط
- حزمة "أداة اختيار البحث" التلقائية
معلومات "أمان البيانات" أكثر وضوحًا
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%
Starting in Android 14, the system supports font scaling up to 200%, providing users with additional accessibility options.
If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.
الأمان
الحد الأدنى لمستوى واجهة برمجة التطبيقات المستهدف القابل للتثبيت
بدءًا من نظام التشغيل 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
قد يتم إخفاء أسماء حِزم مالكي الوسائط
يتيح "متجر الوسائط" طلبات البحث عن عمود OWNER_PACKAGE_NAME الذي يشير إلى التطبيق الذي حفظ ملف وسائط معيّنًا. بدءًا من الإصدار
14 من نظام التشغيل Android، يتم إخفاء هذه القيمة ما لم يكن أحد الشروط التالية
صحيحًا على الأقل:
- يحتوي التطبيق الذي يخزّن ملف الوسائط على اسم حزمة يكون مرئيًا دائمًا للتطبيقات الأخرى.
يطلب التطبيق الذي يجري طلب بحث في متجر الوسائط إذن
QUERY_ALL_PACKAGES.
مزيد من المعلومات حول كيفية فلترة Android لمستوى رؤية الحِزم لأغراض تتعلّق بالخصوصية