يتضمّن الإصدار 14 من نظام التشغيل Android تغييرات في السلوك قد تؤثّر في تطبيقك.
تنطبق تغييرات السلوك التالية على جميع التطبيقات عند تشغيلها على الإصدار 14 من نظام التشغيل Android،
بغض النظر عن
targetSdkVersion
. عليك اختبار تطبيقك ثم تعديله حسب الحاجة ليتوافق مع هذه الميزات بشكل صحيح، حيثما ينطبق ذلك.
احرص أيضًا على مراجعة قائمة التغييرات في السلوك التي تؤثّر فقط في التطبيقات التي تستهدف الإصدار 14 من نظام التشغيل Android.
الوظيفة الأساسية
يتم رفض المنبّهات المحدَّدة الوقت تلقائيًا
تكون المنبّهات المحدّدة الوقت مخصّصة للإشعارات التي يقصدها المستخدم أو للإجراءات التي
يجب أن تحدث في وقت محدد. بدءًا من الإصدار 14 من نظام التشغيل Android، لم يعُد يتم منح الإذن
SCHEDULE_EXACT_ALARM
مسبقًا لمعظم التطبيقات المثبَّتة حديثًا
التي تستهدف الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث، ويتم رفضه تلقائيًا.
مزيد من المعلومات عن التغييرات في الإذن لجدولة رسائل التنبيهات المُحدَّدة
يتم وضع عمليات البث المسجّلة حسب السياق في قائمة الانتظار أثناء تخزين التطبيقات مؤقتًا
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.
يمكن للتطبيقات إنهاء عمليات الخلفية الخاصة بها فقط
بدءًا من الإصدار 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 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 كيلوبايت
في الإصدار 14 من نظام التشغيل Android (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يخفض النظام الأساسي الحد الأقصى للذاكرة
التي يمكن قفلها باستخدام mlock()
إلى 64 كيلوبايت لكل عملية. في الإصدارات السابقة، كان الحد الأقصى هو 64 ميغابايت لكل عملية. ويؤدي هذا القيد
إلى تحسين إدارة الذاكرة على مستوى التطبيقات والنظام. لتوفير المزيد من
الاتساق على جميع الأجهزة، يضيف Android 14 اختبار CTS جديدًا لحدود mlock()
الجديدة على الأجهزة المتوافقة.
يفرض النظام استخدام موارد التطبيقات المخزَّنة مؤقتًا
وفقًا للتصميم، تكون عملية التطبيق في حالة تخزين مؤقت عند نقلها إلى
الخلفية ولا يتم تشغيل أي مكوّنات أخرى لعملية التطبيق. وقد يتم إنهاء عملية التطبيق هذه
بسبب الضغط على ذاكرة النظام. إنّ أي عمل تؤديه مثيلات 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) والحِزم الداعمة للمؤسسات
- إشعارات الوسائط
- حزمة "أداة اختيار البحث" التلقائية
معلومات "أمان البيانات" أكثر وضوحًا
为了加强用户隐私保护,Android 14 增加了系统显示您在 Play 管理中心表单中声明的信息的位置数量。目前,用户可以在 Google Play 中的应用详情的数据安全部分查看此信息。
我们建议您查看应用的位置数据分享政策,并花一点时间对应用的 Google Play“数据安全”部分进行任何适用的更新。
如需了解详情,请参阅有关如何在 Android 14 上以更显眼的方式显示数据安全信息的指南。
تسهيل الاستخدام
الضبط غير الخطي لحجم الخط بنسبة 200%
بدءًا من الإصدار 14 من Android، يتيح النظام تكبير الخط بنسبة تصل إلى %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
قد يتم إخفاء أسماء حِزم مالكي الوسائط
يتيح "متجر الوسائط" طلبات البحث عن عمود OWNER_PACKAGE_NAME
الذي يشير إلى التطبيق الذي حفظ ملف وسائط معيّنًا. بدءًا من الإصدار
14 من نظام التشغيل Android، يتم إخفاء هذه القيمة ما لم يكن أحد الشروط التالية
صحيحًا على الأقل:
- يحتوي التطبيق الذي يخزّن ملف الوسائط على اسم حزمة يكون مرئيًا دائمًا للتطبيقات الأخرى.
يطلب التطبيق الذي يجري طلب بحث في متجر الوسائط إذن
QUERY_ALL_PACKAGES
.
مزيد من المعلومات حول كيفية فلترة Android لمستوى رؤية الحِزم لأغراض تتعلّق بالخصوصية