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

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

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

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

يعدّل نظام التشغيل Android 15 العديد من الإمكانات الأساسية لنظام Android أو يوسّع نطاقها.

التغييرات على حالة إيقاف الحزمة

软件包 FLAG_STOPPED 状态(用户可以通过在 AOSP build 中长按应用图标并选择“强制停止”来启用此状态)的用途一直是让应用保持在此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、将应用选择为动态壁纸等)来明确将应用从此状态移除。在 Android 15 中,我们更新了系统行为,使其与此预期行为保持一致。应用应仅通过直接或间接的用户操作从停止状态移除。

为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态移除时,系统会将 ACTION_BOOT_COMPLETED 广播传送到应用,以便应用有机会重新注册所有待处理 intent。

您可以调用新的 ApplicationStartInfo.wasForceStopped() 方法来确认应用是否已进入停止状态。

التوافق مع أحجام الصفحات البالغة 16 كيلوبايت

في السابق، كان نظام التشغيل Android يتيح فقط صفحات الذاكرة بحجم 4 كيلوبايت، ما ساعد في تحسين أداء ذاكرة النظام بما يتناسب مع إجمالي مساحة الذاكرة التي كانت تتوفّر عادةً في أجهزة Android. بدءًا من الإصدار 15 من نظام التشغيل Android، يتيح مشروع Android مفتوح المصدر (AOSP) استخدام الأجهزة التي تم ضبطها لاستخدام حجم صفحة يبلغ 16 كيلوبايت (أجهزة 16 كيلوبايت). إذا كان تطبيقك يستخدم أي مكتبات NDK، سواء بشكل مباشر أو غير مباشر من خلال حزمة تطوير برامج (SDK)، عليك إعادة إنشاء تطبيقك لكي يعمل على هذه الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت.

مع استمرار الشركات المصنّعة للأجهزة في تصميم أجهزة تتضمّن كميات أكبر من الذاكرة الفعلية (RAM)، ستستخدم العديد من هذه الأجهزة أحجام صفحات تبلغ 16 كيلوبايت (وأكبر في النهاية) لتحسين أداء الجهاز. تتيح إضافة دعم للأجهزة التي تستخدم صفحات بحجم 16 كيلوبايت تشغيل تطبيقك على هذه الأجهزة، كما تساعد تطبيقك في الاستفادة من التحسينات المرتبطة بالأداء. وبدون إعادة تجميع، لن تعمل التطبيقات على الأجهزة التي تستخدم صفحات الذاكرة بحجم 16 كيلوبايت في إصدارات Android المستقبلية.

لمساعدتك في إضافة إمكانية استخدام تطبيقك، قدّمنا إرشادات حول كيفية التحقّق مما إذا كان تطبيقك سيتأثر، وكيفية إعادة إنشاء تطبيقك (إذا كان ذلك منطبقًا)، وكيفية اختبار تطبيقك في بيئة بحجم 16 كيلوبايت باستخدام المحاكيات (بما في ذلك صور نظام Android 15 لمحاكي Android).

المزايا ومكاسب الأداء

تستهلك الأجهزة التي تم ضبطها على أحجام صفحات تبلغ 16 كيلوبايت مساحة أكبر قليلاً من الذاكرة في المتوسط، لكنها تُجري أيضًا تحسينات متنوعة في الأداء لكل من النظام والتطبيقات:

  • أوقات تشغيل التطبيق أقل عندما يكون النظام تحت ضغط الذاكرة: ‫3.16% انخفاضًا في المتوسط، مع تحسينات أكثر أهمية (تصل إلى %30) لبعض التطبيقات التي اختبرناها
  • انخفاض في استهلاك الطاقة أثناء تشغيل التطبيق: انخفاض بنسبة% 4.56 في المتوسّط
  • تشغيل أسرع للكاميرا: عمليات تشغيل أسرع بنسبة 4.48% في المتوسط، وعمليات تشغيل على البارد أسرع بنسبة 6.60% في المتوسط
  • مدة تشغيل النظام المحسَّنة: تحسّنت بنسبة %8 (950 ملي ثانية تقريبًا) في المتوسّط

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

التحقّق مما إذا كان تطبيقك قد تأثّر

إذا كان تطبيقك يستخدم أي رموز برمجية أصلية، عليك إعادة إنشاء تطبيقك ليتوافق مع الأجهزة التي تستخدم صفحات ذاكرة بحجم 16 كيلوبايت. إذا لم تكن متأكدًا مما إذا كان تطبيقك يستخدم رمزًا برمجيًا أصليًا، يمكنك استخدام "أداة تحليل حِزم APK" لتحديد ما إذا كان هناك أي رمز برمجي أصلي، ثم التحقّق من توافق أقسام ELF مع أي مكتبات مشتركة تجدها. يوفّر "استوديو Android" أيضًا ميزات تساعدك في رصد مشاكل المحاذاة تلقائيًا.

