Jetpack 更新一览 | 2022 Android 开发者峰会

Jetpack 更新一览 | 2022 Android 开发者峰会

作者 / 产品经理 Amanda Alexander

Android Jetpack现代 Android 开发 (Modern Android Development) 的关键组件。Android Jetpack 套件包含超过 100 个库、工具及指南,可帮助开发者遵循最佳实践、减少样板代码,并编写可在各种 Android 版本和设备中一致运行的代码。您可以借助 Android Jetpack 提高工作效率,从而专注于为应用构建独特的功能。

Google Play 上的大多数应用都使用 Jetpack 作为其应用架构的关键组件。事实上,在排行前 1,000 的应用中,超过 90% 的应用都使用了 Android Jetpack。

在今年的 Android 开发者峰会上,我们发布了 Jetpack 三个主要领域的更新:

  1. 架构库及相关指南
  2. 应用性能
  3. 界面库及相关指南

我们将为您详细介绍每个领域的更新,并总结我们发布的其他更新。

架构库及相关指南

应用架构库和组件可确保应用的稳健性、可测试性及可维护性。

使用 WorkManager 管理任务

借助 WorkManager 库,您可以轻松调度必须可靠运行的可延期异步任务,例如上传备份或分析。通过这些 API,您可以创建任务并提交给 WorkManager,以便在满足工作约束条件时运行。

更新后的 WorkManager 2.8.0-alpha04 能以非干扰的方式 更新 WorkRequest,从而保持其原始排队时间、工作链等。借助 WorkManager,开发者可以更轻松地更改工作器的约束条件。例如,当我们需要将约束条件从一个应用版本更改为另一个版本或通过服务器端设置的配置进行更改时。在过去,只有通过取消已调度的工作器再重新调度才能更改约束条件。但是这种方法会造成严重混乱: 处于运行状态的工作器可能需要停止运行;按一定周期运行的工作器的节奏可能会被打乱;并且当其中一个工作器需要进行更新时,整个工作器链都需要重新构建。而现在,使用 update 方法或 ExistingPeriodicWorkPolicy.UPDATE,开发者便无需担心这些问题。

数据持久化

大多数应用都需要持久保持本地状态,无论是缓存结果、管理用户输入数据的本地列表,还是为界面中返回的数据提供支持。Room 是我们推荐的数据持久化层,它在 SQLite 的基础上提供了一个抽象层,从而提高了平台的易用性和安全性。

在 Room 2.5.0-alpha03 中,我们添加了一个新的快捷注解 @Upsert。如果不存在唯一冲突,@Upsert 会尝试插入实体;如果存在冲突,@Upsert 则会尝试更新实体。此外,所有的 Room 运行时 API 以及 androidx.sqlite 都已转换为 Kotlin。这样不仅可以为 Kotlin 用户打造更好的体验 (如严格的可为 null 性),还打开了支持其他 Kotlin 语言功能的大门。

Android 13 Activity API 现已支持向后兼容

Activity 库包含 ComponentActivity 类 (构建在 Android 框架的 Activity 类之上的基类)。它不仅可为 Jetpack Compose 和其他架构组件提供 API 支持,还支持通过 Activity 1.6.1 向后移植 Android 13 中引入的新功能。

通过直接使用 ComponentActivity,或 FragmentActivityAppCompatActivity 的任一子类,您可以使用单个 API 来通过 照片选择器 选择图像,但前提是它可以自动回退到存储访问框架以支持向后兼容 Android 4.4 (API 19)。

您只需升级到 Activity 1.6.1 即可体验 Android 13 中引入的 预测性返回手势,从而为未来做好准备。Activity API 提供用于 自定义返回导航 的单个 API。该 API 不仅可向后兼容 API 14,且完全兼容选择预测性返回手势。

使用 Paging 测试库测试分页

Paging 库支持加载海量数据集。为了充分利用 Paging,集成包括应用的多个层,如代码库层、ViewModel 层和界面层。

为了更轻松地测试该集成,Paging 3.2.0-alpha03 引入了带有测试特定 API 的新分页测试工件,从而可以单独测试每个层。此首个版本重点关注代码库层,特别是通过新的 TestPager API 测试自定义 PagingSource,以确保您可以在非常难以通过集成测试再现的不同场景中测试分页源。

