作者 / 工程副总裁 Dave Burke
近期,我们发布了 Android 15 Beta 2,致力于持续打造帮助您提高工作效率的 Android 平台,最大限度地降低电池消耗 并 提升应用性能流畅性,为用户 提供出色的设备体验,保护用户隐私和安全,并助力您的应用触达更多用户——这些愿景均可在一个充满活力和多样化的设备、芯片合作伙伴和运营商生态系统中实现。
- 最大限度地降低电池消耗
- 提升应用性能流畅性
- 提供出色的设备体验
- 保护用户隐私和安全
Android 全年都会提供增强功能和新特性,在帮助 Android 持续改进方面,您对 Android Beta 版 计划的反馈发挥着关键作用。Android 15 开发者网站 提供了更多关于 Beta 版的信息,包括 Pixel 的下载内容 和 版本发布时间表。我们期待 听到您的想法,并提前感谢您所做出的贡献,帮助 Android 成为适合所有人使用的平台。
现已支持更多设备
Android 15 Beta 版现已在手机、平板电脑和可折叠设备等设备类型上提供,合作伙伴 包括 Honor、iQOO、Lenovo、Nothing、OnePlus、OPPO、Realme、Sharp、Tecno、vivo 和 Xiaomi,因此您可以在更多设备上测试您的应用;同时,也将会有更多用户可以在 Android 15 Beta 版上运行您的应用。
让 Android 更高效
我们致力于优化平台,以提高 Android 设备的质量、速度和电池续航时间。
前台服务变更
前台服务使应用保持活跃状态,以便执行某些关键且用户可见的操作,但这通常会以牺牲电池续航时间为代价。在 Android 15 Beta 2 中,dataSync 和 mediaProcessing 前台服务类型 现在有约为 6 小时的超时 期限,在此之后系统会调用 Android 15 新的 Service.onTimeout (int, int) 方法。此时,该服务不再被视为前台服务。如果服务没有调用 Service.stopSelf() 来响应超时,它将因调用失败而被停止。
Beta 2 还增加了应用在后台运行时启动前台服务的 新要求。如果您的前台服务依赖于 SYSTEM_ALERT_WINDOW 权限豁免以进行后台启动,那么在面向 Android 15 时,您需要有一个可见的叠加层。
有关节省电量的最佳实践、调试网络和电量使用情况,以及详细了解我们如何在 Android 15 和最新版本 Android 中提高后台工作的电池效率,您可以参阅 Google I/O 大会的主题演讲 "在 Android 设备上提高后台工作的电池效率":
即将支持 16 KB 页面大小
Android 15 增加了对使用更大页面大小设备的支持,除了标准的 4 KB 页面外,还支持 16 KB 页面。如果您的应用直接或间接地通过 SDK 使用任何 NDK 库,那么您可能需要简单地重构您的应用,使之能够在 16 KB 页面大小的设备上运行。
页面尺寸较大的设备可以提高内存密集型工作负载的性能。虽然我们的测试可能无法代表生态系统中的所有设备,但我们对配置了 16 KB 尺寸页面的设备进行了初始测试,发现如下性能提升:
- 在系统面临内存压力时缩短应用启动时间:平均减少了 3.16%,我们测试的部分应用有更显著的改进 (高达 30%)
- 启动应用期间的功耗降低:平均减少 4.56%
- 相机启动速度更快:热启动平均提高 4.48%,冷启动平均提高 6.60%
- 系统启动时间缩短:平均提升 1.5% (约 0.8 秒)
随着设备制造商持续构建具有更大物理内存 (RAM) 的设备,许多设备将采用 16 KB (乃至更大) 的页面大小来优化设备的性能。新增对 16 KB 页面大小设备的支持可让您的应用在这些设备上运行,并帮助您的应用从相关性能改进中获益。我们计划在明年将 16 KB 页面兼容性作为应用上传到 Google Play 商店的必备条件。
为了帮助您对应用添加支持,我们提供了有关如何 检查您的应用是否受到影响、如何 重建应用 (如果适用) 以及如何使用模拟器 (包括 Android 模拟器的 Android 15 系统映像) 在 16 KB 环境中测试应用 的指南。
实现 Android GPU 访问现代化
Android 硬件已经取得了长足进展,不再像过去那样核心操作系统运行在单个 CPU上,而 GPU 使用基于固定功能流水线的 API 进行访问。自 Android 7.0 (API 级别 24) 以来,Vulkan 图形 API 已在 NDK 中可用。该 API 具有更低级别的抽象,能更好地反映现代 GPU 硬件;扩展性更佳以支持多个 CPU 核心;此外还减少了 CPU 驱动程序开销——从而提升了应用和游戏的性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 的首选 GPU 接口。因此,Android 15 将 ANGLE 作为在 Vulkan 上运行 OpenGL ES 的可选层。迁移到 ANGLE 会将 Android OpenGL 实现标准化,以提高其兼容性,并在某些情况下提升性能。您可以用 ANGLE 来测试您的 OpenGL ES 应用的稳定性及性能,方法如下:在 Android 15 中,使用 "开发者选项→Experimental: Enable ANGLE" 设置。
Vulkan 上的 Android ANGLE 路线图
作为简化 GPU 堆栈的一部分,今后我们将在更多新设备上使用 ANGLE 作为 GL 系统驱动程序,未来预计 OpenGL/ES 将仅通过 ANGLE 提供。尽管如此,我们计划在所有设备上继续支持 OpenGL ES。
建议的后续措施 :使用开发者选项为 OpenGL ES 选择 ANGLE 驱动程序并进行测试。对于新项目,我们强烈建议使用适用于 C/C++ 的 Vulkan。
现代图形
Android 15 延续了我们对 Android 的 Canvas 图形系统进行的现代化改造,并增加了新功能:
- Matrix44 提供了用于转换坐标的 4×4 矩阵,当您想要处理 3D 画布时可使用此矩阵。
- clipShader 将当前剪辑片段与指定的着色器相交,clipOutShader 则将剪辑设置为当前剪辑片段与着色器的差值,两者都将着色器视为 Alpha 遮罩。这一功能可以有效支持复杂形状的绘制。
更高效的 AV1 软件解码
dav1d 是来自 VideoLAN 的流行 AV1 软件解码器,现在可用于不支持 AV1 硬件解码的 Android 设备。该解码器比传统 AV1 软件解码器的性能高出 3 倍,可为更多用户 (包括一些中低端设备用户) 提供高清 AV1 播放。
目前,您的应用需要通过 "c2.android.av1-dav1d.decoder" 名称来调用 dav1d,以选择使用该解码器。在后续更新中,它将成为默认的 AV1 软件解码器。此支持已标准化,并可向后移植到接收 Google Play 系统更新的 Android 11 设备。
有关 Android 媒体和摄像头的最新功能和开发者解决方案的更多信息,请您参阅 Google I/O 大会的主题演讲 "构建现代 Android 媒体和摄像头体验"。
更私密、更安全的 Android
我们始终希望为用户提供更高的数据清晰度和掌控力,同时增强平台的核心安全功能。请您参阅 Google I/O 大会的主题演讲 "保障 Android 用户安全",了解我们为改善用户安全、保护您的应用免受新威胁而采取的更多措施。
私密空间
私密空间允许用户在设备上创建一个独立的空间;该空间在额外的身份验证层之下,可让敏感应用免受窥探。私密空间使用单独的用户配置文件。当用户锁定私密空间时,配置文件将暂停使用,空间中的应用不再处于活动状态。用户可以选择使用设备锁或独立的私密空间加密方式。私密空间应用显示在启动器中的单独运行环境中,当私密空间被锁定时,这些程序会被隐藏,不会出现在最近的视图、通知、设置和其他应用中。用户生成和下载的内容 (媒体、文件) 和账户在私密空间和主空间之间分隔开。当私密空间解锁时,应用可使用 系统 Sharesheet 和 照片选取器 跨空间访问内容。Android 15 Beta 2.1 部分修复了 Beta 2 中私密空间影响主屏幕应用的已知问题。
改进了部分照片访问权限
现在,当授予媒体 部分访问权限 时,应用可以仅突出显示最近选择的照片和视频。对于频繁请求访问照片和视频的应用而言,这可以改善用户的体验。通过 ContentResolver 查询 MediaStore 时启用 QUERY_ARG_LATEST_SELECTION_ONLY 参数,即可实现上述功能。
valexternalContentUri = MediaStore.Files.getContentUri("external")
val mediaColumns = arrayOf(
FileColumns._ID,
FileColumns.DISPLAY_NAME,
FileColumns.MIME_TYPE,
)
val queryArgs = bundleOf(
// Return only items from the last selection (selected photos access)
QUERY_ARG_LATEST_SELECTION_ONLY to true,
// Sort returned items chronologically based on when they were added to the device's storage
QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
FileColumns.MEDIA_TYPE_IMAGE.toString(),
FileColumns.MEDIA_TYPE_VIDEO.toString()
)
)
val cursor = contentResolver.query(externalContentUri, mediaColumns, queryArgs, null)
内容 URI 的权限检查
Android 15 引入了一组新的 API,用于对内容 URI 执行权限检查。它们包括:
- Context.checkContentUriPermissionFull: 此 API 对内容 URI 执行完全权限检查。
- Activity 清单属性 requireContentUriPermissionFromCaller: 此 API 在 activity 启动时对提供的内容 URI 强制执行指定的权限。
- Activity 调用方的 ComponentCaller class: 它表示启动 activity 的应用。
安全的后台活动启动
为了保护用户免受恶意应用的侵害,帮助他们更好地控制自己的设备,Android 15 增加了一些更改;这些更改可防止恶意后台应用将其他应用带到前台、提升其权限和滥用用户交互。自 Android 10 以来,后台活动启动一直受到限制。
同一任务中的恶意应用可以启动另一个应用的活动,然后将自身叠加在顶层,伪装为该应用。此类 "任务劫持" 攻击可绕过当前的后台启动限制,因为它完全发生在同一可见任务内。为了降低此风险,我们添加了一个标记,用以阻止与堆栈上顶部 UID 不匹配的应用启动活动。要为应用的所有活动选择添加此功能,请更新应用 AndroidManifest.xml 文件中的 allowCrossUidActivitySwitchFromBelow 属性:
<application android:allowCrossUidActivitySwitchFromBelow="false" >
一旦您的应用选择启用新的保护机制,就可以在 Activity 中使用此 API 选择退出特定的共享活动:
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setAllowCrossUidActivitySwitchFromBelow(true);
...
}
您可以查阅 官方文档 详细了解从后台启动活动的限制。
更安全的 Intent
Android 15 引入了新的安全措施,使 Intent 更安全、更稳健。这些变更旨在防止恶意应用利用潜在漏洞或滥用 Intent。Android 15 中 Intent 的安全性有两个主要改进:
- 匹配目标 Intent 过滤器 :针对特定组件的 Intent 必须准确匹配目标的 Intent 过滤器规范。如果您想发送 Intent 以启动另一个应用的活动,则目标 Intent 组件需要与接收活动所声明的 Intent 过滤器一致。
- Intent 必须具有操作 :没有操作的 Intent 将不再匹配任何 Intent 过滤器。这意味着,用于启动活动或服务的 Intent 必须具有明确定义的操作。
重要说明:这些改进将成为严格模式的一部分。如果您想试用,请新增以下方法:
public void onCreate() {
StrictMode.setVmPolicy(VmPolicy.Builder()
.detectUnsafeIntentLaunch()
.build());
...
将最低目标 SDK 版本从 23 提高到 24
基于之前 Android 14 的最低目标 SDK 更改,Android 15 将安装应用所需的最低 targetSdkVersion 从 23 提高到 24;过时的应用通常缺乏最新的安全保护,设备和数据容易受到攻击。要求应用满足现代 API 级别有助于确保更好的安全性和隐私性。
如果您尝试安装的应用针对的 API 级别低于 24,您会在 Logcat 中看到一个错误:INSTALL_FAILED_DEPRECATED_SDK_VERSION:App package must target at least SDK version 24, but found 7。
优秀的设备体验
Android 15 包含的功能可帮助您的应用改善使用 Android 设备的体验,包括更流畅的过渡、更易上手的界面、针对大屏设备的更新以及为设计师提供的更精美的选项。
改进的大屏多任务处理
Android 15 Beta 2 为用户提供了更好地在大屏设备上处理多任务的方式。例如,用户可以在屏幕上固定任务栏,以便在应用之间快速切换,或保存自己偏好的分屏应用组合,以便快速访问。这意味着,确保您的应用具有自适应性现在变得尤为重要。Google I/O 大会举办了有关 构建自适应 Android 应用 和 利用 Material 3 自适应库构建界面 的讨论,访问官方文档帮助您了解 为大屏进行设计。
窗口边衬区
在 Android 15 Configuration.screenWidthDp 和 screenHeightDp 中定位 SDK 35+ 时,除了 全面强制执行 外,现在还包括系统栏的深度。虽然这些值仍可用于资源选择 (例如,res/layout-h500dp),但不建议使用它们进行布局计算。
画中画
Android 15 引入了画中画 (PiP) 的新变化,确保进入画中画模式时过渡更加流畅。这将有利于在主界面上叠加界面元素的应用程序进入 PiP 模式。目前,onPictureInPictureModeChanged 用于定义切换叠加界面元素可见性的逻辑。当画中画的进入或退出动画完成时将触发此回调。从 Android 15 开始,我们在 PictureInPictureUiState 类中引入了一个新状态。一旦画中画进入动画开始,onPictureInPictureUiStateChanged 回调将使用 isTransitioningToPip() 调用,并且应用可以隐藏叠加的界面元素。
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
对于画中画窗口,这种快速切换无关界面元素可见性的方法,将确保画中画进入动画更流畅且无闪烁。
使用 Generated Previews 实现更丰富的 Widget 预览
通过显示个性化预览,让您的 Widget 脱颖而出。针对 Android 15 的应用可以向 Widget 选取器提供 Remote Views,以便更新选取器中的内容,以更好地代表用户将看到的内容。应用可以使用 AppWidgetManager setWidgetPreview、getWidgetPreview 和 removeWidgetPreview 方法,使用最新的个性化信息更新 Widget 的外观。
预测性返回
预测性返回为使用 手势导航 提供了更流畅、更直观的导航体验,利用内置动画告知用户该动作将带领其前往何处,以减少意外结果。在 Android 15 中,预测性返回将不再隐藏在开发者选项中,因此对于已 正确迁移 的应用将显示系统动画,例如返回主页、跨任务和跨活动。
为通知渠道设置 VibrationEffect
Android 15 Beta 2 现在支持使用 NotificationChannel.setVibrationEffect,按接收渠道为收到的通知设置丰富的振动类型,帮助用户在无需查看设备即可区分不同类型的通知。
Health Connect 的新数据类型
用户可以通过 Health Connect 集中控制和管理其健身数据访问权限。该功能新增了对其他数据类型的支持,以支持更多的健康和健身案例。此次发布有 2 种新数据类型:皮肤温度和训练计划。
皮肤温度跟踪功能允许用户存储和共享从可穿戴设备或其他跟踪设备获取更准确的温度数据。
训练计划是结构化的锻炼计划,可帮助用户实现其健身目标。训练计划支持包括:
"选择称呼方式" 的系统偏好设置
用户可以通过语法性别偏好自定义 Android 系统对他们的称呼,这一设定最初仅支持法语,但很快将扩展到其他性别化语言。您可以在系统语言设置中找到这一新设置:设置→系统→语言及输入→系统语言→选择称呼方式。
△ 此首选项更改显示的字符串示例
通过 ICU 74 实现现代国际化
Android 15 Beta 2 包括 ICU 74 的 API 相关更新。ICU 74 包含来自 Unicode 15.1 的更新,包括新字符、表情符号、安全机制和相应的 API 与实现,以及 CLDR 44 区域设置数据的更新,新语言区域和各种补充与修正。
中日韩 (CJK) 可变字体
从 Android 15 开始,中文、日文和韩文的字体文件 NotoSansCJK 成为可变字体。可变字体为中日韩语言的创意排版开辟了新的可能性。设计师可以探索更广泛的风格,并创造以前难以或无法实现的布局,打造引人注目的视觉效果。
新的日语 Hentaigana 字体
在 Android 15 中,默认捆绑了一个新的旧日文平假名 (即 "Hentaigana") 字体文件。Hentaigana 字符的独特形状可以为艺术品或设计增添独特的风格,同时也有助于保持对古代日本文献的准确传递和理解。
避免文字被裁切
一些形状复杂的草书字体或语言字符可能会突出到前一个或后一个字符的区域中。这些字母在开端或末尾的位置可能会被裁切。从 Android 15 开始,TextView 为这些字母分配了额外的宽度,并在左侧额外添加了内边距。
此调整更改了 TextView 确定宽度的方式,因此如果应用针对 Android 15 或更高版本,TextView 将默认分配额外宽度。您可以通过在 TextView 上调用 setUseBoundsForWidth API 来启用或禁用该设置。由于添加左侧内边距可能会导致现有布局不对齐,因此即使针对 Android 15 或更高版本,默认情况下也不会添加内边距。
要添加额外的内边距以防止文字被裁切,请调用 setShiftDrawingOffsetForStartOverhang。
<TextView
android:fontFamily="cursive"
android:text="java" />
<TextView
android:fontFamily="cursive"
android:text="java"
android:useBoundsForWidth="true"
android:shiftDrawingOffsetForStartOverhang="true" />
<TextView
android:text="คอมพิวเตอร์" />
<TextView
android:text="คอมพิวเตอร์"
android:useBoundsForWidth="true"
android:shiftDrawingOffsetForStartOverhang="true" />
应用兼容性
如果您还没有测试您的应用与 Android 15 的兼容性,那么随着更多设备加入计划,现在正是测试的好时机。在接下来的几周内,您可以期待更多用户在 Android 15 上试用您的应用,并提出他们发现的问题。
为了测试应用兼容性,请在运行 Android 15 Beta 版的设备或模拟器上安装您发布的应用,并运行应用的所有流程。您可以查看行为变更以集中测试重点。当您解决任何问题后,请尽快发布更新。
为了让您有更多的时间用于规划应用兼容性工作,您可以查看我们的平台稳定性里程碑。
在这一里程碑,我们将交付最终的 SDK/NDK API,以及最终的内部 API 和面向应用的系统行为。我们预计将在 2024 年 6 月实现平台稳定性,自那时起,您将有几个月的时间,在正式发布之前完成最终的测试工作。您可以查看 官方文档 了解更多详细信息。
即刻体验 Android 15
此次发布的 Beta 版本全面支持 Android 15 功能尝鲜、应用测试以及 反馈 提交。现在我们处于测试阶段,您可以在 官方文档 查看有关注册设备的信息;如 注册受支持的 Pixel 设备,您将通过 OTA 方式获得该版本和未来的 Android Beta 更新。如果您没有受支持的设备,可以在 Android Studio 中 使用 64 位的 Android 模拟器系统映像。如果您已在受支持的设备上 加入了 Android 14 QPR Beta 版计划,则会自动更新为 Android 15 Beta 2。
为获得最佳 Android 15 开发体验,我们建议您使用 最新的 Android Studio Koala 预览版。设置 完毕后,您可以:
- 体验新功能和 API——在开发者预览版和 Beta 版计划的早期阶段,您的反馈至关重要。欢迎您继续在我们的 跟踪页 报告问题。
- 测试您当前应用的兼容性——了解您的应用是否受到 Android 15 版本更新的影响;请将您的应用安装到运行 Android 15 的设备或模拟器上,并进行彻底的测试。
我们将在整个 Android 15 发布周期内定期更新 Beta 版系统映像和 SDK。您可以访问 官方文档 了解详情。
欢迎您访问 Android 15 开发者网站 了解本次发布的详细信息。
版权声明
禁止一切形式的转载-禁止商用-禁止衍生 申请授权