从上帝视角看 Android JetPack
前言

作为一名 Android 老司机,什么 Square 全家桶,Glide, 各种 Bus, MVP,MVVM 等等跟 Android 开发相关的主流的名词那都是如数家珍 。

很多时候我们吐槽,Android 碎片化严重,Google 对国内的 Android 生态又心有余而力不足。国内的 Android 开发者很长一段时间也基本处于散养的状态。项目的库基本都是用上面说到的主流库,自己动手,丰衣足食。

可能大部分开发者们更 focus 的是当下的某个技术点,而缺乏从整个架构战略的方向去看待圈内的整个生态。

于是搜集了这方面的资料并做出总结,让阅读本文的人大体了解这是什么?为什么有这个?这个东西主要包含了哪些功能?都解决了什么问题?以及学习成本等问题。

1.相关历史背景
官方 JetPack 介绍(科学上网)

大体上,JetPack 是 Google 推出的一些库的集合。是 Android 基础支持库 SDK 以外的部分。包含了组件、工具、架构方案等…开发者可以自主按需选择接入具体的哪个库。

从 Goole IO 2017 开始。Google 开始推出 Architecture Component, ORM 库 Room, 用户生命周期管理的 ViewModel/ListData.

Goole IO 2018 将 Support lib 更名为 androidx. 将许多 Google 认为是正确的方案和实践集中起来。以高效的开发 Android APP.

以上种种,现在统称为 JetPack. 其最核心的出发点就是帮助开发者快速构建出稳定、高性能、测试友好同时向后兼容的 APP。

2.组成部分
前面讲到过,JetPack 是一系列库和工具的集合,它更多是 Google 的一个提出的一个概念,或者说态度。

并非所有的东西都是每年在 IO 大会上新推出的,它也包含了对现有基础库的整理和扩展。在大部分项目中其实我们都有用到 JetPack 的内容,也许你只是不知道而已。让我们以上帝视角来看看整个 JetPack 除了你熟悉的部分,还有哪些是你不熟悉但是听过的内容。看看他们都能做些什么事情。

对于一些较少接触到的一些库我会提供一些第三方链接(CSDN、简书、掘金)作为拓展阅读,参考和学习。

从官方的介绍来看。JetPack 总体包含四部分内容:

基础
AppCompat : 使得支持较低的 Android 版本。从以前继承 Activity 到现在继承 AppCompatActivity 就是属于这一部分。

Android KTX : Kotlin 的扩展支持库

Multidex : 多 dex 文件支持

Test : 测试支持库

架构
Data Binding : MVVM 的一种实践

Lifecycles : 管理你的 Activity 和 Fragment 生命周期

LiveData : 通过观察者模式感知数据变化,类比 RxJava

Navigation : 处理 Fragment 导航相关逻辑

Paging : 分页数据加载方案

Room : 官方 ORM 库

ViewModel : 通过数据驱动 V 视图发生改变

WorkManager : 管理后台任务

行为
DownloadManager : 管理下载任务

Media app : 多媒体播放和一些向后兼容的 API。主要包含 MediaPalyer 和 ExoPlayer

Notifications : 提供向后兼容的通知 API,支持 Wear 和 Auto

Permissions : 权限管理,这个应该都接触过。用于检查和请求应用权限

Settings : Preference 相关 API。基本每个应用都会用到

Share Action : 提供分享操作。这块在国内使用的不多,都是自己封装或者采用第三方方案。

Slices : 可以让应用通过外部(其他 APP)显示 APP 界面(通过设备自带的搜索,语音助手等)

界面
界面部分所包含的东西基本是我们接触的最多的了:

Animations and Transitions : 动画,界面转场等

Auto : 针对车辆的标准化界面和模式。这方面实在接触的少,不感妄加评论。

Emoji : Emoji 相关。这个…同上面的 Auto 吧

Fragment : 基础概念

Layout : 基础概念

Palette-Colors : 调色板。接触的不多

TV : Android TV 开发相关

Wear : 可穿戴设备(目前主要是手表)开发相关

3.如何看待 JetPack?
前文说过了,JetPack 更多是一种概念和态度。相当于 Google 把自己的 Android 生态重新整理了一番。确立了 Android 未来的版图和大方向。

JetPack 里目前包含的内容,未来也会是 Google 大力维护和扩展的内容。对应开发者来说也是值得去学习使用的且相对无后顾之忧的。JetPack 里没有的,除开一些优秀的第三方库,未来应该也会慢慢被新的 API 替代,逐渐边缘化,直至打上 Deprecate 注解。

以当下的环境来说,要开发出一个完全摆脱 JetPack 的 APP 是很难做到的。但是反过来讲 JetPack 也远远没有到成熟的地步,目前也还存在亟待解决的问题,未来可以做的事情还有很多。

关于使用的话,并不是所有库都建议使用,因为目前还有很多库在 alpha 版本。但是作为学习还是很有必要的,能给你日常的开发中多提供一些思路,这些是无可厚非的。

总的来说,JetPack 的推广对广大开发者而言是利远远大于弊的。

最后,感谢你阅读到这里。但愿这篇文章能让你对 Android 有一个新的视角和看法。

投稿作者:Video++ 极链科技移动端梁紫枫