产品资讯

Android 17 的首个 Beta 版

阅读用时:7 分钟
查看 Matthew McCullough 的个人资料
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 的一系列季度版本中继续提供更新。我们仅在第二季度即将发布的版本中引入计划的应用破坏性行为变更。我们计划在第四季度发布一个 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 生命周期(从停止到销毁和再次创建),以及相关常量 mcc、mnc 和新常量 keyboard、keyboardHidden、navigation、touchscreen 和 colorMode。

准备应用

我们发布了相关工具和文档,以便您轻松完成此操作。我们的专题博文提供了更多指导,其中包含解决常见问题的策略。应用需要支持各种宽高比窗口尺寸的横向和纵向布局,因为限制屏幕方向或宽高比将不再是一个选项。我们建议您使用 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 系统更新,超过 10 亿台搭载 Android 12(API 级别 31)及更高版本的设备也能享受到 ART 改进带来的好处。

静态 final 字段现在真正为 final

从 Android 17 开始,以 Android 17 或更高版本为目标平台的应用将无法修改“static 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
    }
}

逻辑多摄像头设备元数据

现在,在使用结合了多个物理摄像头传感器的逻辑摄像头时,您可以从参与拍摄的所有活动物理摄像头(而不仅仅是主摄像头)请求额外的元数据。以前,您必须实现权宜解决方法(有时会分配不必要的物理数据流),才能从辅助活动摄像头获取元数据(例如,在变焦镜头切换期间,跟随摄像头处于活动状态)。此功能在 CaptureRequest 和 CaptureResult 中引入了一个新键 LOGICAL_MULTI_CAMERA_ADDITIONAL_RESULTS。通过在 CaptureRequest 中将此键设置为 ON,TotalCaptureResult 将包含来自这些额外活跃物理摄像头的元数据。您可以使用 TotalCaptureResult.getPhysicalCameraTotalResults() 访问这些全面的元数据,以获取更详细的信息,从而优化相机应用中的资源使用。

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

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

视频录制的恒定质量

我们向 MediaRecorder 添加了 setVideoEncodingQuality()。这样,您就可以为视频编码器配置恒定质量 (CQ) 模式,从而更精细地控制视频质量,而不仅仅是简单的比特率设置。

后台音频强化

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

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

隐私权和安全

弃用明文流量属性

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

HPKE 混合加密

我们将推出一个公共服务提供商接口 (SPI),用于实现 HPKE 混合加密,从而能够结合使用公钥和对称加密 (AEAD) 来实现安全通信。

连接和电信

增强型 VoIP 通话记录

我们将推出应用 VoIP 通话记录集成的用户偏好设置管理功能。这包括在系统拨号器中支持来电者和参与者头像 URI,让用户能够精细控制通话记录隐私,并丰富集成式 VoIP 通话记录的视觉显示。

Wi-Fi 测距和邻近检测

Wi-Fi 测距功能得到了增强,新增了邻近检测功能,支持持续测距和安全的点对点发现。Wi-Fi Aware 测距更新包括用于对等句柄的新 API,以及用于 11az 安全测距的 PMKID 缓存。

开发者工作效率和工具

配套设备应用更新

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

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

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

Android 17 使用入门

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

如果您目前已加入 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 上进行测试的应用开发者,都欢迎加入我们的社区并提交反馈。我们听到了大家的心声。

作者:
继续阅读