Android 15 平台包含可能影响您应用的行为变更。无论 targetSdkVersion
是多少,以下行为变更都适用于在 Android 15 上运行的所有应用。您应该测试您的应用,并根据需要进行修改以正确支持这些变更(如果适用)。
另外,请务必查看仅影响以 Android 15 为目标的应用的行为变更列表。
核心功能
Android 15 修改或扩展了 Android 系统的各种核心功能。
软件包停止状态的变更
软件包 FLAG_STOPPED
状态(用户可以通过长按应用图标并选择“强制停止”在 AOSP build 中启用此状态)的意图始终是让应用保持此状态,直到用户通过直接启动应用或间接与应用交互(通过分享表单或小部件、选择应用作为动态壁纸等)明确地将应用从此状态中移除。在 Android 15 中,我们已将系统行为更新为与此预期行为保持一致。应用应仅通过直接或间接的用户操作才能从停止状态中移除。
为支持预期行为,除了现有限制外,当应用在运行 Android 15 的设备上进入停止状态时,系统还会取消所有待定 intent。当用户的操作将应用从停止状态中移除时,系统会向应用发送 ACTION_BOOT_COMPLETED
广播,从而提供重新注册任何待定 intent 的机会。
您可以调用新的 ApplicationStartInfo.wasForceStopped()
方法来确认应用是否已进入停止状态。
支持 16 KB 页面大小
过去,Android 仅支持 4 KB 内存页面大小,这优化了 Android 设备通常拥有的平均总内存量下的系统内存性能。从 Android 15 开始,AOSP 支持配置为使用 16 KB 页面大小的设备(16 KB 设备)。如果您的应用直接或间接通过 SDK 使用任何 NDK 库,则需要重新构建您的应用,才能在这些 16 KB 设备上运行。
随着设备制造商继续构建具有更大物理内存 (RAM) 的设备,其中许多设备将采用 16 KB(并最终更大)的页面大小来优化设备的性能。添加对 16 KB 页面大小设备的支持使您的应用能够在这些设备上运行,并帮助您的应用从相关的性能改进中受益。如果不重新编译,应用可能无法在未来的 Android 版本中投入生产时在 16 KB 设备上运行。
为了帮助您为应用添加支持,我们提供了关于如何检查应用是否受影响、如何重新构建应用(如果适用)以及如何使用模拟器(包括适用于 Android Emulator 的 Android 15 系统映像)在 16 KB 环境中测试应用的指南。
优势和性能提升
配置 16 KB 页面大小的设备平均会使用稍多一些的内存,但系统和应用也会获得各种性能改进
- 系统内存压力下的应用启动时间更短:平均降低 3.16%,我们测试的某些应用改进更显著(最高达 30%)
- 应用启动期间功耗降低:平均降低 4.56%
- 摄像头启动更快:平均热启动快 4.48%,平均冷启动快 6.60%
- 系统启动时间缩短:平均缩短 8%(约 950 毫秒)
这些改进基于我们的初步测试,实际设备上的结果可能有所不同。随着我们继续测试,我们将提供对应用潜在收益的额外分析。
检查您的应用是否受影响
如果您的应用使用任何原生代码,则应重新构建您的应用以支持 16 KB 设备。如果您不确定您的应用是否使用原生代码,可以使用 APK Analyzer 来识别是否存在任何原生代码,然后检查您找到的任何共享库的 ELF 段对齐方式。
如果您的应用仅使用 Java 编程语言或 Kotlin 编写的代码(包括所有库或 SDK),则您的应用已支持 16 KB 设备。尽管如此,我们仍建议您在 16 KB 环境中测试您的应用,以验证应用行为没有出现意外的回归。
某些应用支持私密空间所需的变更
私密空间是 Android 15 中的一项新功能,可让用户在其设备上创建一个独立空间,通过额外的身份验证层,将敏感应用与窥探隔离开来。由于私密空间中的应用可见性受到限制,某些类型的应用需要采取额外步骤才能查看并与用户私密空间中的应用互动。
所有应用
由于私密空间中的应用保存在单独的用户资料中,类似于工作资料,因此应用不应假定其任何未在主资料中的已安装副本都在工作资料中。如果您的应用有与工作资料应用相关的逻辑并进行此假设,则需要调整此逻辑。
医疗应用
当用户锁定私密空间时,私密空间中的所有应用都会停止,并且这些应用无法执行前台或后台活动,包括显示通知。此行为可能会严重影响安装在私密空间中的医疗应用的使用和功能。
私密空间设置体验会警告用户,私密空间不适合需要执行关键前台或后台活动的应用,例如显示医疗应用发出的通知。但是,应用无法确定它们是否正在私密空间中使用,因此无法为此情况向用户显示警告。
因此,如果您开发医疗应用,请审查此功能可能如何影响您的应用,并采取适当的措施(例如告知用户不要在私密空间中安装您的应用),以避免中断关键应用功能。
桌面应用
如果您开发桌面应用,则在私密空间中的应用可见之前,您必须执行以下操作
- 您的应用必须被指定为设备的默认桌面应用,即拥有
ROLE_HOME
角色。 - 您的应用必须在应用的清单文件中声明
ACCESS_HIDDEN_PROFILES
普通权限。
声明 ACCESS_HIDDEN_PROFILES
权限的桌面应用必须处理以下私密空间用例
- 您的应用必须为安装在私密空间中的应用提供单独的桌面容器。使用
getLauncherUserInfo()
方法来确定正在处理的用户资料类型。 - 用户必须能够隐藏和显示私密空间容器。
- 用户必须能够锁定和解锁私密空间容器。使用
requestQuietModeEnabled()
方法锁定(通过传入true
)或解锁(通过传入false
)私密空间。 锁定后,私密空间容器中的应用不应通过搜索等机制可见或可发现。您的应用应为
ACTION_PROFILE_AVAILABLE
和ACTION_PROFILE_UNAVAILABLE
广播注册接收器,并在私密空间容器的锁定或解锁状态更改时更新应用中的界面。这两个广播都包含EXTRA_USER
,您的应用可以使用它来引用私密资料用户。您还可以使用
isQuietModeEnabled()
方法检查私密空间资料是否已锁定。
应用商店应用
私密空间包含一个“安装应用”按钮,该按钮会启动一个隐式 intent,用于将应用安装到用户的私密空间。为了让您的应用接收此隐式 intent,请在应用的清单文件中声明一个 <intent-filter>
,其中包含 CATEGORY_APP_MARKET
的 <category>
。
基于 PNG 的表情符号字体已移除
旧版基于 PNG 的表情符号字体文件 (NotoColorEmojiLegacy.ttf
) 已被移除,只剩下基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染器使用的表情符号字体文件从基于 PNG 的文件更改为基于矢量的文件。系统在 Android 13 和 14 中保留了旧版字体文件,以实现兼容性,以便拥有自己的字体渲染器的应用可以在升级之前继续使用旧版字体文件。
要检查您的应用是否受影响,请在应用代码中搜索对 NotoColorEmojiLegacy.ttf
文件的引用。
您可以通过多种方式调整您的应用
- 使用平台 API 进行文本渲染。如有必要,您可以将文本渲染到位图支持的
Canvas
,并使用它获取原始图像。 - 为您的应用添加 COLRv1 字体支持。FreeType 开源库在版本 2.13.0 及更高版本中支持 COLRv1。
- 作为最后手段,您可以将旧版表情符号字体文件 (
NotoColorEmoji.ttf
) 捆绑到您的 APK 中,尽管在这种情况下,您的应用将缺少最新的表情符号更新。如需了解更多信息,请参阅 Noto Emoji 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 引入了强大的措施,旨在打击一次性密码 (OTP) 欺诈并保护用户的敏感内容,重点在于加强通知侦听器服务和屏幕共享保护。主要增强功能包括从不受信任应用可访问的通知中删除 OTP、在屏幕共享期间隐藏通知以及在发布 OTP 时保护应用活动。这些更改旨在保护用户的敏感内容免受未经授权的实体攻击。
开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容
OTP 编校
Android 将阻止实现 NotificationListenerService
的不受信任应用读取已检测到 OTP 的通知中的未编校内容。伴侣设备管理器关联等受信任应用不受这些限制。
屏幕共享保护
- 屏幕共享会话期间会隐藏通知内容,以保护用户隐私。如果应用实现
setPublicVersion()
,Android 会显示通知的公开版本,在不安全的环境中充当替代通知。否则,通知内容将被编校,不提供任何其他上下文。 - 密码输入等敏感内容会向远程查看器隐藏,以防止泄露用户的敏感信息。
- 在屏幕共享期间发布通知且检测到 OTP 的应用活动将被隐藏。应用启动时,应用内容将对远程查看器隐藏。
- 除了 Android 自动识别敏感字段外,开发者还可以使用
setContentSensitivity
手动将应用的某些部分标记为敏感内容,这些内容在屏幕共享期间会向远程查看器隐藏。 - 开发者可以选择在开发者选项下切换停用屏幕共享保护选项,以便出于演示或测试目的免除屏幕共享保护。默认系统屏幕录像机不受这些变更的影响,因为录制内容仍保留在设备上。
摄像头和媒体
Android 15 对所有应用的摄像头和媒体行为做出了以下更改。
达到资源限制时,直接和卸载音频播放会使先前打开的直接或卸载音频轨道失效
在 Android 15 之前,如果应用请求直接或卸载音频播放,而另一个应用正在播放音频且资源限制已达到,则该应用将无法打开新的 AudioTrack
。
从 Android 15 开始,当应用请求直接或卸载播放且达到资源限制时,系统会使任何当前打开的 AudioTrack
对象失效,这会阻止满足新的轨道请求。
(直接和卸载音频轨道通常用于播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码音频流式传输到电视。卸载轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)
用户体验和系统界面
Android 15 包含一些旨在创建更一致、更直观的用户体验的更改。
已启用选择加入应用上的预测性返回动画
从 Android 15 开始,用于预测性返回动画的开发者选项已被移除。返回主屏幕、跨任务和跨活动等系统动画现在会显示给已完全或在活动级别选择加入预测性返回手势的应用。如果您的应用受影响,请采取以下措施
- 确保您的应用已正确迁移以使用预测性返回手势。
- 确保您的 fragment 过渡与预测性返回导航配合使用。
- 摆脱动画和框架过渡,转而使用 animator 和 androidx 过渡。
- 停止使用
FragmentManager
不知道的返回堆栈。转而使用由FragmentManager
或 Navigation 组件管理的返回堆栈。
用户强制停止应用时,小部件被停用
如果用户在运行 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有小部件。小部件会显示为灰色,用户无法与其互动。这是因为从 Android 15 开始,当应用被强制停止时,系统会取消该应用的所有待定 intent。
用户下次启动应用时,系统会重新启用这些小部件。
如需了解更多信息,请参阅软件包停止状态的变更。
媒体投影状态栏芯片提醒用户屏幕共享、投屏和录制
屏幕投影漏洞会泄露用户的私人数据,例如财务信息,因为用户没有意识到他们的设备屏幕正在被共享。
对于在运行 Android 15 QPR1 或更高版本的设备上运行的应用,状态栏中一个醒目的芯片会提醒用户任何正在进行的屏幕投影。用户可以点按该芯片来停止屏幕共享、投屏或录制。此外,当设备屏幕锁定时,屏幕投影会自动停止。

检查您的应用是否受影响
默认情况下,您的应用包含状态栏芯片,并在锁屏激活时自动暂停屏幕投影。
要详细了解如何针对这些用例测试您的应用,请参阅状态栏芯片和自动停止。
后台网络访问限制
在 Android 15 中,在有效进程生命周期之外启动网络请求的应用会收到异常。通常是 UnknownHostException
或其他与套接字相关的 IOException
。在有效生命周期之外发生的网络请求通常是由于应用在应用不再活跃后仍不知不觉地继续进行网络请求。
为缓解此异常,请使用生命周期感知组件,确保您的网络请求感知生命周期,并在离开有效进程生命周期时取消。如果网络请求即使在用户离开应用时也必须发生,请考虑使用 WorkManager 安排网络请求,或使用 前台服务继续执行用户可见的任务。
弃用
随着每个版本的发布,特定的 Android API 可能会过时或需要重构,以提供更好的开发者体验或支持新的平台功能。在这些情况下,我们正式弃用过时的 API,并指导开发者使用替代 API。
弃用意味着我们已终止对这些 API 的官方支持,但它们将继续可供开发者使用。要详细了解此 Android 版本中的主要弃用内容,请参阅弃用页面。