回顾 | Android Jetpack 重要更新

Android Jetpack 集合了一系列的开发库,旨在帮助开发者更容易地创做高质量的应用,同时也更好地兼容老旧版本的 Android 系统。在正式发布 Jetpack 两年后的今天,咱们已经看到大量的应用开发开始采用 Jetpack 中的开发库,这其中既包括大型开发团队的产品,也有那些刚起步的应用。而这一切仅仅是开始,由于近期咱们发布了一系列新的开发库,以及过去一年咱们对于现有开发库的重要更新。java

在今年的谷歌开发者大会上,咱们也为你们介绍了 Jetpack 的重要更新,视频以下:android

https://www.qq.com/video/o320...git

您也能够 查看这里 到大会官网查看本视频和更多视频分享。github

发布到 Alpha 版本的库

Hilt — Jetpack 官方推荐的依赖注入开发库

Hilt 是一个新的 Android 开发库,它能够帮助应用开发更容易地实现 依赖注入。Hilt 让您只需考虑声明和注入绑定中的重要部分,而没必要担忧管理依赖注入的初始化和链接等部分。web

Hilt 是基于 Dagger 开发的,也一样受益于其编译期错误诊断、改良的运行时性能以及良好的可扩展性。Hilt 已经集成了对 Jetpack 开发库和 Android 系统类库的支持。举个例子,为了注入 ViewModel 参数,可使用 @ViewModelInject 注解 ViewModel 的构造函数,而后使用 @AndroidEntryPoint 来注解 Fragment:数据库

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class SearchViewModel @ViewModelInject constructor(
    private val repository: SearchRepository
): ViewModel() { … }

@AndroidEntryPoint
class SearchFragment : Fragment() {
    val viewModel: SearchViewModel by viewModels()
}

请从咱们 发布的博客文章 中了解更多关于 Hilt 以及其相关资源。c#

Paging 3 — 分页加载显示数据内容

Paging 开发库能够帮助分页加载显示数据内容。咱们发布了使用 Kotlin 的协程 重写的 Paging 3。新版本添加了一些呼声较高的新功能,好比分隔符、标头和页脚,以及数据转换。此外,新版本还添加了用来监控列表加载状态的一系列的 API,以及重试和刷新的方法等。api

举个例子,使用 Paging 3,咱们能够经过继承 PagingSource 类来定义数据源,并实现 load 这个挂起函数,该函数能够直接执行其余的挂起函数:缓存

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

class MyPagingSource : PagingSource<Key, Value>() {
    override suspend fun load(params: LoadParams<Key>): LoadResult<Key, Value> {
        try {
            val result = api.requestPage(params.key)
            return Page(
                data = result.items,
                nextKey = result.nextKey
            )
        } catch(error: IOException) {
            return Error(error)
        }
    }
}

点击 此处 获取更多 Paging 3 的相关信息。安全

App Startup — 在应用启动时初始化组件

App Startup 开发库提供了一种至关直接且高效的方式,来帮助程序在启动过程当中初始化组件。不一样于以往须要单独为每一个须要初始化的组件定义 ContentProvider,App Startup 能够利用一个共享的 ContentProvider 来同时定义多个组件的初始化操做,这样能够有效加快应用启动速度。

下面的例子展现了如何利用 App Startup 来优化 WorkManager 的初始化时间,底层的实现是 App Startup 使用了一个共用的 ContentProvider,并代替了 WorkManager 自有的 ContentProvider:

<!-- Copyright 2019 Google LLC.  
   SPDX-License-Identifier: Apache-2.0 -->

// Initializes WorkManager.
class WorkManagerInitializer : Initializer<WorkManager> {
    override fun create(context: Context): WorkManager {
        val configuration = Configuration.Builder().build()
        WorkManager.initialize(context, configuration)
        return WorkManager.getInstance(context)
    }
    override fun dependencies(): List<Class<out Initializer<*>>> {
        return emptyList()
    }
}

点击 此处 获取更多有关 App Startup 的信息。

输入法集成自动填充功能

Android 11 为软键盘引入了一系列系统 API 来显示自动填充内容,而且提示内容能够来自其余应用,好比密码管理器。Jetpack 的 Autofill API 经过其 InlineSuggestionUi 类,让键盘和自动填充服务能够更好地利用新特性。其中自动填充服务能够利用这个类建立更合适的提示内容,而键盘能够利用这个类更好地定制自动填充的外观。

△ 软键盘显示信用卡号码自动填充内容

△ 软键盘显示信用卡号码自动填充内容

利用 core-animation 和 SeekableAnimatedVectorDrawable 来轻松建立动画