新的架构文档

在架构方面的投入对于提高应用质量而言非常重要,因为架构可以提高应用的稳健性、可测试性、可维护性和可扩展性。这正是我们不断提出架构建议的原因。事实上,正因为架构建议不断增加,我们才发布了 新的架构建议页面,其中整合并汇总了重要的最佳实践。您可以查看我们的文档了解相关内容。

我们团队最近发布了新的模块化指南。该指南分为两个部分:

界面层文档 增加两个新页面:

  • 状态容器和界面状态页面 说明您可以在界面层中找到的不同类型的状态容器,以及根据要执行的逻辑类型判断应使用哪种实现。
  • 状态生成页面 展示有关如何根据状态变更的来源对界面状态进行建模并公开的最佳实践。

为响应大量用户的需求,我们已将 界面事件页面 更新为包含 Navigation 界面事件 示例。我们还发布了关于为 Kotlin DSL 和 Navigation Compose 提供运行时类型安全的 全新 Navigation 指南

最后,如果您想让应用离线工作,我们也能助您一臂之力。构建离线优先应用指南 有助于您设计应用以正确处理读取和写入,并在没有互联网连接的设备中处理同步和冲突解决方案。

新的 ViewModel 文档

利用 ViewModel,您可以将 状态容器模式 纳入界面层中。我们最近更新了相关文档,其中包含以下内容:

更新后的指南帮助您更轻松地了解何时适合使用 ViewModel 来构建界面层。

应用性能

通过使用性能库,您可以构建高性能的应用,并有针对性的优化以保持其性能表现,从而提供更好的最终用户体验。

缩短启动时间

应用的启动时间对用户体验有着很大的影响,特别是在应用安装完成后立即使用时尤为明显。为了提升首次启动时的体验,我们一直在不断地优化 基准配置文件 。基准配置文件允许应用和库向 Android 运行时提供关于代码路径使用情况的元数据,从而确定编译的优先级。这一配置文件会对依赖库的数据进行聚合,以 baseline.prof 文件的形式放入应用的 APK 中,并且随后会在安装时用于实现应用的部分预编译以及用于静态链接库代码中。这会提升您的应用加载速度,并且可以在用户首次与应用交互时减少丢帧。

在 AGP 7.3 中,基准配置文件工具是完全稳定的,因此您无需使用 alpha 依赖项也可以在应用首次启动时及应用每次更新后滚动时将性能提升 30% 以上。

在 profileinstaller:1.3.0-alpha01 中,您可以使用 ProfileVerifier 检测字段中的配置文件编译。此外,从 Android Studio Flamingo Canary 6 开始,Studio APK Inspector 现在会显示 APK 基准配件文件的内容。

准确报告启动指标

启动指标是衡量应用性能的重要组成部分,但是系统 (以及 Benchmark 库) 需要获取标志启动阶段完成的信号才能进行测量。这个信号便是 Activity 对 reportFullyDrawn() 的调用。Activity1.7.0-alpha01 以 FullyDrawnReporter API 的形式添加了新的 API,允许多个组件在它们准备好交互时进行报告。ComponentActivity 将等待所有组件完成报告后再代表您调用 reportFullyDrawn()。

这些 API 可以:

  • 在完成启动后向 Android 运行时发送信号,以确保在多帧启动序列中运行的所有代码都包括在内,并优先用于后台编译。
  • 在您的应用应被视为完全绘制启动指标时,向 Macrobenchmark 和 Play Vitals 发送信号,以便跟踪应用性能。

我们新增了两个 Activity Compose API: ReportDrawnWhen 和 ReportDrawnAfter,以使其更方便地从单个可组合项中使用 FullyDrawnReporter。

重组跟踪

