产品动态

Android 17 的第一个 Beta 版

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

今天,我们发布了 Android 17 的第一个 Beta 版,继续致力于构建一个优先考虑隐私、安全和优化性能的平台。此 build 继续致力于打造更具适应性的 Android 应用,对相机和媒体功能进行了重大改进,推出了用于优化连接的新工具,并扩展了配套设备的配置文件。此版本还重点介绍了我们向开发者社区发布新版本的方式发生了根本性转变,从传统的开发者预览版模式转变为 Android Canary 计划

超越开发者预览版

Android 已将传统的“开发者预览版”替换为持续的 Canary 渠道 。这种新的“始终开启”模式具有三个主要优势:

  • 更快访问 :功能和 API 在通过内部测试后会立即发布到 Canary,而不是等待季度版本。
  • 更好的稳定性 :在 Canary 中进行早期“实战测试”可带来更完善的 Beta 版体验,其中包含更接近最终版本的新 API 和行为变更。
  • 更轻松的测试 :Canary 支持 OTA 更新(无需手动刷写),并且作为单独的更新渠道,可以更轻松地与 CI 工作流集成,让您能够尽早了解即将推出的潜在变更并立即提供反馈。

Android 17 时间表

我们将快速从 Beta 版过渡到平台稳定性里程碑,目标时间是 3 月。在此里程碑中,我们将提供最终的 SDK/NDK API 和面向应用的最终行为。从那时起,您将有几个月的时间在最终版本发布之前完成测试。

timeline1.png

一年的版本发布

我们计划通过一系列季度版本继续更新 Android 17。在第 2 季度即将发布的版本中,我们将推出计划中的应用重大行为变更。我们计划在第 4 季度发布一个次要 SDK 版本,其中包含其他 API 和功能。

timeline2.png

屏幕方向和尺寸可调整性限制

随着 Android 17 Beta 版的发布,我们将进入自适应路线图的下一阶段:Android 17(API 级别 37)移除了开发者针对大屏设备 (sw > 600 dp) 的屏幕方向和尺寸可调整性限制选择停用功能。

当您的应用以 SDK 37 为目标平台时,必须做好适应准备。用户希望应用在任何地方都能正常运行,无论是在平板电脑上进行多任务处理、展开设备,还是使用桌面窗口化模式,他们都希望界面能够填满空间并尊重其设备姿态。

SDK 37 的主要变更

以 Android 17 为目标平台的应用必须确保与 Android 16 中引入的清单属性和运行时 API 的逐步淘汰兼容。在大屏设备(较小尺寸 ≥ 600dp)上运行时,系统将忽略以下属性和 API:

清单属性/API忽略的值
screenOrientationportrait、reversePortrait、sensorPortrait、userPortrait、landscape、reverseLandscape、sensorLandscape、userLandscape
setRequestedOrientation()portrait、reversePortrait、sensorPortrait、userPortrait、landscape、reverseLandscape、sensorLandscape、userLandscape
resizeableActivity全部
minAspectRatio全部
maxAspectRatio全部

豁免和用户控制

这些变更特定于大屏设备,不适用于 小于 sw600dp 的屏幕(包括传统平板手机)。此外,根据 android:appCategory 标志归类为游戏的应用不受这些限制的约束。

另请注意,用户仍然可以进行控制。他们可以通过系统的宽高比设置明确选择启用/停用应用的默认行为。

配置变更的更新

为了提高应用兼容性并帮助最大限度地减少视频播放中断、输入丢失和其他类型的破坏性状态丢失,我们将更新 Activity 重新创建的默认行为。从 Android 17 开始,对于通常不需要重新创建界面的特定配置变更,系统将不再默认重启 activity,包括 CONFIG_KEYBOARD、 CONFIG_KEYBOARD_HIDDEN、 CONFIG_NAVIGATION、 CONFIG_UI_MODE (仅当 UI_MODE_TYPE_DESK 发生更改时)、 CONFIG_TOUCHSCREEN 和 CONFIG_COLOR_MODE。相反,正在运行的 activity 将仅通过 onConfigurationChanged 接收这些更新。如果您的应用依赖于完全重启来为这些变更重新加载资源,您现在必须使用新的 android:recreateOnConfigChanges 清单属性明确选择启用,该属性允许您指定哪些配置变更应触发完整的 activity 生命周期(从停止到销毁再到重新创建),以及相关的常量 mccmnc 和新常量 keyboardkeyboardHiddennavigationtouchscreencolorMode