为了更轻松地实现和测试动画,咱们增长了两个新的开发库,分别是 androidx.core:core-animation 和 androidx.core:core-animation-testing。同时咱们也引入了一个新的 API SeekableAnimatedVectorDrawable 做为 androidx.vectordrawable 开发库的一部分。

core-animation 兼容全部自 Android 4.0 以后的新 Animator API,包括 pause (暂停)、resume (恢复) 和 seek (查找)。

SeekableAnimatedVectorDrawable 基于 core-animation 开发,它是 AnimatedVectorDrawable (AVD) 可替代方案。它使用与 AVD 一样的文件格式,而且新增了 seek (查找)、pause (暂停) 和 resume (恢复) 的功能。Seekable AVD 暂时不能够利用渲染线程,因此只有当急需该类新特性的时候才推荐使用。

利用 Android Studio 的数据库检查器来调试数据库

△ 在 Android Studio 中使用数据库检查器

△ 在 Android Studio 中使用数据库检查器

有了 Android Studio 4.1 新增的 Database Inspector,数据库调试变得十分简单。这个工具能够在正在运行的应用中查看、检索以及修改数据库的内容。不管是使用 Room 仍是直接使用 SQLite,您均可以经过菜单栏中的 View > Tool Windows > Database Inspector 开始调试数据库。请经过咱们的文章《期待已久的动态数据库工具终于来了!》了解更多关于这个工具的内容以及如何使用它。

WindowManager — 更好地支持新的设备形态

WindowManager 是一个新加入到 Android Jetpack 中的开发库,其旨在帮助开发者更好地支持新的屏幕类型,好比折叠屏、多分屏等。该库为新老版本不一样的 WindowManager 功能提供了一个统一的 API 接口。

初始的发布版本提供了对于市面上已有以及即将上市的不一样可折叠设备的支持,开发者能够利用其适配全部不一样类型的硬件配置。了解更多相关内容,请查阅 博客文章示例工程

MotionLayout — 为 Android 建立流畅的可交互动画

MotionLayout API 在 ConstraintLayout 丰富功能的基础上,能够帮助 Android 开发者开发复杂的动画效果。使用 MotionLayout,开发者既能够轻松地在 ConstraintSets 之间设置过渡动画,也能够方便地将动画集成到经常使用的视图组件中,好比 RecyclerView、ViewPager 等。Android Studio 4.0 还包含了一个可视化的动效编辑器,它能够用来建立和预览基于 MotionLayout 的动画。

△ 在动效编辑器中建立、编辑和预览 MotionLayout 动画

△ 在动效编辑器中建立、编辑和预览 MotionLayout 动画

对于已有开发库的更新

Navigation 库

Navigation 2.3 新增了对于 Dynamic Delivery 功能模块 的支持,该功能可让用户只下载须要的部分,从而大大下降应用的初始下载体积。另外,您能够像导航到基础模块同样导航到动态功能模块。除此以外,深层连接如今既支持检索参数,也支持自定义的 action 和 mime 类型。

同时新增了一个能够 返回结果 的 API,经过它能够在 SavedStateHandle 中查询和设置全部回退栈的入口。新增的 TestNavHostController 可让您访问 Navigation 回退栈,而且在测试中设置当前的目的地。

WorkManager 库

最新发布的 WorkManager 支持了那些须要长时间运行的 Worker 或者应被操做系统保持运行在前台的服务。

为了让 WorkManager 任务调试更简单,咱们新增了一个诊断 API。这个 API 可让开发者监控WorkManager 的内部状态,而且在 logcat 中打印出该状态的具体信息:

Recently completed work:
Id Class Name Job Id State Unique Name Tags
88e31476–50d5–4a3a-855a-7c158d61543e com.example.DiagnosticsWorker null SUCCEEDED com.example.DiagnosticsWorker
939d3d81–4a24–4920-ab6a-2a5b850f377b com.example.ToastWorker null SUCCEEDED com.example.ToastWorker
59ab8eb1–2645–446d-8811–1e7b887ab5bc com.example.ForegroundWorker null CANCELLED com.example.ForegroundWorker
7a6c23d2-a1f9–4477-af77–1f16b45cd765 com.example.ForegroundWorker 0 SUCCEEDED com.example.ForegroundWorker

Running work:
Id Class Name Job Id State Unique Name Tags
7c8bc01f-a60c-4b63-a6aa-2055d4d9d88e com.example.DiagnosticsWorker 4 RUNNING com.example.DiagnosticsWorker

△ WorkManager 诊断结果示例

为了帮助您避免在使用 WorkManager 时遇到一些常见错误,咱们同时还新增了 Lint 规则来标识它们。另外还有一些 API 的更新,包括支持设置和观察 Worker 的中间进度、一些对于当前 Worker 查询 API 的优化、一些对于进行中的工做器的调度优化。