إذا كان تطبيقك يستخدم فقط الرموز البرمجية المكتوبة بلغة البرمجة Java أو Kotlin، بما في ذلك جميع المكتبات أو حِزم تطوير البرامج (SDK)، يكون تطبيقك متوافقًا مع الأجهزة التي تبلغ سعتها 16 كيلوبايت. ومع ذلك، ننصحك باختبار تطبيقك في بيئة بحجم 16 كيلوبايت للتأكّد من عدم حدوث أي تراجع غير متوقّع في سلوك التطبيق.

التغييرات المطلوبة لكي تتوافق بعض التطبيقات مع المساحة الخاصّة

Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.

All apps

Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.

Medical apps

When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.

The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.

For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.

Launcher apps

If you develop a launcher app, you must do the following before apps in the private space will be visible:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. Your app must declare the ACCESS_HIDDEN_PROFILES normal permission in your app's manifest file.

Launcher apps that declare the ACCESS_HIDDEN_PROFILES permission must handle the following private space use cases:

  1. Your app must have a separate launcher container for apps installed in the private space. Use the getLauncherUserInfo() method to determine which type of user profile is being handled.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the ACTION_PROFILE_AVAILABLE and ACTION_PROFILE_UNAVAILABLE broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts include EXTRA_USER, which your app can use to refer to the private profile user.

    You can also use the isQuietModeEnabled() method to check whether the private space profile is locked or not.

App store apps

The private space includes an "Install Apps" button that launches an implicit intent to install apps into the user's private space. In order for your app to receive this implicit intent, declare an <intent-filter> in your app's manifest file with a <category> of CATEGORY_APP_MARKET.

تمت إزالة خط رموز الإيموجي المستند إلى PNG

تم إزالة ملف خط الرموز التعبيرية القديم المستنِد إلى تنسيق PNG (NotoColorEmojiLegacy.ttf)، ولم يبق سوى الملف المستنِد إلى تنسيق ملفات المتجهات. بدءًا من الإصدار Android 13 (المستوى 33 من واجهة برمجة التطبيقات)، تغيّر ملف خط الرموز التعبيرية المستخدَم من قِبل أداة عرض الرموز التعبيرية في النظام من ملف يستند إلى PNG إلى ملف يستند إلى شكل مسطّح. احتفظ النظام بملف الخط القديم في Android 13 و14 لأسباب تتعلق بالتوافق، حتى تتمكّن التطبيقات التي تستخدم أدوات عرض الخطوط الخاصة بها من مواصلة استخدام ملف الخط القديم إلى أن تتمكّن من الترقية.

للتحقّق مما إذا كان تطبيقك متأثّرًا، ابحث في رمز تطبيقك عن إشارات إلى ملف NotoColorEmojiLegacy.ttf.

يمكنك اختيار تكييف تطبيقك بعدة طرق:

  • استخدام واجهات برمجة تطبيقات النظام الأساسي لعرض النص يمكنك عرض النص على Canvas مستند مستنِد إلى رسومات نقطية، واستخدامه للحصول على صورة أولية إذا لزم الأمر.
  • أضِف ميزة استخدام خطوط COLRv1 إلى تطبيقك. تتيح مكتبة FreeType المفتوحة المصدر استخدام خطوط COLRv1 في الإصدار 2.13.0 والإصدارات الأحدث.
  • كحل أخير، يمكنك تجميع ملف خط الرموز التعبيرية القديم (NotoColorEmoji.ttf) في حزمة APK، ولكن في هذه الحالة سيفتقد تطبيقك أحدث تعديلات الرموز التعبيرية. للحصول على مزيد من المعلومات، يُرجى الاطّلاع على صفحة مشروع Noto Emoji على GitHub.

زيادة الحد الأدنى لإصدار حزمة تطوير البرامج (SDK) المستهدَف من 23 إلى 24

Android 15 基于 在 Android 14 中进行的更改,并扩展了 安全性。在 Android 15 中, 无法安装低于 24 的 targetSdkVersion。 要求应用符合现代 API 级别有助于确保更好的安全性和 保护隐私。

恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私 更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

الأمان والخصوصية

