Jetpack 是什么?

本文章首发于公众号 Android丨Kotlin,欢迎关注!面试

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

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

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

有人回答 Jetpack 就是 LiveData、ViewModel 这些东西,有人回答 Jetpack 是一套 MVVM 框架,固然更多人的回答是,听过、但没用过,因此也说不出它究竟是什么。框架

今天这篇文章,就和你们聊聊,在个人理解中 Jetpcak 究竟是什么?在看接下来的内容以前,你们不妨先想一想这个问题,在评论区先写下在你对 Jetpack 的定义和理解。ide

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

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

根据定义其实能够提炼出两个核心点:测试

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

  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 版本不一致和设备不一样产生的差别性和兼容性问题” 的理解。

若是本期的内容有帮助到你,但愿能够转发、评论和点赞,让更多人看到这篇文章,同时这也会对我有很大的帮助。

感谢,咱们下期再见。