查看原文
其他

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

Editor's Note

Android Jetpack 是现代 Android 开发的关键组件。Android Jetpack 套件包含超过 100 个库、工具及指南,可帮助开发者遵循最佳实践、减少样板代码,并编写可在各种 Android 版本和设备中一致运行的代码

The following article is from Android 开发者 Author Android

作者 / 产品经理 Amanda Alexander


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

  • Android Jetpack
    https://developer.android.google.cn/jetpack

  • 现代 Android 开发
    https://developer.android.google.cn/modern-android-development


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


在今年的 Android 开发者峰会上,我们发布了 Jetpack 三个主要领域的更新:
  1. 架构库及相关指南

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

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


架构库及相关指南



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


使用 WorkManager 管理任务


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


  • WorkManager
    https://developer.android.google.cn/jetpack/androidx/releases/work


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


  • WorkManager 2.8.0-alpha04
    https://developer.android.google.cn/jetpack/androidx/releases/work#2.8.0-alpha04

  • 更新 WorkRequest
    https://developer.android.google.cn/reference/androidx/work/WorkManager#updateWork(androidx.work.WorkRequest)


数据持久化


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

  • Room
    https://developer.android.google.cn/jetpack/androidx/releases/room


在 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 中引入的新功能。

  • Activity
    https://developer.android.google.cn/jetpack/androidx/releases/activity#version_160_3


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


  • 照片选择器
    https://developer.android.google.cn/training/data-storage/shared/photopicker


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


  • 预测性返回手势
    https://developer.android.google.cn/guide/navigation/predictive-back-gesture

  • 自定义返回导航
    https://developer.android.google.cn/guide/navigation/navigation-custom-back


使用 Paging 测试库测试分页


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

  • Paging
    https://developer.android.google.cn/topic/libraries/architecture/paging/v3-overview


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

  • Paging 3.2.0-alpha03
    https://developer.android.google.cn/jetpack/androidx/releases/paging#3.2.0-alpha03


新的架构文档


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


  • 新的架构建议页面
    https://developer.android.google.cn/topic/architecture/recommendations


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

  • 概览页面对相关问题作出高层次的理论性概述。
  • 常见模块化模式页面深入介绍现代 Android 架构背景下的实用示例。


  • 概览页面
    https://developer.android.google.cn/topic/modularization

  • 常见模块化模式页面
    https://developer.android.google.cn/topic/modularization/patterns


界面层文档增加两个新页面:
  • 状态容器和界面状态页面说明您可以在界面层中找到的不同类型的状态容器,以及根据要执行的逻辑类型判断应使用哪种实现。

  • 状态生成页面展示有关如何根据状态变更的来源对界面状态进行建模并公开的最佳实践。


  • 界面层文档
    https://developer.android.google.cn/topic/architecture/ui-layer

  • 状态容器和界面状态页面
    https://developer.android.google.cn/topic/architecture/ui-layer/stateholders

  • 状态生成页面
    https://developer.android.google.cn/topic/architecture/ui-layer/state-production


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

  • 界面事件页面
    https://developer.android.google.cn/topic/architecture/ui-layer/events

  • Navigation 界面事件
    https://developer.android.google.cn/topic/architecture/ui-layer/events#navigation-events

  • 全新 Navigation 指南
    https://developer.android.google.cn/guide/navigation/navigation-type-safety


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


  • 构建离线优先应用指南
    https://developer.android.google.cn/topic/architecture/data-layer/offline-first


新的 ViewModel 文档


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

  • 关于 ViewModel 工作原理及适用范围的概览
  • 如何在不使用适用于使用 Hilt 注入 ViewModel 对象的预构建支持的情况下利用依赖项创建 ViewModel

  • 关于 ViewModel 的适用范围及启用该支持的 API 的详情。

  • ViewModel 如何通过 ViewModel 的已保存状态模块在进程终止和恢复的过程中保存状态。


  • ViewModel
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel

  • 状态容器模式
    https://developer.android.google.cn/topic/architecture/ui-layer/stateholders

  • 概览
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel

  • 使用 Hilt 注入 ViewModel 对象
    https://developer.android.google.cn/training/dependency-injection/hilt-jetpack#viewmodels

  • 利用依赖项创建 ViewModel
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel/viewmodel-factories

  • ViewModel 的适用范围
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel/viewmodel-apis

  • ViewModel 的已保存状态模块
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel/viewmodel-savedstate


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


应用性能



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


缩短启动时间


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


  • 基准配置文件
    https://developer.android.google.cn/studio/profile/baselineprofiles


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


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


  • ProfileVerifier
    https://developer.android.google.cn/reference/androidx/profileinstaller/ProfileVerifier


准确报告启动指标


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


  • Activity
    https://developer.android.google.cn/jetpack/androidx/releases/activity


这些 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 系统跟踪记录中看到重组调用堆栈的跟踪记录,然后点击即可直接导航到代码!您可以参阅相关文档,了解关于此功能以及如何在项目中进行设置的更多内容。

△ 系统跟踪中的可组合项 


  • 相关文档
    https://medium.com/androiddevelopers/jetpack-compose-composition-tracing-9ec2b3aea535



界面库及相关指南



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 排版样式的风格化文本。

  • Button
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/Button

  • Chip
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/Chip

  • CompactChip
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/CompactChip

  • TitleChip
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/TitleChip

  • CircularProgressIndicator
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/CircularProgressIndicator

  • Text
    https://developer.android.google.cn/reference/androidx/wear/tiles/material/Text

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


  • 相关博文
    https://android-developers.googleblog.com/2022/08/wear-os-tiles-material-library-build-tiles-fast.html


为更多设备添加启动画面


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


  • SplashScreen
    https://developer.android.google.cn/jetpack/androidx/releases/core#core-splashscreen-1.0.0

  • 指南
    https://developer.android.google.cn/guide/topics/ui/splash-screen/migrate#migrate_your_splash_screen_implementation

  • 官方文档
    https://developer.android.google.cn/guide/topics/ui/splash-screen



其他重要更新



Camera 


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


  • CameraX 库 
    https://developer.android.google.cn/jetpack/androidx/releases/camera

  • 示例代码
    https://github.com/androidx/androidx/blob/androidx-main/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/MlKitFragment.kt

  • Zero-Shutter Lag API
    https://developer.android.google.cn/reference/androidx/camera/core/ImageCapture#CAPTURE_MODE_ZERO_SHUTTER_LAG


Annotation


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

  • Annotation 库
    https://developer.android.google.cn/jetpack/androidx/releases/annotation


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


Kotlin 多平台


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


  • Collection
    https://developer.android.google.cn/jetpack/androidx/releases/collection

  • DataStore
    https://developer.android.google.cn/topic/libraries/architecture/datastore

  • 相关博文
    https://android-developers.googleblog.com/2022/10/announcing-experimental-preview-of-jetpack-multiplatform-libraries.html


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

  • 版本说明
    https://developer.android.google.cn/jetpack/androidx/versions

  • API 选取器
    https://developer.android.google.cn/jetpack/androidx/explorer?case=popular

  • 视频
    https://www.youtube.com/playlist?list=PLWz5rJ2EKKc_L3n1j4ajHjJ6QccFUvW1u


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




推荐阅读

如页面未加载,请刷新重试

 点击屏末 | 阅读原文 | 即刻了解 Jetpack 更多相关内容



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存