يقدّم نظام التشغيل Android 15 إجراءات فعّالة لمكافحة عمليات الاحتيال باستخدام رموز المرور لمرة واحدة (OTP) وحماية المحتوى الحسّاس للمستخدم، مع التركيز على تعزيز أمان خدمة "مستمع الإشعارات" ووسائل حماية مشاركة الشاشة. تشمل التحسينات الرئيسية إخفاء الرموز المميّزة لمرة واحدة من الإشعارات التي يمكن للتطبيقات غير الموثوق بها الوصول إليها، وإخفاء الإشعارات أثناء مشاركة الشاشة، وتأمين أنشطة التطبيقات عند posted الرموز المميّزة لمرة واحدة. تهدف هذه التغييرات إلى الحفاظ على أمان المحتوى الحسّاس للمستخدمين من الجهات غير المصرّح لها.

على المطوّرين مراعاة ما يلي لضمان توافق تطبيقاتهم مع التغييرات في Android 15:

إخفاء كلمة المرور لمرة واحدة

سيمنع نظام التشغيل Android التطبيقات غير الموثوق بها التي تستخدم رمزًا مميّزًا NotificationListenerService من قراءة المحتوى غير المحذوف من الإشعارات التي تم رصد رمز مميّز للوقت فقط فيها. وتُستثنى من هذه القيود التطبيقات الموثوق بها، مثل عمليات ربط مدير الجهاز المصاحب.

ميزة "الحماية من مشاركة الشاشة"

  • يتم إخفاء محتوى الإشعارات أثناء جلسات مشاركة الشاشة للحفاظ على خصوصية المستخدم. إذا كان التطبيق ينفِّذ setPublicVersion()، يعرض Android الإصدار المتاح للجميع من الإشعار الذي يُستخدَم كإشعار بديل في السياقات غير الآمنة. في الحالات الأخرى، يتم إخفاء محتوى الإشعار بدون أي سياق إضافي.
  • يتم إخفاء المحتوى الحسّاس، مثل إدخال كلمة المرور، عن المشاهدين عن بُعد لمنع الكشف عن معلومات المستخدم الحسّاسة.
  • سيتم إخفاء الأنشطة من التطبيقات التي تنشر إشعارات أثناء مشاركة الشاشة إذا تم رصد رمز مميّز لمرة واحدة. يتم إخفاء محتوى التطبيق عن شاشة العميل المستعرض عن بُعد عند تشغيله.
  • بالإضافة إلى تحديد Android تلقائيًا للحقول الحسّاسة، يمكن للمطوّرين وضع علامة يدويًا على أجزاء من تطبيقاتهم على أنّها حسّاسة باستخدام رمز setContentSensitivity، والذي يتم إخفاؤه عن مشاهدي الشاشة عن بُعد أثناء مشاركة الشاشة.
  • يمكن للمطوّرين تفعيل خيار إيقاف إجراءات الحماية المطبّقة أثناء مشاركة الشاشة ضمن خيارات المطوّر للاستفادة من استثناءات إجراءات الحماية المتعلّقة بمشاركة الشاشة لأغراض العرض التجريبي أو الاختبار. يتم استثناء مسجل شاشة النظام التلقائي من هذه التغييرات، لأنّ التسجيلات تظل على الجهاز.

الكاميرا والوسائط

يُجري نظام التشغيل Android 15 التغييرات التالية على سلوك الكاميرا والوسائط في جميع التطبيقات.

يؤدي تشغيل الصوت مباشرةً أو إيقافه إلى إبطال المقاطع الصوتية التي تم فتحها سابقًا مباشرةً أو إيقافها عند بلوغ حدود الموارد

قبل الإصدار 15 من نظام التشغيل Android، إذا طلب تطبيق تشغيل الصوت مباشرةً أو نقله أثناء تشغيل تطبيق آخر للصوت وبلغ الحد الأقصى للموارد، لن يتمكّن التطبيق من فتح AudioTrack جديد.

بدءًا من الإصدار 15 من Android، عندما يطلب أحد التطبيقات تشغيل المحتوى مباشرةً أو من خلال التخزين المؤقت ويصل إلى حدود موارد التشغيل، يبطل النظام أي عناصر AudioTrack مفتوحة حاليًا تمنع تلبية طلب المقطع الصوتي الجديد.

(يتم عادةً فتح المقاطع الصوتية المباشرة والمقاطع الصوتية التي تم نقلها لتشغيل تنسيقات المحتوى الصوتي المضغوط. تشمل حالات الاستخدام الشائعة لتشغيل الصوت المباشر بث محتوى ملف صوتي مُشفَّر عبر HDMI إلى التلفزيون. يتم عادةً استخدام المقاطع الصوتية التي تم نقلها إلى الجهاز لتشغيل ملف صوتي مضغوط على جهاز جوّال مزوّد بتسريع الأجهزة لمعالجة الإشارات الرقمية (DSP).)

