产品资讯

Android 17 的第二个 Beta 版

阅读用时:6 分钟
Matthew McCullough
产品管理副总裁,Android 开发者

今天,我们发布了 Android 17 的第二个 Beta 版,继续致力于打造一个将隐私保护、安全性和优化性能放在首位的平台。此更新提供了一系列新功能,包括 EyeDropper API 和可保护隐私的联系人选择器。我们还添加了高级测距、跨设备切换 API 等功能。

此版本延续了发布节奏的转变,在第 2 季度发布此年度主要 SDK 版本后,还会发布次要 SDK 更新。

用户体验和系统界面

气泡

气泡是一种窗口模式功能,可提供与消息气泡 API 不同的全新浮动界面体验。用户可以在手机、可折叠设备或平板电脑上长按启动器中的应用图标来创建应用气泡。在大屏设备上,气泡栏是任务栏的一部分,用户可以在其中整理气泡、在气泡之间移动,以及将气泡移动到屏幕上的锚定点或从锚定点移开。

Bubbles.gif

您应遵循支持多窗口模式的指南,以确保应用作为气泡正常运行。

在 Beta 2 中,气泡功能尚未完全启用。敬请期待 Android 17 的未来 build 版本。

EyeDropper API

借助新的系统级 EyeDropper API,您的应用可以从显示屏上的任何像素请求颜色,而无需敏感的屏幕捕获权限。

Eyedropper_Tester.webp
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 权限的需求。此外,它还允许从设备的个人资料或工作资料中进行选择。

android-17-contact-picker.gif
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,您的应用可以识别选择器在动画和数据加载完成后占据的目标位置,从而更好地调整界面。

连接与跨设备

跨设备应用切换

借助新的切换 API,您可以指定要在另一台设备(例如 Android 平板电脑)上恢复的应用状态。选择启用后,系统会通过 CompanionDeviceManager 同步状态,并在用户附近设备的启动器中显示切换建议。此功能旨在提供顺畅的任务连续性,让用户能够在整个 Android 生态系统中从工作流程中上次停下的地方继续工作。至关重要的是,Handoff 支持原生应用到原生应用的转换和应用到网页的回退,从而提供最大的灵活性,并确保即使接收设备上未安装原生应用,也能获得完整的体验。

高级测距 API

我们正在添加对 2 种全新测距技术的支持 -

  1. UWB DL-TDOA,可让应用使用 UWB 进行室内导航。此 API 表面符合 FIRA(精细测距联盟)4.0 DL-TDOA 规范,可实现保护隐私的室内导航(避免锚点跟踪设备)。
  2. 邻近检测,可让应用使用 WFA(Wi-Fi 联盟)正在采用的新测距规范。与基于 Wifi Aware 的现有测距规范相比,此技术可提高可靠性和准确性。

流量套餐增强功能

为了优化媒体质量,您的应用现在可以使用 getStreamingAppMaxDownlinkKbps 和 getStreamingAppMaxUplinkKbps 检索运营商为流式应用分配的最大数据速率。

核心功能、隐私权和性能

本地网络访问权限

Android 17 引入了 ACCESS_LOCAL_NETWORK 运行时权限,以保护用户免遭未经授权的本地网络访问。由于此权限属于现有的附近设备权限组,因此已授予其他附近设备权限的用户不会再次收到提示。通过声明和请求此权限,您的应用可以发现并连接到局域网 (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,从而扩大了对新脚本、字符和表情符号块的支持,并实现了对 time 对象的直接格式设置。

动态短信密码保护

Android 正在扩展其短信动态密码保护功能,方法是自动延迟对包含动态密码的短信的访问。以前,该保护功能主要侧重于 SMS Retriever 格式,其中包含 SMS Retriever 哈希的消息的传送会延迟 3 小时(对于大多数应用)。不过,对于某些应用(例如默认短信应用等)以及与哈希值对应的应用,此延迟不适用。此更新将保护范围扩大到包含动态密码的所有短信。对于大多数应用,包含 OTP 的短信只有在延迟 3 小时后才能访问,以帮助防止 OTP 劫持。系统将保留 SMS_RECEIVED_ACTION 广播,并过滤 短信提供程序数据库查询。延迟结束后,这些应用将可以访问相应短信。

延迟访问 WebOTP 格式的短信

如果应用有权读取短信,但不是动态密码的预期接收方(由域名验证确定),则只有在经过 3 小时后才能访问 WebOTP 格式的短信。此变更旨在提高用户安全性,确保只有与消息中提及的网域相关联的应用才能以程序化方式读取验证码。无论应用的目标 API 级别如何,此变更都适用于所有应用。

延迟访问包含动态密码的标准短信

对于包含未使用 WebOTP 或 SMS Retriever 格式的 OTP 的短信,大多数应用只能在三小时后访问 OTP 短信。此变更仅适用于以 Android 17(API 级别 37)或更高版本为目标平台的应用。

某些应用(例如默认短信应用、辅助应用以及已连接的设备配套应用等)将不受此延迟的影响。

所有依赖于读取短信消息来提取动态密码的应用都应改用 SMS RetrieverSMS User Consent API,以确保功能正常运行。

Android 17 时间表

我们将迅速从 Beta 版过渡到 3 月份的目标平台稳定性里程碑。在此里程碑版本中,我们将交付最终的 SDK/NDK API。从那时起,您的应用可以面向 SDK 37 并发布到 Google Play,以便在 Android 17 正式版发布前的几个月内完成测试并收集用户反馈。

Android 发布时间表.png

发布年份

我们计划继续通过一系列季度版本更新来为 Android 17 提供支持。第 2 季度即将发布的版本是唯一一个会引入计划中的应用重大行为变更的版本。我们计划在第四季度发布一个次要 SDK 版本,其中包含更多 API 和功能。

Android 版本时间表_2.png

Android 17 使用入门

您可以让任何受支持的 Pixel 设备加入,以通过无线下载方式获取此更新和未来的 Android Beta 版更新。如果您没有 Pixel 设备,可以在 Android Studio 中使用 Android 模拟器搭配 64 位系统映像

如果您目前加入了 Android Beta 版计划,系统会提供无线下载 (OTA) 更新,让您升级到 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 上进行测试的应用开发者,都可以考虑加入我们的社区并提交反馈。我们听到了您的心声。

作者:

继续阅读