我们最近发布了首个 alpha 版的 Jetpack Compose 组合跟踪 (Composition Tracing),这个工具可让您在 Android Studio 系统跟踪记录分析器中查看可组合函数。此功能既有系统跟踪的低干扰性优势,又有组合中函数跟踪的详细程度。通过在 Compose Runtime Tracing 上添加依赖项,您便能够在 Android Studio Flamingo Canary 5 系统跟踪记录中看到重组调用堆栈的跟踪记录,然后点击即可直接导航到代码!您可以参阅 相关文档,了解关于此功能以及如何在项目中进行设置的更多内容。

△ 系统跟踪中的可组合项

△ 系统跟踪中的可组合项

界面库及相关指南

Jetpack Compose

Jetpack Compose是 Android 用于构建原生界面的现代工具包,已发布 Jetpack Compose 2022 年 10 月版本,其中包含诸多性能改进,还支持交错网格、直接在画布中绘制文本,以及下拉刷新。我们还发布了首个 Bill of Materials (BOM),以简化向 Gradle 依赖项添加 Compose 库版本的流程。如需了解详情,您可以查看我们的文章《Jetpack Compose 更新一览 | 2022 Android 开发者峰会》。

Wear Tiles Material 库

适用于 Wear OS 的卡片能让用户对各种信息和操作一目了然。为了帮助您创建卡片,我们推出了 Tiles Material 库,其中包括对适用于 Wear OS 的 Material Design 的内置支持。

其中包含的组件包括:

  • Button: 可点击的圆形对象,包含图标、文本或图片 (具有 3 种预定义的尺寸)。

  • Chip: 可点击的体育场形对象,可以包含图标、主标签和次级标签,并且具有固定的高度和可自定义的宽度。

  • CompactChipTitleChip: 标准 Chip 的两个变体,但高度不同 (一个较矮,一个较高),可以包含一行文本。

  • CircularProgressIndicator: 位于屏幕边缘周围的彩色弧线,具有给定的起始角度和结束角度,可描绘一个完整或部分的圆圈,后面显示完整的进度弧。

  • Text: 使用建议的 Wear Material 排版样式的风格化文本。

除组件外,Material 指南中还包含一些推荐的卡片布局。您可以阅读 相关博文,了解更多关于 Wear OS Tiles Material 库的信息。

为更多设备添加启动画面

从 API 23 开始,核心 SplashScreen 库将新的 Android 12 启动画面引入所有设备。借助启动画面库,您的应用无需使用任何自定义 SplashScreen Activity 即可利用正确的 API 实现应用快速启动。只需按 指南 中所述的步骤操作,即可使用启动画面库。您可以访问 官方文档,获取有关 Android 12 启动画面的更多信息。

其他重要更新

Camera

借助 CameraX 库,您可以更轻松地为应用添加相机功能。在 1.2.0-beta01 版本中,我们添加了新库 camera-mlkit-vision。利用此库,您可以将 CameraX 与许多 MLKit 功能轻松集成,包括条形码扫描、人脸检测、文本检测等。您可以访问相关网站,查看 示例代码。我们还添加了新的实验性 Zero-Shutter Lag API。它可以优化捕捉 pipeline 以在保持良好图像质量的同时降低延迟。

Annotation

Annotation 库 会公开元数据,从而帮助工具开发者和其他开发者理解应用的代码。Annotation 库提供可与 lint 检查配合使用的熟悉注解 (如 @NonNull),以提高代码的正确性和易用性。

Annotation 1.5 稳定版本已经完全迁移至 Kotlin 源代码,因此支持特定于 Kotlin 的目标使用网站和其他与 Kotlin 兼容的注解功能。

Kotlin 多平台

我们一直在尝试使 Jetbrains 的 Kotlin 多平台移动版支持跨平台共享代码。我们针对 Android 和 iOS 应用推出了实验性的 Collection 预览版和 DataStore 库。期待您的反馈!您可以查看 相关博文,了解更多内容。

以上内容便是 Jetpack 在过去几个月的所有重要更新。您可以查看 AndroidX 版本说明,了解每个 Jetpack 库的更多详情;如需快速找到相关库,您可以使用 API 选取器;如需了解其他精彩内容,您可以观看 2022 Android 开发者峰会中的相关 视频

也欢迎您持续关注我们,及时了解更多开发技术和产品更新等资讯动态。

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io WebMaster | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.