Benchmark 库

△ 在 Android Studio 中查看抽样的堆栈信息

△ 在 Android Studio 中查看抽样的堆栈信息

Benchmark 库发布的 alpha release: 1.1.0-alpha01 版本中集成了 CPU 性能剖析工具,该工具能够帮助开发者分析应用性能基准测试结果,而且能够在 Android Studio 中直接查看相关方法和抽样的堆栈信息。咱们同时还添加了对于内存分配的追踪,以便于开发者能够优化内存分配和垃圾回收所消耗的时间。

权限库 (Permissions)

为了更方便地管理权限,咱们引入了一系列新的 ActivityResult API。这些 API 能够用 RequestPermission contract 来替换 requestPermissions),以简化权限请求的开发。除此以外,这些 API 还为一些常见的 intent 提供了类型安全的 contract,好比 选取图片 和提示用户 打开一个文件

游戏 SDK

今年初刚发布的 Android 游戏 SDK 现在也做为 Jetpack 的一部分在 Google Maven 仓库上线。该 SDK 提供一个 帧同步 API 和 Android 性能调优器。请经过 官方文档 获取更多有关游戏 SDK 的内容。

CameraX 库

因为 Android 设备的多样性,市面上有太多的不一样种类的相机硬件,而 CameraX 能够兼容市面上 90% 的设备。从二月份 CameraX 发布 Beta 版本 至今,咱们一直致力于提高可靠性,以确保 API 在各类设备上都拥有更好的行为。咱们的 CameraX 测试实验室也在不断地针对不一样机型进行自动化测试,以最大程度地兼容市面上超过 4 亿台的设备。

最近的版本 中,CameraX 引入了对于 PreviewView 组件的优化。该组件现在能够更好地处理应用生命周期和 ViewPager。该组件底层会在支持的设备上自动使用 SurfaceView 以最大程度地获取性能上的优化,这也帮助其使用更少的缓存以及更低电量的消耗。

要了解更多关于 CameraX 的内容,请参阅咱们详尽的 CameraX 文档示例工程,以及咱们过去推送的文章《[使用 PreviewView 来展现相机预览]()》。

Security 库

Jetpack 的 Security 库为 基于文件加密抽象层的使用提供了安全简便的方法,好比 EncryptedFileEncryptedSharedPreferences。Jetpack 的 Security 开发库利用 Android 的 Keystore,以提供基于硬件存储空间和相关操做的安全。Jetpack 的 Security 开发库 现在为 Android 6.0 之后的系统发布了 RC 版本(最新版本为 RC3),而且为 Android 5.0 之后的系统提供了 1.1.0 alpha 版本。

AppCompat 库

AppCompat 库提供了大量向前兼容的 UI 组件和系统功能,从 Material 主题到 Toolbar 等组件,再到深色主题。在 最新的发布 中,咱们新增了 Lint 规则,这有利于开发者辨别哪些属性来自于 AppCompat 以及哪些来自于系统框架,并保证您使用了正确的属性。此外,咱们还针对 AppCompat 中深色主题实现的稳定性进行了大量优化。

Webkit 库

Jetpack 的 Webkit 开发库在 1.2.0 版本(最新版为 1.4.0-rc01) 中新增了一个强制使用深色主题显示内容的 API。使用这个 API 的时候,若是网站支持深色主题,WebView 会自动地使用深色主题渲染该站点。若是网站不支持深色主题,这个 API 会强制转换其中的一些颜色。

Jetpack Compose — 全新的 Android UI 开发框架

Jetpack Compose 是全新的现代 Android UI 开发框架,目前发布了开发者预览第二版。新版本添加了许多新功能,包括视图组件的互通性、更多的 Material UI 组件、支持深色主题、新的 UI 测试和动画 API、对于 ConstraintLayout 的支持、优化状态管理、集成可观察的数据流和 RTL 支持。Android Studio 预览如今是可交互的,而且还有不少编译器方面的优化。 您能够查阅咱们的 Alpha 版本发布文章、深刻详解 Jetpack Compose 之 优化 UI 构建实现原理 等文章了解更多。

获取更多的更新内容,请观看视频下面视频了解 Jetpack Compose,欢迎你们尝试这些新的更新并 向咱们反馈。

https://www.bilibili.com/vide...

本文归纳了 Jetpack 过去几个月的更新。因为其包括了超过 90 个开发库,咱们知道想找到您所关心的内容并不是易事。为了帮助开发者,咱们 从新设计了 Jetpack 网站,而且在大量更新之余新增了一个便捷的 API 选取器,能够帮助开发者更快捷的找到 Jetpack 中合适的开发库来解决问题。