行为变更:所有应用

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 KB 页面大小

一直以来,Android 仅支持 4 KB 的内存页面大小,针对 Android 设备通常拥有的平均总内存量,系统内存性能进行了优化。从 Android 15 开始,Android 支持配置为使用 16 KB 页面大小的设备(即 16 KB 设备)。

随着设备制造商不断打造具有更大物理内存 (RAM) 的设备,这些设备中的许多可能会配置 16 KB(最终更大)的页面大小,以优化设备的性能。添加对 16 KB 设备的支持可让您的应用在这些设备上运行,并帮助您的应用从相关性能改进中受益。为了帮助您解决此问题,我们提供了一些指南,帮助您了解如何检查您的应用是否受到影响、如何重新构建应用(如果适用),以及如何同时使用模拟器和实体设备在 16 KB 的环境中测试应用

优势和性能提升

配置为 16 KB 页面的设备平均使用的内存会略多,但系统和应用性能也会有所提升:

  • 在系统面临内存压力时缩短应用启动时间:平均降低了 3.16%,对于我们测试过的一些应用而言,改进幅度更显著(提升幅度高达 30%)
  • 降低应用启动时的功耗:平均降低 4.56%
  • 相机启动速度更快:平均热启动速度加快 4.48%,冷启动速度平均加快 6.60%
  • 缩短了系统启动时间:平均缩短了 1.5%(约 0.8 秒)

这些改进基于我们的初始测试,实际设备上的结果可能会有所不同。在继续测试的过程中,我们会进一步分析应用的潜在益处。

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

如果您的应用使用任何原生代码,则您应重新构建支持 16 KB 设备的应用。如果您不确定自己的应用是否使用了原生代码,可以使用 APK 分析器来确定是否存在任何原生代码

如果您的应用仅使用以 Java 编程语言或 Kotlin 编写的代码(包括所有库或 SDK),那么该应用已经支持 16 KB 设备。不过,我们建议您在 16 KB 的环境中测试应用,以确认应用行为是否存在意外回归问题。

让部分应用支持私密空间所需的更改

המרחב הפרטי היא תכונה חדשה ב-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 (API ברמה 33), קובץ הגופן של האמוג'י ששימש את המערכת לעיבוד אמוג'י השתנה מקובץ PNG לקובץ מבוסס-וקטור. המערכת שמרה את קובץ הגופן הקודם ב-Android 13 ו-14 מטעמי תאימות, כדי אפליקציות עם כלים לעיבוד גופנים משלהן יוכלו להמשיך להשתמש בקובץ הגופנים הקודם עד לביצוע השדרוג.

כדי לבדוק אם האפליקציה מושפעת, כדאי לחפש בקוד האפליקציה הפניות אל קובץ NotoColorEmojiLegacy.ttf.

אפשר לבחור להתאים את האפליקציה בכמה דרכים:

  • שימוש בממשקי API של הפלטפורמה לעיבוד טקסט. אפשר לעבד טקסט למגובה במפת סיביות (bitmap) Canvas ומשתמשים בה כדי לקבל תמונה גולמית במקרה הצורך.
  • הוספת תמיכה בגופן COLRv1 לאפליקציה. ספריית הקוד הפתוח של FreeType תומך ב-COLRv1 בגרסה 2.13.0 גבוהה יותר.
  • כמוצא אחרון, אפשר לקבץ את קובץ הגופן הקודם של האמוג'י (NotoColorEmoji.ttf) ל-APK, אבל במקרה כזה האפליקציה שלכם לא תכלול את עדכוני האמוג'י האחרונים. עבור מידע נוסף זמין במאמר פרויקט Noto אמוג'י ב-GitHub .

将最低目标 SDK 版本从 23 提高到了 24

Android 15 基于 Android 14 中发生的变更构建,并进一步扩展了这种安全性。在 Android 15 中,targetSdkVersion 低于 24 的应用将无法安装。要求应用满足现代 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 低于 24 的所有应用都将保持安装状态。

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

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

摄像头和媒体

Android 15 针对所有用户的相机和媒体行为做出了以下变更 。

现在,当达到资源限制时,直接和分流音频播放会使之前打开的直接或分流音轨失效

在 Android 15 之前,如果某个应用在另一个应用正在播放音频时请求直接播放或分流音频播放,并且已达到资源限制,此应用将无法打开新的 AudioTrack

从 Android 15 开始,当应用请求直接或分流播放并且达到资源限制时,系统会使当前打开的所有 AudioTrack 对象失效,从而阻止执行新的轨道请求。

(直接和分流音轨通常会打开,以播放压缩的音频格式。播放直接音频的常见用例包括通过 HDMI 将编码音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)

用户体验和系统界面

Android 15 包含一些旨在打造更一致、更完善的 直观的用户体验。

已为已选择启用预测性返回动画功能启用

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

  • 确保您的应用已正确迁移,以使用预测性返回手势。
  • 确保您的 fragment 转换支持预测性返回导航。
  • 停止使用动画和框架转换,并改用 Animator 和 AndroidX 转换。
  • FragmentManager 不知道的返回堆栈中迁出。请改用由 FragmentManager 或 Navigation 组件管理的返回堆栈。

用户强行停止应用时停用的微件

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

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

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

废弃

随着每个版本的发布,特定的 Android API 可能会过时或需要 进行了重构,以提供更好的开发者体验或支持新平台 capabilities.在这些情况下,我们正式弃用已过时的 API,并 引导开发者改用替代 API。

弃用意味着我们已结束对这些 API 的正式支持,但它们 也可供开发者使用要详细了解值得关注的重要内容 请参阅弃用页面