准备应用

我们发布了工具和文档,让您轻松上手。我们的专题博文提供了更多指导,其中包含解决常见问题的策略。应用需要支持各种宽高比的窗口尺寸的横向和纵向布局,因为限制屏幕方向或宽高比将不再是一种选择。我们建议您使用 Android 17 Beta 1 和 Pixel Tablet 或 Pixel Fold 模拟器(配置为 targetSdkPreview = "CinnamonBun")测试应用,或者使用 应用兼容性框架 在 Android 16 设备上启用 UNIVERSAL_RESIZABLE_BY_DEFAULT

性能

无锁 MessageQueue

Android 17 中,以 SDK 37 或更高版本为目标平台的应用将收到 android.os.MessageQueue 的新实现,其中实现是无锁的。新实现提高了性能并减少了丢帧,但可能会破坏反映 MessageQueue 私有字段和方法的客户端。

分代垃圾回收

Android 17 将分代垃圾回收引入 ART 的并发标记压缩回收器。此优化引入了更频繁、资源消耗更少的新生代回收以及全堆回收,旨在降低整体垃圾回收 CPU 成本和时间。通过 Google Play 系统更新,搭载 Android 12(API 级别 31)及更高版本的超过 10 亿台设备也可以使用 ART 改进。

静态 final 字段现在真正是 final 字段

从 Android 17 开始,以 Android 17 或更高版本为目标平台的应用将无法修改“静态 final”字段,从而允许运行时更积极地应用性能优化。尝试通过反射(和深度反射)执行此操作将始终导致抛出 IllegalAccessException。通过 JNI 的 SetStatic<Type>Field 方法系列修改它们将立即导致应用崩溃。

自定义通知视图限制

为了减少内存用量,我们限制了自定义通知视图的大小。此更新关闭了一个漏洞,该漏洞允许应用使用 URI 绕过现有限制。此行为受目标 SDK 版本的限制,并且对以 API 37 及更高版本为目标平台的应用生效。

新的性能调试 ProfilingManager 触发器

我们为 ProfilingManager 引入了几个新的系统触发器,以帮助您收集深入数据来调试性能问题。这些触发器包括TRIGGER_TYPE_COLD_START、 TRIGGER_TYPE_OOM和 TRIGGER_TYPE_KILL_EXCESSIVE_CPU_USAGE

如需了解如何设置新的系统触发器,请参阅基于触发器的性能分析以及检索和分析性能分析数据文档。

媒体和相机

Android 17 为媒体和相机应用带来了专业级工具,具有无缝过渡和标准化响度等功能。

动态相机会议更新

我们已将 updateOutputConfigurations() 添加到 CameraCaptureSession。这样一来,您就可以动态附加和分离输出 Surface,而无需重新配置整个相机拍摄会话。此变更实现了相机用例和模式(例如拍摄静态图片与拍摄视频)之间的无缝过渡,而无需配置和保留应用在相机启动期间可能需要的所有相机输出 Surface,从而降低了内存成本和代码复杂性。这有助于消除操作期间用户可见的故障或冻结。

fun updateCameraSession(session: CameraCaptureSession, newOutputConfigs:  List<OutputConfiguration>)) {
    // Dynamically update the session without closing and reopening
    try {
        
        // Update the output configurations
        session.updateOutputConfigurations(newOutputConfigs)
    } catch (e: CameraAccessException) {
        // Handle error
    }
}

逻辑多摄像头设备元数据

