Jetpack 是什么?

Jetpack 是什么?

本文章首发于公众号「Android|Kotlin」,欢迎关注!

对于大多数 Android 开发工程师来说,Jetpack 一定是一个既熟悉又陌生的东西。

在几个月前,有位朋友找到我,希望让我帮他们公司目前正在招聘的高级 Android 工程师岗位做一些技术面试。

通常在面试的最后阶段,我会问一下他们对 Jetpack 的理解,旨在考察他们对目前 Android 主流开发技术的掌握程度以及是否还保持着对新技术持续学习的能力。

有人回答 Jetpack 就是 LiveData、ViewModel 这些东西,有人回答 Jetpack 是一套 MVVM 框架,当然更多人的回答是,听过、但没用过,所以也说不出它到底是什么。

今天这篇文章,就和大家聊聊,在我的理解中 Jetpcak 到底是什么?在看接下来的内容之前,大家不妨先想想这个问题,在评论区先写下在你对 Jetpack 的定义和理解。

在 Jetpack 的官方文档中是这样对它定义的:

Jetpack 是一套组件库,可帮助开发人员遵循最佳实践,减少样板代码并编写可在 Android 版本和设备上一致工作的代码,以便开发人员可以专注于他们关心的代码。

根据定义其实可以提炼出两个核心点:

1. 它是一套组件库。(说明它是由许多个不同的组件库构成,并不是一个单一的组件库)

2. 使用 Jetpack 可以帮助我们在不同的 Android 版本和不同的设备上,实现行为一致的工作代码。(说明 Jetpack 可以轻松的处理由 Android 版本不一致和设备不同产生的差异性和兼容性问题)

我们先来看看 Jetpack 包含哪些组件库

根据官网上的介绍,目前 Jetpack 一共有 85 个组件库,有些看着很熟悉,比如:viewPager、fragment、recyclerview 等等,但有些好像根本就没有见过,也没有用过。

为了弄清这 85 个组件库分别是做什么的,我把每一个的文档都详细读了一遍,包含它们是干什么的、如何依赖以及该如何使用,然后又分别在 Android Studio 中单独集成,目的就是想看看它们包中到底有什么类,到底是干什么的

再结合官方 Youtube 频道视频内容的介绍,在经过两天的梳理,我整理出了下面的内容。

在知道了这 85 个组件库分别是做什么之后,接下来我对每一个库进行了分类和打标签,这么做的目的是可以帮助我在之后实际写代码的时候,可以快速的使用他们。

经过第二轮的梳理,我将 Jetpack 的 85 个组件库进行了下面的分类和标签整理。

第一个是核心类(8个),你也可以把它理解为基础类,也就是说我们一个最基本的 Android 工程都会默认依赖这些组件库。

第二个是架构组件(10个),Jetpack 推出之后很令人兴奋的一点,就是 Google 引入了现代 Android 应用开发的架构指南,结合 MVVM 的架构设计,帮助我们轻松的处理 UI 与业务逻辑之间的关系。

第三个是 UI 组件(22个),这里需要说明一点,大多数的 UI 组件其实都包含着核心组件中的 appcompat * 中了,这里列出的是 Jetpack 中以独立组件库存在的 UI 组件。

第四个是特殊业务组件(16个),根据不同的业务场景,选择性使用。

第五个是用不着的组件(15个),这个完全是处于我个人出发,目前我从事的是 Android 互联网项目的开发,所以涉及游戏、车载、TV 等或平时极少使用的组件,我都规整到这一类中了。

第六个是弃用的组件(11个),有一些是因为官方不再更新维护了,有一些是在 Jetpack 中有更好的替代解决方案,如果我们的项目中还在使用这些组件库的话,建议尽快替换到最新的替代组件上。

第七个是用于测试的组件(2个)。

看到这里,我想大家应该都理解了最开始的定义中,我们提炼出的第一点内容:Jetpack 是一套组件库。没错 Jetpack 是由 85 个组件库构成的,每一个都可以根据自己的需求单独依赖使用,非常灵活和方面。

同时经过我的梳理,希望可以帮助大家更好的了解了这 85 个组件库分别是做什么的,也希望大家可以在通过标签分类之后,可以快速的在不同场景下,选择合适的组件,帮助自己完成对应功能的实现。

特别分享一下, Jetpack 之前是存在于 AOSP 中的开源项目,目前同步开源到了 Github 中,当前 Activity、Fragment、Navigation、Paging、Room、WorkManager 这5个组件开放了贡献权限,主要还是以接受 Bug fixes 为主,有兴趣的同学可以去帮官方修修 Bug~

关于本期的内容整理,我放在了 Notion 上,点击这里可以看到我整个梳理的内容,如果其中有错误的地方,大家可以通过 Notion 的评论功能进行批注,我会及时修正和更新。

下一期,我会为大家继续分享,关于定义中的第二点内容 “Jetpack 可以帮助我们轻松的处理由 Android 版本不一致和设备不同产生的差异性和兼容性问题” 的理解。

如果本期的内容有帮助到你,希望可以转发、评论和点赞,让更多人看到这篇文章,同时这也会对我有很大的帮助。

感谢,我们下期再见。

发布于 2020-12-08 10:13