社区

Now in Android #121

阅读用时:9 分钟
查看 Daniel Galpin 的个人资料
Daniel Galpin 开发技术推广工程师

欢迎阅读“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 限制的行为变更,从而最大限度地减少您需要针对其测试应用的次数。

sdk-release-graph.webp

您可以通过对照 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 可以突出显示特定相册或搜索查询。

连接性:

隐私和安全:

  • 新增了系统级安全状态“安全锁定设备”,该状态会锁定设备,并要求通过主要身份验证方式解锁。
  • 为手机盗窃防护功能添加了面向用户的切换开关,用于启用/停用“身份验证失败锁定”。

开发者工作效率:

您可以注册任何受支持的 Pixel 设备,以通过无线下载方式接收 Beta 版更新,也可以在 Android Studio 中将 64 位系统映像与 Android 模拟器搭配使用。平台稳定性里程碑计划于 2025 年 10 月发布。

Android Studio Narwhal 功能更新稳定版已发布,快来体验智能体模式吧 🐳

narwhal.webp

Android Studio Narwhal 功能更新现已推出稳定版,新功能和增强功能包括:

Android 设备串流(由 Firebase 提供支持)

device-streaming.webp

由 Firebase 提供支持的 Android 设备串流功能现已稳定支持 Android 合作伙伴设备实验室,让您能够远程连接到由三星、小米、OPPO、一加和 vivo 等 OEM 合作伙伴托管的实体 Android 设备。

Android Studio 每月发布新版本,发布频率比以前提高了一倍,助力加速开发

accelarating-releases.webp

Android Studio 正在过渡到每月发布稳定版本的节奏,以便更快地为您提供新功能和关键问题修复。Android Studio IDE 将每月更新一次,而新的 IntelliJ 平台版本将每隔几个月推出一次,期间会发布功能更新作为过渡性稳定版本。Android 模拟器和 Android Gradle 插件将继续每两个月单独更新一次。这种加速发布时间表得益于对测试基础架构的长期投资。

Jetpack Compose 2025 年 8 月版的最新动态 🚀

jetpack-compose.webp

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.webp

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.webp

#WeArePlay 计划重点推介应对环境挑战的 Android 应用和游戏。由 Mayla、Flávia、Andréia 和 Ariane 开发的游戏“BoRa — Iguaçu National Park”为公园游客提供游戏化且无障碍的互动体验,让游客在游览公园的同时接受自然教育。Louis 和 Justin 开发的应用 CyberTracker 采用基于图标的界面,让不识字的土著追踪者也能记录生物多样性数据,从而为保护工作提供支持。最后,由 Bharati 和 Saurabh 共同创立的 Earth5R 提供环境教育,并为用户提供实习和项目机会,帮助他们培养绿色经济所需的技能。

什么是 HDR? 🌟

hdr.webp

高动态范围 (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.compose animation、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.cutoutPath API,用于获取刘海屏的路径。
    ◦ 移除了 isWindowInsetsDefaultPassThroughEnabled 标志,默认情况下 WindowInsets 不使用,从而允许子视图接收它们。
  • AndroidView requestRectangleOnScreen 修复(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_override TWA 清单属性的支持,以便更好地控制 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 开发者领域的最新动态!

作者:
继续阅读