تجربة المستخدم وواجهة مستخدم النظام

يتضمّن Android 15 بعض التغييرات التي تهدف إلى توفير تجربة مستخدم أكثر اتساقًا وسهولة.

تفعيل الصور المتحركة لإيماءة الرجوع إلى الخلف التنبؤية للتطبيقات التي وافقت على استخدامها

اعتبارًا من الإصدار 15 من Android، تمت إزالة خيار المطوّر المتعلّق بالصور المتحركة التنبؤية للرجوع إلى الخلف. تظهر الآن صور System المتحرّكة، مثل الرجوع إلى الشاشة الرئيسية والتنقّل بين المهام وتنفيذ عدة أنشطة في الوقت نفسه، في التطبيقات التي فعّلت ميزة الإيماءة التوقّعية للرجوع إما بالكامل أو على مستوى نشاط معيّن. إذا كان تطبيقك متأثرًا، اتّخذ الخطوات التالية:

  • تأكَّد من نقل بيانات تطبيقك بشكلٍ صحيح لاستخدام لفتة التراجع العميق التوقّعية.
  • تأكَّد من أنّ عمليات انتقال الأجزاء تعمل مع ميزة التنقّل التلقائي للخلف.
  • توقَّف عن استخدام الرسوم المتحركة وتأثيرات الانتقال في إطار العمل واستخدِم رسوم متحركة وتأثيرات انتقال androidx بدلاً من ذلك.
  • نقل البيانات بعيدًا عن الحِزم الخلفية التي لا يعرفها FragmentManager استخدِم بدلاً من ذلك حِزم الخلفية التي تديرها FragmentManager أو مكوّن "التنقّل" .

إيقاف التطبيقات المصغّرة عندما يوقف المستخدم تطبيقًا قسرًا

如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。

系统会在用户下次启动应用时重新启用这些微件。

如需了解详情,请参阅对软件包停止状态的更改

تنبّه شريحة شريط حالة عرض الوسائط المستخدمين إلى مشاركة الشاشة وإرسال المحتوى وتسجيله

تؤدي إساءة استخدام ميزة "إلقاء الشاشة" إلى تعريض بيانات المستخدمين الخاصة، مثل معلوماتهم المالية، لأنّ المستخدمين لا يدركون أنّه تتم مشاركة شاشة أجهزتهم.

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

شريحة شريط الحالة لمشاركة الشاشة والبث والتسجيل

التحقّق مما إذا كان تطبيقك قد تأثّر

يتضمّن تطبيقك تلقائيًا شريحة شريط الحالة ويوقف تلقائيًا إرسال الشاشة عند تفعيل شاشة القفل.

للاطّلاع على مزيد من المعلومات عن كيفية اختبار تطبيقك لاستخدامات هذه الحالات، يُرجى الاطّلاع على شريحة "شريط الحالة" والإيقاف التلقائي.

قيود الوصول إلى الشبكة في الخلفية

في Android 15، تتلقّى التطبيقات التي تبدأ طلب شبكة خارج عملية دورة حياة صالحة استثناءً. عادةً ما يكون UnknownHostException أو IOException آخر مرتبط بمقبس. إنّ طلبات الشبكة التي تحدث خارج دورة حياة صالحة ناتجة عادةً عن مواصلة التطبيقات طلب الشبكة بدون علم حتى بعد أن يصبح التطبيق غير نشط.

للحدّ من هذا الاستثناء، تأكَّد من أنّ طلبات الشبكة على دراية بدورة الحياة وأنّها تُلغى عند مغادرة دورة حياة عملية صالحة باستخدام المكوّنات على دراية بدورة الحياة. إذا كان من المهم أن يتم إرسال طلب الشبكة حتى عندما يغادر المستخدم التطبيق، ننصحك بجدولة طلب الشبكة باستخدام WorkManager أو مواصلة مهمة تظهر للمستخدم باستخدام الخدمة التي تعمل في المقدّمة.

الميزات التي سيتم إيقافها نهائيًا

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

يعني الإيقاف النهائي أنّنا أوقفنا الدعم الرسمي لواجهات برمجة التطبيقات، ولكن ستظل متاحة للمطوّرين. لمزيد من المعلومات حول عمليات الإيقاف النهائي المهمة في هذا الإصدار من Android، يمكنك الاطّلاع على صفحة عمليات الإيقاف النهائي.