今天,我们发布了 Android 17 的第二个 Beta 版,继续致力于打造一个优先考虑隐私、安全和优化性能的平台。此更新提供了一系列新功能,包括 EyeDropper API 和可保护隐私的联系人选择器。我们还添加了高级测距、跨设备切换 API 等功能。
此版本延续了发布节奏的转变,在第二季度发布年度主要 SDK 版本后,将发布次要 SDK 更新。
用户体验和系统界面
气泡
气泡是一种窗口模式功能,可提供与 消息气泡 API 分开的全新浮动界面体验。用户可以在手机、可折叠设备或平板电脑上创建应用气泡,方法是长按启动器上的应用图标。在大屏设备上,任务栏中有一个气泡栏,用户可以在其中整理气泡、在气泡之间移动,以及将气泡移至屏幕上的锚点或从锚点移出。
您应遵循支持多窗口模式的指南,以确保应用作为气泡正常运行。
在 Beta 版 2 中,气泡尚未完全启用。请在 Android 17 的未来 build 中查找它们。
EyeDropper API
借助新的系统级 EyeDropper API,您的应用可以从显示屏上的任何像素请求颜色,而无需敏感的屏幕截图权限。
val eyeDropperLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { val color = result.data?.getIntExtra(Intent.EXTRA_COLOR, Color.BLACK) // Use the picked color in your app } } fun launchColorPicker() { val intent = Intent(Intent.ACTION_OPEN_EYE_DROPPER) eyeDropperLauncher.launch(intent) }
联系人选择器
通过 ACTION_PICK_CONTACTS 提供的新系统级联系人选择工具仅授予对用户请求的特定数据字段的临时会话读取权限,从而减少了对广泛的 READ_CONTACTS 权限的需求。它还允许从设备的个人资料或工作资料中进行选择。
val contactPicker = rememberLauncherForActivityResult(StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
val uri = it.data?.data ?: return@rememberLauncherForActivityResult
// Handle result logic
processContactPickerResults(uri)
}
}
val dataFields = arrayListOf(Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE)
val intent = Intent(ACTION_PICK_CONTACTS).apply {
putStringArrayListExtra(EXTRA_PICK_CONTACTS_REQUESTED_DATA_FIELDS, dataFields)
putExtra(EXTRA_ALLOW_MULTIPLE, true)
putExtra(EXTRA_PICK_CONTACTS_SELECTION_LIMIT, 5)
}
contactPicker.launch(intent)更轻松地实现指针捕获与触控板的兼容性
以前,当应用捕获指针时,触控板报告事件的方式与鼠标非常不同,它报告的是手指在触控板上的位置,而不是鼠标报告的相对移动。这使得在第一人称游戏中正确支持触控板非常困难。现在,默认情况下,系统会在捕获触控板时识别指针移动和滚动操作,并像报告鼠标事件一样报告它们。您仍然可以通过在新的“绝对”模式下明确请求捕获来请求旧的详细手指位置数据。
// To request the new default relative mode (mouse-like events) // This is the same as requesting with View.POINTER_CAPTURE_MODE_RELATIVE view.requestPointerCapture() // To request the legacy absolute mode (raw touch coordinates) view.requestPointerCapture(View.POINTER_CAPTURE_MODE_ABSOLUTE)
互动式选择器静止边界
通过在 Android 的 ChooserSession 上调用 getInitialRestingBounds,您的应用可以识别动画和数据加载完成后选择器占据的目标位置,从而更好地调整界面。
连接和跨设备
跨设备应用切换
借助新的 Handoff API,您可以指定要在另一台设备(例如 Android 平板电脑)上恢复的应用状态。选择启用后,系统会通过 CompanionDeviceManager 同步状态,并在用户附近设备的启动器中显示切换建议。此功能旨在提供无缝的任务连续性,让用户可以在 Android 生态系统中从工作流中断的地方继续工作。至关重要的是,Handoff 同时支持原生应用到应用的转换和应用到 Web 的回退,提供最大的灵活性,并确保即使接收设备上未安装原生应用,也能获得完整的体验。
高级测距 API
我们添加了对 2 种新测距技术的支持 -
- UWB DL-TDOA ,让应用可以使用 UWB 进行室内导航。此 API 表面符合 FIRA(Fine Ranging Consortium,精细测距联盟)4.0 DL-TDOA 规范,并支持可保护隐私的室内导航(避免锚点跟踪设备)。
- 近距离检测 ,让应用可以使用 WFA(WiFi 联盟)采用的新测距规范。与现有的基于 Wifi Aware 的测距规范相比,此技术具有更高的可靠性和准确性。
数据流量套餐增强功能
为了优化媒体质量,您的应用现在可以使用 getStreamingAppMaxDownlinkKbps 和 getStreamingAppMaxUplinkKbps 检索运营商为流式传输应用分配的最大数据速率。
核心功能、隐私和性能
本地网络访问权限
Android 17 引入了 ACCESS_LOCAL_NETWORK 运行时权限,以保护用户免受未经授权的本地网络访问。由于此权限属于现有的 NEARBY_DEVICES 权限组,因此已授予其他 NEARBY_DEVICES 权限的用户不会再次收到提示。通过声明和请求此权限,您的应用可以发现并连接到局域网 (LAN) 中的设备,例如智能家居设备或投屏接收器。这可以防止恶意应用利用不受限制的本地网络访问权限进行隐蔽的用户跟踪和指纹识别。以 Android 17 或更高版本为目标平台的应用现在有两种方式来维持与 LAN 设备的通信:采用系统介导的、可保护隐私的设备选择器来跳过权限提示,或者在运行时明确请求此新权限以维持本地网络通信。
时区偏移量更改广播
Android 现在提供了一个可靠的广播 intent ACTION_TIMEZONE_OFFSET_CHANGED,当系统的时区偏移量发生变化时(例如在夏令时转换期间)会触发此 intent。这补充了现有的广播 intent ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED,它们分别在 Unix 时间戳发生变化和时区 ID 发生变化时触发。
NPU 管理和优先级
以 Android 17 为目标平台且需要直接访问 NPU 的应用必须在其清单中声明 FEATURE_NEURAL_PROCESSING_UNIT,以避免被阻止访问 NPU。这包括使用 LiteRT NPU 委托、供应商特定 SDK 以及已废弃的 NNAPI 的应用。
ICU 78 和 Unicode 17 支持
核心国际化库已更新为 ICU 78,扩展了对新脚本、字符和表情符号块的支持,并支持直接格式化 时间 对象。
短信动态密码保护
Android 通过自动延迟对包含动态密码的短信的访问,扩展了短信动态密码保护。以前,保护主要集中在短信检索器格式上,其中包含短信检索器哈希的消息的递送对于大多数应用会延迟三小时。不过,对于某些应用(例如默认短信应用等)以及与哈希对应的应用,此延迟不适用。此更新将保护范围扩展到所有包含动态密码的短信。对于大多数应用,包含动态密码的短信只有在延迟三小时后才能访问,以帮助防止动态密码劫持。SMS_RECEIVED_ACTION 广播将被保留,并且短信提供商数据库查询将被过滤。延迟后,这些应用将可以使用短信。
延迟访问 WebOTP 格式的短信
如果应用有权读取短信,但不是动态密码的预期接收者(由域名验证确定),则 WebOTP 格式的短信只有在三小时后才能访问。此更改旨在提高用户安全性,确保只有与消息中提及的网域关联的应用才能以程序化方式读取验证码。此更改适用于所有应用,无论其目标 API 级别如何。
延迟访问包含动态密码的标准短信
对于不使用 WebOTP 或短信检索器格式的包含动态密码的短信,大多数应用只能在三小时后访问动态密码短信。此更改仅适用于以 Android 17(API 级别 37)或更高版本为目标平台的应用。
某些应用(例如默认短信、辅助应用以及已连接的设备配套应用等)将不受此延迟的影响。
所有依赖于读取短信以提取动态密码的应用都应过渡到使用 短信检索器或 短信用户同意 API,以确保功能持续可用。
Android 17 时间表
我们将快速从 Beta 版过渡到平台稳定性里程碑,目标是 3 月。在此里程碑中,我们将提供最终的 SDK/NDK API。从那时起,您的应用可以以 SDK 37 为目标平台并发布到 Google Play,帮助您在 Android 17 正式版发布之前的几个月内完成测试并收集用户反馈。
一年的发布周期
我们计划在 Android 17 中继续进行一系列季度发布更新。第二季度即将发布的版本是我们唯一会引入计划中的应用破坏性行为变更的版本。我们计划在第四季度发布次要 SDK 版本,其中包含其他 API 和功能。
Android 17 使用入门
您可以让任何受支持的 Pixel 设备加入,以通过无线下载方式获取此更新和未来的 Android Beta 版更新。如果您没有 Pixel 设备,可以在 Android Studio 中使用 Android 模拟器中的 64 位系统映像。
如果您目前参与了 Android Beta 版计划,您将获得 Beta 版 2 的无线下载更新。
如果您使用的是 Android 26Q1 Beta 版,并且想要获取 26Q1 的最终稳定版并退出 Beta 版,则需要忽略 26Q2 Beta 版 2 的无线下载更新,并等待 26Q1 的发布。
我们期待您的反馈,因此请在反馈页面上报告问题并提交功能请求。我们越早收到您的反馈,在最终版本的开发工作中采纳的意见就越多。
为了获得 Android 17 的最佳开发体验,我们建议您使用最新预览版 Android Studio (Panda)。设置完成后,您应执行以下操作:
- 使用新版 SDK 进行编译,在 CI 环境中进行测试,并在反馈页面上的跟踪器中报告问题。
- 测试当前应用的兼容性,了解您的应用是否受到 Android 17 中变更的影响,并将应用安装到搭载 Android 17 的设备或模拟器上并进行全面测试。
在整个 Android 17 发布周期中,我们将定期更新预览版/Beta 版系统映像和 SDK。安装 Beta 版 build 后,您将自动获得未来的更新
无线下载方式适用于所有后续预览版和 Beta 版。
如需了解完整信息,请访问Android 17 开发者网站。
加入讨论
随着我们朝着平台稳定性 和 Android 17 今年晚些时候的正式版迈进,您的反馈仍然是我们最宝贵的财富。无论您是 Canary 渠道的早期采用者,还是在 Beta 版 2 上进行测试的应用开发者,都可以考虑加入我们的社区并提交反馈。我们一直在倾听。
继续阅读
-
产品动态
今天,我们推出了 Gemma 4,这是我们最新的尖端开放模型,具有复杂的推理和自主工具调用功能,可增强 Android 开发。
Matthew McCullough • 阅读用时:2 分钟
-
产品动态
Android 17 今天已正式通过 Beta 版 3 达到平台稳定性。这意味着 API 表面已锁定;您可以执行最终兼容性测试,并将以 Android 17 为目标平台的应用推送到 Play 商店。
Matthew McCullough • 阅读用时:5 分钟
-
产品动态
我们希望让您能够更快、更轻松地构建高品质 Android 应用,而我们帮助您提高工作效率的一种方式就是让您轻松使用 AI。
Matthew McCullough • 阅读用时:2 分钟
随时了解最新动态
每周通过电子邮件接收最新的 Android 开发洞察。