欢迎阅读“Android 开发者最新动态”,这是您了解 Android 开发领域最新动态和重要资讯的持续指南。
请继续阅读,了解 Android 16 QPR2 Beta 1、Android Studio Narwhal 功能更新、Jetpack Compose 1.9、Media 3 1.8、形状变形和 Compose 中的自动填充等精彩内容。
您可以观看视频摘要:
我们还推出了播客。
不过,本文包含的信息最深入,请继续阅读!
Android 16 QPR2 Beta 1 现已推出 ✨
Android 16 QPR2 的首个 Beta 版现已推出,这是首个包含 Android 次要 SDK 版本的 Android 版本。SDK 次要版本可以包含扩展平台功能的新 API,但不能引入 targetSdkVersion 限制的行为变更,从而最大限度地减少您需要针对其测试应用的次数。
您可以通过对照 VERSION_CODES_FULL 枚举检查 SDK_INT_FULL 来调用新 API:
if (Build.VERSION.SDK_INT_FULL >= Build.VERSION_CODES_FULL.BAKLAVA_1) { // Call new APIs from the Android 16 QPR2 release }
VERSION_CODES_FULL 不能在 uses-sdk 清单属性中使用。
以下是 QPR2 Beta 1 的一些重要更新。
界面、系统体验和无障碍功能:
- 扩展深色主题选项可为偏好深色外观的用户智能反转浅色应用。
- 如果您的应用不提供单色图层,系统可以生成自动匹配主题的应用图标。
- 互动式选择器会话使用
ChooserManager和ChooserSession,在分享表单打开时保持应用界面处于活跃状态。 - 新的 Data Transfer API 可在 Android 和 iOS 之间实现更可靠、更安全的数据迁移,这需要更新应用的数据提取规则 XML 和
BackupAgent实现。 android.graphics.pdf软件包已扩展,支持通过PdfRenderer.Page为 PDF 文档添加注释和进行编辑。ViewConfiguration值现在针对各个虚拟设备进行了定制;对于多显示屏场景,请迁移到ViewConfiguration.get(context)。- 通过指定
VibrationAttributes和View.performHapticFeedback(HapticFeedbackRequest),您可以更精细地控制触感反馈 - 现在,您可以在
AndroidManifest.xml文件中将“快捷设置”功能块分配到预定义的类别。
媒体和音频:
- 针对沉浸式音频模型和格式 (IAMF)(一种开放式空间音频格式)的软件解码。
- 适用于蓝牙 LE 音频设备的个人音频分享功能已直接集成到系统的输出切换器中。
- 用户可以使用 HDR/SDR 亮度滑块控制 HDR 的亮度
- 照片选择器 extra 可以突出显示特定相册或搜索查询。
连接性:
- 借助配套设备管理器 (Companion Device Manager) 增强功能,您可以提供自定义设备图标、监听
EVENT_ASSOCIATION_REMOVED回调,以及使用 DeviceId 启用跨应用验证。 - 蓝牙更新包括对
BluetoothLeScanner(ScanSettings.SCAN_TYPE_PASSIVE) 的被动扫描支持、绑定丢失原因 (BluetoothDevice.EXTRA_BOND_LOSS_REASON) 以及直接检索服务 UUID (BluetoothDevice.EXTRA_UUID_LE)。 - Wi-Fi RTT 测距更新 (
RttStationRangingParams) 支持针对工作站进行测距。 - 新增了
PhoneNumberManager,用于解析和验证 IMS P-Associated-URI 标头中的电话号码。 - MediaRouter 网络隐私改进允许通过蓝牙和 UWB 等新媒介进行投屏;您应使用系统输出切换器,或为自定义应用内选择器请求
NEARBY_DEVICES权限。
隐私和安全:
- 新增了系统级安全状态“安全锁定设备”,该状态会锁定设备,并要求通过主要身份验证方式解锁。
- 为手机盗窃防护功能添加了面向用户的切换开关,用于启用/停用“身份验证失败锁定”。
开发者工作效率:
- 借助新的
AppWidgetManagerAPI,您可以查询 widget 互动指标。 - 现在,通过 ADB 安装的可调试应用会收到有关 16KB 页面大小兼容性的早期警告。
ProfilingManager新增了对系统发起的新性能分析触发器和requestRunningSystemTrace的支持,以捕获后台跟踪记录。- 开发者选项中的“详细打印日志记录”切换开关可为 Android 打印框架提供额外的调试信息。
- 借助适用于非默认显示屏上的屏幕截图的新
UiAutomationAPI 和公开AccessibilityWindowInfo.refresh,可以更可靠地测试桌面和多显示屏体验。 - 为新的
androidx.core:core-backported-fixes库添加了 API 支持。 - Linux 终端现已支持 GUI 应用
WindowInspector.addGlobalWindowViewsListener支持实时根视图更改通知。
您可以注册任何受支持的 Pixel 设备,以通过无线下载方式接收 Beta 版更新,也可以在 Android Studio 中将 64 位系统映像与 Android 模拟器搭配使用。平台稳定性里程碑计划于 2025 年 10 月发布。
Android Studio Narwhal 功能更新稳定版已发布,快来体验智能体模式吧 🐳
Android Studio Narwhal 功能更新现已推出稳定版,新功能和增强功能包括:
- Android Studio 中的 Gemini:智能体模式可用于多阶段编码任务
- 提示库 规则可根据项目需求自定义 Gemini 的 AI 输出。
- Transform UI with Gemini 使用自然语言界面来迭代 Compose 界面。
- 沉浸式开发支持,包括嵌入式 XR Android 模拟器、全新 XR 模板和嵌入式 XR 布局检查器
- 通过 Android 设备串流中的 Android Partner Device Labs 扩大设备访问范围。
- 更出色的 Compose 预览,具有改进的代码导航功能和全新的 Compose 预览选择器
- 默认启用 K2 Kotlin 编译器,以提高 build 性能
- 16kb 页面大小工具,提供 lint 警告、分析和模拟器,帮助您为即将推出的 16kb 页面大小设备做好准备。
Android 设备串流(由 Firebase 提供支持)
由 Firebase 提供支持的 Android 设备串流功能现已稳定支持 Android 合作伙伴设备实验室,让您能够远程连接到由三星、小米、OPPO、一加和 vivo 等 OEM 合作伙伴托管的实体 Android 设备。
Android Studio 每月发布新版本,发布频率比以前提高了一倍,助力加速开发
Android Studio 正在过渡到每月发布稳定版本的节奏,以便更快地为您提供新功能和关键问题修复。Android Studio IDE 将每月更新一次,而新的 IntelliJ 平台版本将每隔几个月推出一次,期间会发布功能更新作为过渡性稳定版本。Android 模拟器和 Android Gradle 插件将继续每两个月单独更新一次。这种加速发布时间表得益于对测试基础架构的长期投资。
Jetpack Compose 2025 年 8 月版的最新动态 🚀
Jetpack Compose 2025 年 8 月版(1.9 版)现已是稳定版。此版本引入了 Modifier.dropShadow 和 Modifier.innerShadow,用于呈现 box-shadow 效果。借助新的 onVisibilityChanged 和 onFirstVisible 修饰符,您可以跟踪元素可见性,以便进行界面更新或展示日志记录。您可以使用 TextFieldBuffer.addStyle 在 OutputTransformation 中应用丰富的样式,以实现文本转换。
LazyLayout 构建块现已稳定,您可以定义 LazyLayoutCacheWindow,通过增强的预提取功能提升延迟列表和网格性能。Scrollable2D 支持二维滚动(包括快速滑动和嵌套滚动),并针对与 View 的滚动和嵌套滚动互操作性进行了各种改进。选择启用 API (Composer.setDiagnosticStackTraceEnabled) 可在堆栈轨迹中提供更丰富的崩溃位置详细信息,建议仅用于调试 build。新的 @RememberInComposition 和 @FrequentlyChangingValue 注解以及关联的 Lint 检查可在新的运行时注解库中使用。您可以使用 Modifier.appendTextContextMenuComponents 和 Modifier.filterTextContextMenuComponents 自定义上下文菜单。现在需要使用 Android Gradle 插件 (AGP) / Lint 8.8.2 或更高版本。
Media3 1.8.0 - 新变化🚀
Media3 1.8.0 现已上架,其中引入了多项新功能和改进。ExoPlayer 增加了拖动模式,可用于频繁的用户驱动型跳转,您可以通过 ExoPlayer.setScrubbingModeEnabled 启用该模式。HlsInterstitialsAdsLoader 现在支持通过服务器引导的广告插播功能投放直播广告。
MetadataRetriever 已更新,现在您无需播放即可检索媒体文件时长。对于 Transformer,此版本引入了使用 MP4 编辑列表和 experimentalSetMp4EditListTrimEnabled 的更快剪辑操作,以及通过 CodecDbLite 实现的芯片组专用编码器优化,这些优化可通过在 DefaultEncoderFactory.Builder 上调用 setEnableCodecDbLite 来启用。
其他更新包括:Downloader 中通过 PreCacheHelper 提供的部分下载支持、ExoPlayer 中的自动 XR 音频路由,以及更高效的 MediaCodec 交互。现在,MediaSession 模块默认会延长通知的显示时间,并且媒体会话演示应用会展示恢复播放功能。一款使用 Kotlin 和 Compose 构建的新 Composition 演示应用,展示了高级多素材资源视频编辑功能。
文章 📚
#WeArePlay:走近这些用代码构筑可持续世界的开发者
#WeArePlay 计划重点推介应对环境挑战的 Android 应用和游戏。由 Mayla、Flávia、Andréia 和 Ariane 开发的游戏“BoRa — Iguaçu National Park”为公园游客提供游戏化且无障碍的互动体验,让游客在游览公园的同时接受自然教育。Louis 和 Justin 开发的应用 CyberTracker 采用基于图标的界面,让不识字的土著追踪者也能记录生物多样性数据,从而为保护工作提供支持。最后,由 Bharati 和 Saurabh 共同创立的 Earth5R 提供环境教育,并为用户提供实习和项目机会,帮助他们培养绿色经济所需的技能。
什么是 HDR? 🌟
高动态范围 (HDR) 可让 Android 开发者实现比标准动态范围 (SDR) 更高的峰值亮度,从而提升视觉保真度。Android 支持视频和图片的 HDR,包括 UltraHDR 等技术,以实现向后兼容。
了解颜色涉及三个方面:
- 位深:定义色彩表现的精确度,位深越高,过渡越平滑。
- 传递函数:将数字像素值映射到显示的亮度或颜色,并针对非线性的人类视觉响应进行调整。例如 sRGB、HLG 和 PQ。
- 色域:表示设备可以再现的颜色范围。
关于 HDR 的常见误解:
- 鲜艳的色彩:在 HDR 出现之前,Display P3 和 Adobe RGB 等更广的色域就已经存在,即使是 BT.2020 内容,大多数显示屏仍会将其剪裁到 P3。
- 对比度更高/黑色细节更丰富:在同一显示屏上,HDR 本身并不会比 SDR 提供更深的黑色。OLED 显示屏可为两者提供无限对比度。虽然 PQ 会为暗区分配更多比特,但它并不是一项通用的 HDR 功能。
- 更高的位深:虽然某些 HDR 视频配置文件(例如 HDR10)使用 10 位或 12 位数据流,但这仅适用于这些配置文件,并非 HDR 本身所固有;更高的位深在其他图片格式中也很常见。
HDR 主要意味着 更高的峰值亮度。此“HDR 净空”定义为相对于 SDR 的浮动区域。传统 HDR 视频通常会编码固定的余量,而现代显示屏则使用动态余量,这可能会导致画质差异。Ultra HDR 和增益图等技术提供了可高效利用比特的替代方案。Android 的界面工具包利用 extendedRangeBrightness API 提供 HDR 体验,即使使用 RGBA_8888 也是如此。
视频 📹
具有形状变形功能的高级共享元素 | Jetpack Compose 提示
Jetpack Compose 现在支持高级共享元素过渡、复杂的形状变形和揭露动画。开发者可以在应用的顶层配置 SharedTransitionLayout,并使用 Modifier.sharedBounds 关联元素。
形状变形是一项重要的新功能,通过利用 Material 3 的 AndroidX 图形形状库实现。这涉及创建一个具有已定义起始/结束形状的 Morph 对象,使用 animateFloat(来自 AnimatedVisibilityScope)驱动其进度,并通过自定义 OverlayClip 将其作为剪辑应用。揭示效果使用 skipToLookaheadSize 和 skipToLookaheadPosition。所有这些高级动画也与预测性返回手势兼容。
Android Studio 中的多模态 Gemini:AI 赋能的界面开发
Android Studio 中的 Gemini AI 可通过以下方式协助界面开发:根据设计生成代码(包括图片转代码)、使用合成数据创建 Compose 预览,以及通过直接命令优化现有界面。
使用支持运行时的 SDK
Android 14 引入了 SDK 运行时,这是一项新技术,可将第三方 SDK 隔离在安全的独立进程沙盒中,以增强隐私性和安全性。
对于开发者:
- 支持运行时 (RE) 的 SDK 在此单独进程中执行。
- 可感知运行时的 (RA) SDK 在应用中充当中介。
- 使用
SdkSandboxManagerCompat加载 RE SDK,并遵守相关限制(例如前台、单次加载)。 - Shim 工具可简化低级进程间通信。
- 使用
SandboxedSdkView和SandboxedUiAdapter呈现 RE SDK 中的界面。 - 使用
SdkActivityLauncher从 SDK 运行时启动 activity。
Wear OS Material 3 形状变形 | Jetpack Compose 提示
Wear OS Material 3 for Compose 现在简化了形状变形。开发者可以使用 IconButtonDefaults.animatedShapes 轻松为圆形按钮添加动画形状变化,使用 ButtonGroup 组件和 Modifier.animateWidth() 创建可为宽度变化添加动画效果的按钮组,以及构建垂直滚动列表 (TransformingLazyColumn),其中列表项在接近屏幕边缘时会使用 TransformationSpec 进行缩放和变形。
AndroidX 版本 🚀
下面简要介绍了 AndroidX 的变更,并优先列出了与 Android 应用开发者最相关的变更:
对 Compose 库的整体影响:
- 默认
minSdk提高到 API 23:对于androidx.composeanimation、foundation、material、runtime和ui,默认最低 SDK 版本已从 API 21 提高到 API 23。这意味着,如果您使用的是这些 Compose 库的最新 Alpha 版,您的应用将隐式要求搭载 Android 6.0 (Marshmallow) 或更高版本。
Compose 开发者需要注意的主要变化:
- 新的 retain API(Compose 运行时):引入了类似于
rememberSaveable的 retain API,但适用于离开组合层次结构且未序列化的值。它的生命周期比已保存的值短,行为类似于ViewModel,为可能进入和退出组合的可组合项提供了一种新的状态管理方式。 - 增强型共享元素过渡(Compose 动画和界面):新增了 API,可动态启用/停用共享元素、考虑正在进行的过渡,并在共享元素被处置时设置替代目标边界。此外,还提供了一个新的
Modifier.skipToLookaheadPosition,用于锚定布局。 - 改进了 Pager 预提取(Compose Foundation):Pager 的预提取策略现在使用“缓存窗口”(1 个视口大小),而不是单个项,并且默认启用初始预提取。列表项也会保留更长时间,以便实现更流畅的滚动。
- 针对鼠标/触控板优化了焦点处理(Compose Foundation 和 Compose UI):现在,当在焦点节点之外发生指针按下事件(来自鼠标或触控板)时,
ComposeViews会自动清除焦点。您可以选择停用此功能。 - 可自定义的焦点矩形(Compose Foundation):
FocusProperties现在允许您定义自定义焦点区域,而不是默认使用边界框,从而改进了可滚动容器中的焦点遍历和“保持在视图中”逻辑。 - LifecycleOwner 可组合项 (Lifecycle):新的可组合项允许直接在界面树中创建限定范围的
LifecycleOwner实例。这对于独立管理组件生命周期以及 Navigation 等库特别有用。 - 支持
SavedStateHandle(Lifecycle和SavedState)中的可为 null 的类型:通过SavedStateHandle和SavedStateRegistryOwner中的原生支持,简化了可为 null 的属性的保存和恢复。 - 新增
LineHeightStyle.Mode.Tight(Compose Foundation 和 Compose UI):新增了 Tight 模式,有助于强制采用较小的行高,即使这意味着可能会截断较高的字形,从而提供更精确的文本布局控制。 - 点按两次即可选择字词 (Compose Foundation):在
SelectionContainer和BasicTextField中添加了对点按两次即可选择字词的支持。 - WindowInsets 行为变更(Compose 界面和 Foundation):
◦ 新增了WindowInsets.cutoutPathAPI,用于获取刘海屏的路径。
◦ 移除了isWindowInsetsDefaultPassThroughEnabled标志,默认情况下WindowInsets不使用,从而允许子视图接收它们。 AndroidViewrequestRectangleOnScreen修复(Compose Foundation):AndroidView 发出的请求(例如EditText尝试留在屏幕上)现在可以正确传播到 Compose。- 改进了 2D 鼠标滚轮滚动(Compose Foundation 和 Compose UI):更好地支持 2D 鼠标滚轮滚动事件,并提供了新的测试 API 和用于控制行为的标志。
新库和实用程序:
androidx.core:core-backported-fixes(新库):借助这个新库,开发者可以检查设备是否已应用关键问题修复(例如特定相机 bug 等平台级问题)。这样,您就可以根据已知 bug 是否已解决来提供不同的用户体验。
其他值得注意的变化:
- Games Activity 和 Input:添加了对 16KB 页面大小的默认支持,并为
GameActivity添加了鼠标支持。 - Material3 提示定位:为提示提供更多位置提供程序,允许放置在锚点的上方、下方、左侧或右侧。
- Material3
DatePicker修复:确保 DatePicker 遵循其自身的语言区域进行数字格式设置,并修复了 RTL 显示问题。 - TWA display_override 支持(浏览器):添加了对
display_overrideTWA 清单属性的支持,以便更好地控制 TWA 显示。 - 在外部应用(浏览器)中启动初始网址:添加了 intent,以允许在外部浏览器中启动 TWA 的初始网址。
Android Developers Backstage
Android Developers Backstage 播客节目又更新了。
Compose 中的自动填充
Jetpack Compose 1.8 引入了显著改进的自动填充功能,该功能利用了 Compose 的语义系统。现在,开发者只需使用相关内容类型语义(例如用户名、密码)标记文本字段,即可轻松集成系统级自动填充功能,从而无需手动管理自动填充树,并提升性能。
现在… 👋
本期内容到此结束,我们介绍了 Android 16 QPR2 Beta 1、Android Studio Narwhal 功能更新、Jetpack Compose 1.9、Media 3 1.8、形状变形和 Compose 中的自动填充等精彩内容。
请过段时间再来看看 Android 开发者领域的最新动态!
-
社区超过 900 名参加者齐聚活动现场,聆听了关于未来展望的主题演讲,参加了演示会、数十场研讨会和黑客马拉松,并围绕 Android 平台的想法和反馈展开了社区讨论。
Florina Muntenescu • 阅读用时:1 分钟 -
社区Android 最近宣布推出开发者验证功能,这是一层额外的安全防护,旨在防范作恶方,增加其传播危害的难度。
Matthew Forsythe • 阅读用时:2 分钟 -
社区我们于 4 月发布了官方 Android Skills。这篇博文介绍了我们收到的反馈,并解释了该项目背后的理念和方法。
Jose Alcérreca • 阅读用时:4 分钟
每周通过电子邮件接收最新的 Android 开发洞见。