在使用组合了多个物理摄像头传感器的逻辑摄像头时,您现在可以从拍摄中涉及的所有有效物理摄像头(而不仅仅是主摄像头)请求其他元数据。以前,您必须实现变通方案(有时会分配不必要的物理数据流)才能从辅助有效摄像头获取元数据(例如,在镜头切换以进行缩放时,辅助摄像头处于有效状态)。此功能在 CaptureRequestCaptureResult 中引入了一个新键 LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS。通过在 CaptureRequest 中将此键设置为 ON,TotalCaptureResult 将包含来自这些其他有效物理摄像头的元数据。您可以使用 TotalCaptureResult.getPhysicalCameraTotalResults() 访问此全面的元数据,以获取更详细的信息,这些信息可能有助于您优化相机应用中的资源用量。

多功能视频编码 (VVC) 支持

Android 17 __增加了对多功能视频编码 (VVC) 标准的支持。__这包括在 MediaFormat 中定义 video/vvc MIME 类型,在 MediaCodecInfo 中添加新的 VVC 配置文件,以及将支持集成到 MediaExtractor 中。此功能将适用于具有硬件解码支持和功能驱动程序的设备。

视频录制的恒定质量

我们已将 setVideoEncodingQuality() 添加到 MediaRecorder。这样一来,您就可以为视频编码器配置恒定质量 (CQ) 模式,从而在简单的比特率设置之外更精细地控制视频质量。

后台音频强化

从 Android 17 开始,音频框架将对后台音频互动(包括音频播放、音频焦点请求和音量更改 API)强制执行限制,以确保这些更改是由用户有意启动的。

如果应用尝试在应用处于无效生命周期时调用音频 API,音频播放和音量更改 API 将以静默方式失败,而不会抛出异常或提供失败消息。音频焦点 API 将失败,结果代码为 AUDIOFOCUS_REQUEST_FAILED。

隐私权和安全

废弃明文流量属性

android:usesCleartextTraffic 属性现已废弃。如果您的应用以 Android 17 或更高版本为目标平台,并且依赖于 usesCleartextTraffic="true" 而没有相应的 网络安全配置,则默认情况下会禁止明文流量。我们建议您迁移到 网络安全配置文件以进行精细控制。

HPKE 混合加密

我们将为 HPKE 混合加密的实现引入公共服务提供程序接口 (SPI),从而使用公钥和对称加密 (AEAD) 的组合实现安全通信。

连接和电信

增强型 VoIP 通话记录

我们将为应用 VoIP 通话记录集成引入用户偏好管理。这包括在系统拨号器中支持来电者和参与者头像 URI,从而实现对通话记录隐私的精细用户控制,并丰富集成 VoIP 通话记录的视觉显示。

Wi-Fi 测距和邻近感应

Wi-Fi 测距 已通过新的邻近感应功能得到增强,支持连续测距和安全的对等发现。Wi-Fi Aware 测距的更新包括用于对等句柄的新 API 和用于 11az 安全测距的 PMKID 缓存。

开发者工作效率和工具

配套设备应用的更新

我们为 CompanionDeviceManager 引入了两个新的配置文件,以改进设备区分和权限处理:

  • 医疗设备 :此配置文件允许医疗设备移动应用通过一次点击请求所有必要的权限,从而简化设置过程。
  • 运动手环DEVICE_PROFILE_FITNESS_TRACKER 配置文件允许配套应用明确表明它们正在管理运动手环。这可确保准确的用户体验,并使用不同的图标,同时重复使用现有的手表角色权限。

此外,CompanionDeviceManager 现在还提供用于设备关联和附近权限请求的统一对话框。您可以利用新的 setExtraPermissions 方法在 AssociationRequest.Builder 中捆绑附近权限提示,从而减少向用户显示的对话框数量。

开始使用 Android 17

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

如果您目前参与了 Android Beta 版计划,您将获得 Beta 1 的无线下载更新。

如果您有 Android 26Q1 Beta 版,并且想要获取 26Q1 的最终稳定版并退出 Beta 版计划,则需要忽略 26Q2 Beta 1 的无线下载更新,并等待 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 1 上进行测试的应用开发者,都可以考虑加入我们的社区并提交反馈。我们期待您的反馈。

作者:

继续阅读