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

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

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

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

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

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

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

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

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

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

从历史上看,Android 仅支持 4 KB 内存页面大小,这优化了系统内存性能,以适应 Android 设备通常拥有的平均总内存量。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或通过 SDK 间接使用任何 NDK 库,则需要重新构建应用,才能在这些 16 KB 设备上运行。

随着设备制造商不断制造出具有更大物理内存 (RAM) 的设备,许多此类设备将采用 16 KB(最终甚至更大)的页面大小来优化设备性能。添加对 16 KB 页面大小设备的支持,可让您的应用在这些设备上运行,并帮助您的应用受益于相关的性能改进。如果不重新编译,应用将无法在未来 Android 版本的 16 KB 设备上运行。

为帮助您为应用添加支持,我们提供了相关指南,介绍了如何检查应用是否受到影响、如何重新构建应用(如果适用),以及如何使用模拟器(包括 Android 模拟器的 Android 15 系统映像)在 16 KB 环境中测试应用

优势和性能提升

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

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

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

检查您的应用是否受到影响

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

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

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

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

جميع التطبيقات

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

تطبيقات طبية

عندما يقفل المستخدم المساحة الخاصة، يتم إيقاف جميع التطبيقات في المساحة الخاصة، ولا يمكن لهذه التطبيقات تنفيذ الأنشطة في المقدّمة أو الخلفية، بما في ذلك عرض الإشعارات. قد يؤثر هذا السلوك بشكلٍ كبير في استخدام التطبيقات الطبية المثبَّتة في المساحة الخاصة و عملها.

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

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

تطبيقات مشغّل التطبيقات

إذا كنت تطوّر تطبيق مشغّل، عليك إجراء ما يلي قبل أن تصبح التطبيقات في المساحة الخاصة مرئية:

  1. يجب تعيين تطبيقك كتطبيق مشغّل تلقائي للجهاز، أي أن يكون لديه الدور ROLE_HOME.
  2. يجب أن يُعلن تطبيقك عن ACCESS_HIDDEN_PROFILES الإذن العادي في ملف بيان تطبيقك.

على تطبيقات المشغّلات التي تذكر إذن ACCESS_HIDDEN_PROFILES التعامل مع حالات استخدام المساحة الخاصة التالية:

  1. يجب أن يتضمّن تطبيقك حاوية مشغِّل تطبيقات منفصلة للتطبيقات المثبَّتة في المساحة الخاصة. استخدِم طريقة getLauncherUserInfo() لتحديد نوع الملف الشخصي للمستخدم الذي تتم معالجته.
  2. يجب أن يتمكّن المستخدم من إخفاء حاوية المساحة الخاصة وعرضها.
  3. يجب أن يتمكّن المستخدم من قفل حاوية المساحة الخاصة وفتح قفلها. استخدِم requestQuietModeEnabled() لقفل المساحة الخاصة (بمروّر true) أو فتح قفلها (بمروّر false).
  4. عندما تكون المساحة الخاصة مقفلة، يجب ألا تظهر أي تطبيقات في حاوية المساحة الخاصة أو يمكن العثور عليها من خلال آليات مثل البحث. يجب أن يُسجِّل تطبيقك جهاز استقبال لبثَّي ACTION_PROFILE_AVAILABLE و ACTION_PROFILE_UNAVAILABLE وتعديل واجهة المستخدم في تطبيقك عند تغيُّر حالة حاوية المساحة الخاصة (مقفلة أو غير مقفلة). يتضمّن كلا البثَّين EXTRA_USER، والذي يمكن لتطبيقك استخدامه للإشارة إلى مستخدم الملف الشخصي الخاص.

    يمكنك أيضًا استخدام طريقة isQuietModeEnabled() للتحقّق مما إذا كان الملف الشخصي للمساحة الخاصة مقفلًا أم لا.

تطبيقات متجر التطبيقات

تتضمّن المساحة الخاصة زر "تثبيت التطبيقات" الذي يطلق نية ضمنية لتثبيت التطبيقات في المساحة الخاصة للمستخدم. لكي يتلقّى تطبيقك هذا الإجراء الضمني، يجب إدراج <intent-filter> في ملف بيان تطبيقك مع <category> من 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) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

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

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

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

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

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

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

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

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

تفعيل إيماءة إظهار شاشة الرجوع للتطبيقات التي وافقت على ذلك

从 Android 15 开始,预测性返回动画的开发者选项已被移除。现在,如果应用已完全或在 activity 级别选择启用预测性返回手势,则系统会为其显示“返回主屏幕”“跨任务”和“跨 activity”等系统动画。如果您的应用受到了影响,请执行以下操作:

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保 fragment 转场效果可与预测性返回导航搭配使用。
  • 请弃用动画和框架过渡,改用动画和 androidx 过渡。
  • FragmentManager 不认识的返回堆栈迁移。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

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

إذا أوقف مستخدم تطبيقًا على جهاز يعمل بنظام Android 15 بشكلٍ قسري، سيؤدي ذلك إلى إيقاف جميع التطبيقات المصغّرة للتطبيق مؤقتًا. تكون التطبيقات المصغّرة غير مفعّلة، ولا يمكن للمستخدِم التفاعل معها. ويعود السبب في ذلك إلى أنّه بدءًا من Android 15، يُلغي النظام جميع نوايا التطبيق التي في انتظار المراجعة عند فرض إغلاق التطبيق.

ويعيد النظام تفعيل هذه التطبيقات المصغّرة في المرة التالية التي يشغّل فيها المستخدم التطبيق.

لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في حالة إيقاف الحزمة.

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

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

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

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

检查您的应用是否受到影响

默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。

如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止

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

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

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

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

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

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