Android 17 现已推出
阅读用时:13 分钟
今天,我们发布了 Android 17,并使其可在大多数受支持的 Pixel 设备上使用。未来几个月内,敬请期待搭载 Android 17 的新设备。
Android 17 标志着我们开始向智能系统过渡,将您的应用置于中心位置。Android 正在转向自适应优先的开发标准,引入强制性的大屏可调整尺寸功能,同时提供新一代隐私保护、安全、媒体、相机和性能。本文将介绍上述所有内容,以及我们如何将新一代工具、库和智能体技能整合在一起,帮助您的应用把握这一机遇。
过去一年来,从 Canary 渠道到 Beta 版发布,我们与开发者社区中的许多人合作,共同打造了一个您和您的用户可以信赖的平台。为此,我们在此宣布,Android 开源项目 (AOSP) 中现已提供源代码。这样一来,您就可以检查源代码,从而更深入地了解 Android 的运作方式。
让我们深入了解一下 Android 17。
情报系统
通过将硬件、软件和 AI 深度集成,我们将 Android 从操作系统转变为智能系统。这旨在提供可预测用户需求的新实用体验,并为您的应用带来更多互动机会。为此,Android 17 扩展了 AppFunctions 的功能,这是一个具有相应 Jetpack 库的平台 API。它允许您将应用的独特功能作为可编排的“工具”贡献给 Android MCP,这是 Model Context Protocol 的设备端等效项。AI 代理和助理(例如 Google Gemini)可以发现并执行 AppFunctions,以代表用户执行工作流,并直接访问应用的本地状态。
Jetpack 库目前处于 Alpha 版阶段,可让您轻松添加 AppFunctions,只需为类添加注释和 KDoc 注释即可。
/** * A note app's [AppFunction]s. */ class NoteFunctions( private val noteRepository: NoteRepository ) { /** * Adds a new note to the app. * * @param appFunctionContext The execution context. * @param title The title of the note. * @param content The note's content. */ @AppFunction(isDescribedByKDoc = true) suspend fun createNote( appFunctionContext: AppFunctionContext, title: String, content: String ): Note { return noteRepository.createNote(title, content) } }
我们还推出了 AppFunctions 智能体技能,该技能可分析应用的关键工作流程,自动生成所需的 Kotlin 代码,针对 LLM 工具调用优化 KDoc,并提供用于测试和调试的 ADB 命令。
Gemini 集成目前正面向可信测试人员开放私测预览,但您现在就可以着手为您的应用做好准备。除了使用 ADB 命令来执行 AppFunctions 之外,我们还提供了一个测试代理应用,其中包含一个用于发现和执行 AppFunctions 以及模拟 AI 智能体集成的界面。加入我们的集成抢先体验计划 (goo.gle/eap-af),就有机会成为首批将 AppFunctions 部署到正式版环境的应用。
自适应优先
您的用户不再依赖单一的设备形态,而是在手机、可折叠设备、平板电脑、笔记本电脑、车载显示屏和沉浸式 XR 环境之间切换。现在,用户手中拥有超过 5.8 亿台大屏设备,并且 Googlebooks 即将推出,下一代 ChromeOS 基于 Android 堆栈构建,自适应不再仅仅是一个技术目标。这是一个覆盖高度互动的用户的绝佳机会,这也是我们改用自适应优先开发标准的原因之一。
大屏设备上没有尺寸调整/屏幕方向限制
为确保应用在所有设备规格(包括在连接的显示屏上以桌面模式运行的移动设备)上都能提供优质体验,Android 17(API 级别 37)移除了针对面向 API 级别 37 的应用在大屏设备 (sw > 600 dp) 上设置的屏幕方向和尺寸调整限制的开发者选择停用功能。系统将忽略旧版清单属性和运行时 API,包括 screenOrientation、setRequestedOrientation()、resizeableActivity=false 和宽高比限制 (minAspectRatio/maxAspectRatio)。游戏(基于 Google Play 中的应用类别)仍可免除此要求。应用必须能够适应任何窗口大小,尊重用户偏好的设备姿态,并原生支持自由窗口模式。
新一代多任务处理:应用气泡、气泡栏和桌面互动式画中画
Android 17 引入了强大的新窗口功能,重新定义了用户执行多任务的方式,对应用的布局灵活性提出了更高的要求:
- 应用气泡: 除了消息气泡 API 之外,用户现在还可以通过在启动器中长按任何应用的图标,将其转换为浮动气泡。此功能适用于手机、可折叠设备和平板电脑,可为任何工作流程实现轻量级多任务处理。
- 气泡栏:在大屏设备(平板电脑和可折叠设备)上,系统任务栏现在包含一个专用气泡栏,用于整理、切换和停靠这些浮动应用气泡。
- 桌面互动式画中画:在桌面环境中,Android 17 引入了互动式画中画 (PIP)。与只读的传统画中画窗口不同,这些固定窗口在始终位于其他应用窗口顶部的情况下,仍保持完全互动。
activity 重新创建更新
为防止出现破坏性状态丢失和卡顿,Android 17 更新了 activity 重新创建的默认行为。对于不需要完全重绘界面的典型配置更改(包括 CONFIG_KEYBOARD、CONFIG_KEYBOARD_HIDDEN、CONFIG_NAVIGATION、CONFIG_TOUCHSCREEN 和 CONFIG_COLOR_MODE),系统将不再默认重启 activity。
相反,正在运行的 activity 将通过 onConfigurationChanged() 接收这些更新,从而实现平稳过渡。如果您的应用明确依赖于完全重启来重新加载这些更改的资源,您现在必须使用新的 android:recreateOnConfigChanges 清单属性明确选择启用此行为。
接续操作
Android 17 新增了“继续处理”功能,可帮助用户在 Android 设备之间无缝切换任务。用户会在平板电脑的任务栏中看到移动设备上最近打开的应用的建议,只需点按一下即可启动应用并进行深层链接,以便从上次中断的地方继续操作。“继续”功能可以支持应用到网站的过渡,包括在未安装应用的情况下回退到使用网站。
class MyHandoffActivity : Activity() {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Do stuff
...
// Enable handoff
setHandoffEnabled(true, null)
}
// Override and implement onHandoffActivityDataRequested
override fun onHandoffActivityDataRequested(handoffRequestInfo: HandoffActivityDataRequestInfo) : HandoffActivityData {
// Create and return handoff data
}
}使用 Jetpack Compose 优先打造自适应应用
为了帮助您调整应用以满足新的 Android 17 要求,我们推出了 Jetpack Compose 自适应技能。这种由 AI 赋能的开发者工作流可帮助您实现最佳的自适应实践:
- 自适应导航:使用 Material 3 自适应库中的
NavigationSuiteScaffold,在移动设备上的底部导航栏和大屏设备上锚定到边缘的导航栏之间自动转换。 - 多窗格布局:使用 Navigation 3 场景(
ListDetailSceneStrategy和SupportingPaneSceneStrategy)以原生方式实现列表-详情和辅助窗格布局,而不是使用脆弱的 fragment 事务。 - FlexBox 和 Grid API:利用 Compose 1.11 的动态布局组件,轻松实时调整行跨度和列跨度,确保内容始终能完美填充空间。
- 高级非触控输入:利用 Compose 1.11 增强的触控板和鼠标支持,包括原生焦点环和新 API(例如
TrackpadInjectionScope和performTrackpadInput),以便在 Googlebooks 和桌面模式下轻松测试并提供真正的“笔记本电脑级”体验。 - 动态窗口状态:利用 Compose 的响应式状态模型,在应用从全屏过渡到浮动应用气泡或互动式桌面 PiP 窗口时,无缝调整界面,即使在最小尺寸下也能确保优质体验。
Android 优先采用 Compose
Compose 提供了一种最简单的方式来构建自适应应用,而这只是我们认为所有 Android 界面都应使用 Compose 构建的众多原因之一。为此,Android 开发现已全面转向 Compose 优先。所有新的 Android API、库、工具和开发者指南都将专门为 Jetpack Compose 构建。旧版 View 组件(位于 android.widget 软件包中)和基于 View 的 Jetpack 库(例如 Fragments、RecyclerView 和 ViewPager)现在处于维护模式。它们只会收到关键问题修复,而不会收到新功能。
提示准备好迁移了吗?使用我们由 AI 驱动的 XML 到 Compose 迁移技能,自动分析旧版 View 布局并将其转换为高度自适应的 Compose 代码。
效果和效率
应用性能是指流畅的界面、快速的应用启动时间和高效的多任务处理;Android 17 在所有这些方面都有显著改进。
应用内存限制
内存用量是影响整体性能的无声基础之一。当某个前台应用或服务不受控制地增长时,内存管理会使 CPU 和电池利用率飙升,最终导致其他行为良好的已缓存应用和后台作业终止,最终导致冷启动速度变慢,多任务处理能力下降。
从 Android 17 开始,系统将根据设备的总 RAM 强制执行严格的应用内存限制,并突然终止违规进程。以下新功能可帮助您应对这些更严格的要求:
- R8 优化器:R8 优化器通过将类、方法和字段缩减为更短的名称,并剥离未使用的代码和资源,显著减少应用的字节码内存占用空间。请在完整模式下使用 R8,并搭配新的 R8 配置分析器,确保您的应用充分利用 R8。
- Android Studio Panda 中的 LeakCanary: 性能分析器现在提供原生 LeakCanary 集成,作为一项专用任务,与您的 IDE 和源代码完全集成。
- ApplicationExitInfo:如果您的应用因这些限制而被终止,ApplicationExitInfo 中的 getDescription() 将返回“MemoryLimiter:AnonSwap”。
- 设备端异常值检测:作为 ProfilingManager 的一部分,您可以利用基于触发器的分析功能(使用
TRIGGER_TYPE_ANOMALY)在达到内存限制时自动捕获堆转储。
val profilingManager = applicationContext .getSystemService(ProfilingManager::class.java) val triggers = ArrayList<ProfilingTrigger>().apply { add(ProfilingTrigger.Builder( ProfilingTrigger.TRIGGER_TYPE_ANOMALY).build()) } profilingManager.addProfilingTriggers(triggers)
此外,我们还致力于在 Google Play 管理中心内向您显示更多现场内存指标。
分代垃圾回收
Android 17 为 ART 的并发标记压缩式垃圾回收器 (GC) 引入了频率更高、资源消耗更低的新生代回收。通过将存留期较短的对象与稳定的长存留期对象分开,系统可以频繁运行轻量级的“年轻代”扫描,而不是代价高昂的完整堆扫描,从而大幅降低 CPU 使用率、耗电量和界面卡顿。我们的测试表明,GC 对应用线程的干扰显著减少,并且最大内存常驻集大小 (RSS) 也随之减少。通过 Google Play 系统更新,搭载 Android 12(API 级别 31)及更高版本的 10 亿多台设备也可使用 ART 改进。
无锁 MessageQueue
对于以 SDK 37 或更高版本为目标平台的应用,核心 android.os.MessageQueue 现在实现了无锁架构,可显著减少丢帧,缩短应用启动时间,并大幅提升多线程场景中繁忙队列的性能。注意:这可能会破坏对私有 MessageQueue 字段和方法使用反射的应用。TestLooperManager 中添加了 peekWhen 和 poll API,以便在不依赖 MessageQueue 内部结构的情况下进行插桩测试。
静态 final 字段现在真正是 final 字段
从 Android 17 开始,以 SDK 37 或更高版本为目标平台的应用将无法修改“static final”字段,从而使运行时能够更积极地应用性能优化。尝试通过反射(或深度反射)执行此操作会导致抛出 IllegalAccessException。
通过 JNI 的 SetStatic<Type>Field 方法系列修改它们会导致应用立即崩溃。
自定义通知视图限制
为了减少内存用量,我们进一步限制了 自定义通知视图的大小。此更新填补了一个漏洞,该漏洞允许应用使用 URI 绕过现有限制。此行为受目标 SDK 版本限制,并且对以 API 37 及更高版本为目标平台的应用生效。
隐私权和安全
维护用户信任是 Android 生态系统的核心。Android 17 引入了强大的功能,可在简化用户体验的同时保护敏感数据。
可保护隐私的选择
过去,应用需要获得广泛的永久权限才能访问联系人、精确位置信息和媒体文件等信息。Android 17 继续朝着保护隐私的方向发展,仅授予对用户明确选择的数据的临时会话式访问权限:
- 系统级联系人选择工具:利用
ACTION_PICK_CONTACTS,应用可以仅请求临时访问用户选择的特定字段(例如电子邮件地址或电话号码),从而无需使用广泛的READ_CONTACTS权限。它还完全支持工作/个人资料分隔。 - 可自定义的照片选择器宽高比:借助 PhotoPickerUiCustomizationParams,您可以自定义系统照片选择器,使其以竖屏模式显示缩略图。这非常适合始终以竖屏模式显示照片和视频的应用,例如基于视频的社交媒体应用。
- 系统渲染的位置信息按钮:您可以将新的系统渲染的位置信息按钮嵌入到应用中,以便仅在当前会话期间授予精确位置信息访问权限。
- EyeDropper API:借助新的系统级 API
ACTION_OPEN_EYE_DROPPER,您的应用可以创建由系统驱动的取色器,让用户能够从显示屏上的任意像素中选择颜色。这样一来,用户就能安全地选择颜色,同时保护隐私,而无需广泛的敏感屏幕捕获或媒体投影权限。
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) }
本地网络访问权限
以 Android 17 为目标平台的应用现在需要 ACCESS_LOCAL_NETWORK 运行时权限,或者使用系统介导的、可保护隐私的设备选择器进行本地网络通信,例如与智能家居设备或投屏接收器通信。由于 ACCESS_LOCAL_NETWORK 属于现有的 NEARBY_DEVICES 权限组,因此已授予其他 NEARBY_DEVICES 权限的用户不会再次收到提示。
动态短信密码保护
Android 17 通过将对短信的访问延迟 3 小时来扩展短信动态密码 (OTP) 保护:
- WebOTP 格式: 对于所有不是预期接收者的应用(网域不匹配),延迟发送。
- 标准短信动态密码: 对于以 SDK 37 及更高版本为目标平台的所有应用,延迟时间为 3 秒。
例外情况:默认短信应用、助理应用和关联的配套应用可获豁免。强烈建议应用迁移到 SMS Retriever 或 SMS User Consent API。
后量子加密 (PQC)
Android 17 已为新一代加密安全技术做好准备:
- Keystore 集成:受支持的设备可以在安全硬件中生成 ML-DSA(基于模块网格的数字签名算法)密钥,以生成量子安全签名,并通过标准 JCA API 公开。
- 混合 APK 签名:推出 v3.2 APK 签名方案,该方案将经典签名与 ML-DSA 签名相结合,以确保应用交付安全。
更安全的原生动态代码加载
如果您的应用以 SDK 37 或更高版本为目标平台,则 Android 14 中针对 DEX 和 JAR 文件引入的更安全地动态加载代码 (DCL) 保护机制现在也适用于原生库。使用 System.load 加载的所有原生文件都必须标记为只读。否则,系统会抛出 UnsatisfiedLinkError。
针对实体输入的更智能的密码保护
在 Android 17 中,我们默认不再显示最近输入的字符,从而让用户在使用实体键盘时更安全地输入密码、PIN 码和其他机密信息。
用户仍然可以轻松自定义这些显示设置,以符合自己的偏好设置(可用性可能因设备制造商而异)。
Android 的内置 SDK 组件会自动支持这些增强的隐私保护功能,并且这些功能将在 Compose 1.12 中支持 SecureTextFields。
可帮助创作者创作出精彩内容并让用户满意的媒体和相机功能
Android 17 引入了新的创作者功能,可让用户使用专业级相机和媒体,同时还能提升消费者体验。
- Eclipsa Video:基于 SMPTE ST 2094-50 规范构建的 HDR 视频标准,引入了新的元数据,可帮助设备根据显示余量和环境光条件调整内容,并改进标准内容和 HDR 内容的同时显示。
- RAW14 图片格式:新增对 RAW14 图片格式的支持,让专业相机应用能够从兼容的相机传感器中捕捉到最高级别的细节和色彩深度。
- 供应商定义的相机扩展:供应商定义的扩展使硬件合作伙伴能够定义和实现自定义相机扩展模式,从而提供对最新最佳相机功能的访问权限。
- 扩展型 HE-AAC 软件编码器:一种新的系统提供的扩展型 HE-AAC 软件编码器,使用统一的语音和音频编码,支持低比特率和高比特率,可在低带宽条件下显著提升语音消息的音质,包括支持响度元数据。
- 多功能视频编码 (H.266):使 OEM 能够通过在 MediaFormat 中定义 video/vvc MIME 类型、在 MediaCodecInfo 中添加新的 VVC 配置以及将支持集成到 MediaExtractor 中来添加编解码器支持。
- 相机设备类型:用于查询底层设备类型的新 API,可用于识别相机是内置硬件、外置 USB 网络摄像头还是虚拟摄像头。
- 视频录制恒定质量:MediaRecorder 中的 setVideoEncodingQuality 可为视频编码器配置恒定质量 (CQ) 模式,以确保整个视频的视觉保真度保持一致。
更好地支持助听器
- 低功耗蓝牙音频助听器支持:Android 现在包含一个用于低功耗蓝牙 (BLE) 音频助听器的特定设备类别,并提供新的 AudioDeviceInfo.TYPE_BLE_HEARING_AID 常量,因此您的应用可以区分助听器和常规耳机,从而为使用辅助听力设备的用户提供量身定制的体验。
- 针对助听器的精细音频路由:Android 17 允许用户独立管理特定系统声音的播放位置。用户可以选择将通知、铃声和闹铃路由到已连接的助听器或设备的内置扬声器,从而避免不必要的入耳中断,同时保持蓝牙连接以供助听器管理应用使用。
CameraX 和 Media3
CameraX 和 Media3 已针对 Android 17 进行更新。它们可以帮助您完成繁重的工作,消除媒体开发中的不足之处,并简化可靠的相机拍摄、流畅的媒体播放以及富有创意且复杂的编辑体验的构建过程。
我们发布了一项代理技能,可将旧版 Android 相机实现(Camera1 或原始 Camera2 API)迁移到 CameraX。
注意:您需要将 CameraX 版本更新为 1.5.2 或 1.6.0 及更高版本,以避免在 Android 17 设备上因添加的动态范围模式而导致崩溃。
让您的应用、库、工具和游戏引擎做好准备!
如果您开发 Android SDK、库、工具或游戏引擎,请务必立即准备好所有必要的更新,以免下游应用和游戏开发者因兼容性问题而受阻,并允许他们以最新的 SDK 功能为目标平台。如果需要更新才能完全支持 Android 17,请告知下游开发者。
测试包括使用 Google Play 或其他方式将您的正式版应用或使用您的库或引擎的测试应用安装到运行 Android 17 Beta 4 的设备或模拟器上。完成应用的所有流程,并查找功能或界面问题。每个 Android 版本都包含可提升隐私保护、安全性和整体用户体验的平台变更;请查看针对在和以 Android 17 为目标平台的应用的应用影响行为变更,以便有重点地进行测试,包括以下内容:
- 大屏上的尺寸调整: 将目标平台设为 Android 17 (SDK 37) 后,您将无法再选择不保持大屏上的屏幕方向、尺寸调整和宽高比限制。
- 动态代码加载:如果您的应用以 SDK 37 或更高版本为目标平台,则 Android 14 中针对 DEX 和 JAR 文件引入的更安全的动态代码加载 (DCL) 保护功能现在也适用于原生库。使用 System.load() 加载的所有原生文件都必须标记为只读。否则,系统会抛出 UnsatisfiedLinkError。
- 默认启用 CT:默认启用证书透明度 (CT)。(在 Android 16 上,CT 可用,但应用必须选择启用。)
- 本地网络保护: 以 SDK 37 或更高版本为目标平台的应用默认禁止本地网络访问。尽可能切换为使用可保护隐私的选择器,并使用新的
ACCESS_LOCAL_NETWORK权限来实现广泛的持久访问。 - 后台音频安全加固:从 Android 17 开始,音频框架会强制执行后台音频交互限制,包括音频播放、音频焦点请求和音量更改 API。根据您的反馈,自 Beta 2 以来,我们进行了一些更改,包括在强制执行使用时 FGS 时添加了 targetSDK 门控,以及免除了闹钟音频。如需了解详情,请参阅更新后的指南。
- NPU 访问权限声明:如果以 Android 17 为目标平台的应用需要直接访问 NPU,则必须在其清单中声明
FEATURE_NEURAL_PROCESSING_UNIT,以免被阻止访问 NPU。这包括使用 LiteRT NPU 委托、特定于供应商的 SDK 以及已废弃的 NNAPI 的应用。
Android 17 使用入门
如果您的 Pixel 设备尚未加入 Android Beta 版计划,应该很快就会收到 Android 17 更新。如果您没有 Pixel 设备,可以在 Android Studio 中使用 64 位系统映像搭配 Android 模拟器。如果您目前使用的是 Android 17 Beta 4.1,但尚未采用 Android 17 QPR1 Beta 版,则可以选择退出该计划,然后系统会通过无线下载的方式向您提供 Android 17 发布版本。
在合作伙伴设备上获取 Android 17 Beta 版
Android 17 现已推出 Beta 版,适用于手机、平板电脑和可折叠设备,合作伙伴包括 Honor、iQOO、Lenovo、OnePlus、OPPO、Realme、Sharp、vivo 和 Xiaomi。
为了获得最佳的 Android 17 开发体验,我们建议您使用最新 Canary 版的 Android Studio Quail。设置完成后,您应执行以下操作:
- 测试当前应用的兼容性,了解您的应用是否受到 Android 17 中的变更的影响,并将应用安装到运行 Android 17 的设备或 Android 模拟器上,然后进行广泛测试。
再次感谢所有参与 Android 开发者预览版和 Beta 版计划的社区成员。我们期待看到您的应用如何利用 Android 17 中的更新,并计划在未来以快节奏的发布周期为您带来更新。
如需详细了解 Android 17,请访问 Android 17 开发者网站。
继续阅读
-
产品资讯
Android 17 今天已通过 Beta 3 正式实现平台稳定性。这意味着 API 表面已锁定;您可以执行最终的兼容性测试,并将以 Android 17 为目标平台的应用推送到 Play 商店。
Matthew McCullough • 阅读用时:5 分钟
-
产品资讯
2026 年 Google I/O 大会发布了 17 项针对 Android 开发者的重要公告,重点介绍了以智能体为主导的生产力、作为界面标准的 Compose First,以及不断扩大的生态系统中的高性能媒体和自适应开发。
Matthew McCullough • 阅读用时:8 分钟
-
产品资讯
在今日举办的 The Android Show 上,Google 宣布 Android 正从操作系统转型为智能系统,为您的应用创造更多互动契机。
Matthew McCullough • 阅读用时:4 分钟
随时了解最新动态
每周通过电子邮件接收最新的 Android 开发洞见。