一、 Jetpack 的诞生
近几年为了丰富Android日常开发的UI效果,陆陆续续涌现出一大批UI组件,在UI组件日益完善的同时,也开始出现了RecyclerView、ConstraintLayout、MotionLayout等一些可以辅助大家写出更加符合性能要求的界面效果。同时,系统的安全与稳定性、用户隐私也越来越被重视,所以每个版本都出现了一些大的适配工作,例如运行时权限,FileProvider适配,限制后台服务、广播,限制反射SDK 私有API,引导使用HTTPS,甚至去除SDCard访问权限等…
在这些基础能力完善后, Google终于开始对基础、架构、行为、UI 等下手了。
大家都知道后端一般的项目大多数都是MVC架构,而且大多数后端写出来的代码很自然就遵守了这个架构。
为什么呢? 后端的框架相对成熟,由框架引导架构的落地。比如Spring框架,他会引导你去做 ioc, aop,分层,Controller、Service、Dao一应俱全,你只要按照框架的指引,写出来的基本都符合MVC了。
但是在Android上,由于很多业务非常简单,简单到只需要发个请求、解析结果就完事了,这种情况下,很难让去划分业务层、控制层等等,并且Android也有自己的特殊的平台特性,比如组件生命周期、页面重建与恢复等等。
所以需要一系列的套件来引导大家去遵守某一架构,并针对平台特性做一些特殊支持,提供组件生命周期的感知套件,帮助大家更好的完成界面重建恢复等工作,以便于更好的管理大家的代码。
因此,Jetpack来了!
Jetpack是什么?
2018年谷歌发布了一系列辅助Android开发者的实用工具,合称Jetpack。
Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。
Jetpack的出现以及Google标准化开发模式的确立,代表了Android原生开发的未来方向,意味着Android发展已经逐渐成熟。
Jetpack原意为 喷气背包,Android背上Jetpack后就直冲云霄,这很形象了~
二、 Jetpack有什么?
Android Jetpack分类有4种,分别是 Architecture(架构)、Foundation(基础)、Behavior(行为)、UI(界面)。
1. Architecture(架构组件)
Android Architecture Component(AAC)
Architecture指的是架构组件,帮助开发者设计稳健、可测试且易维护的应用,架构组件可以说是对应用开发帮助最大的组件。
元素 | 介绍 |
---|---|
LifeCycle | 组件内部感知自己的生命周期 |
Navigation | 管理Fragment |
ViewModel | 视图与数据之间的桥梁 |
LiveData | 实时更新数据 |
Room | 数据库 |
WorkManager | 更加智能后台任务 |
DataBinding | XML中绑定数据,更新UI |
Paging | 分页加载 |
- DataBinding:以声明方式将可观察数据绑定到界面元素,通常和ViewModel配合使用。
- Lifecycle:用于管理Activity和Fragment的生命周期,可帮助开发者生成更易于维护的轻量级代码。
- LiveData: 在底层数据库更改时通知视图。它是一个可观察的数据持有者,与常规observable不同,LiveData是生命周期感知的。
- Navigation:处理应用内导航。
- Paging:可以帮助开发者一次加载和显示小块数据,按需加载部分数据可减少网络带宽和系统资源的使用。
- Room:友好、流畅的访问SQLite数据库。它在SQLite的基础上提供了一个抽象层,允许更强大的数据库访问。
- ViewModel: 以生命周期的方式管理界面相关的数据,通常和DataBinding配合使用,为开发者实现MVVM架构提供了强有力的支持。
- WorkManager: 管理Android的后台的作业,即使应用程序退出或设备重新启动也可以运行可延迟的异步任务。
官方推荐的Android应用架构如下图所示。
2. Foundation(基础组件)
基础组件提供横向功能,例如向后兼容性、测试、安全、Kotlin 语言支持,并包括多个多个平台开发的组件。
元素 | 介绍 |
---|---|
Android KTX | 优化了供Kotlin使用的Jetpack和Android平台API。帮助开发者以更简洁、更愉悦、更惯用的方式使用Kotlin进行Android开发。 |
AppCompat | 帮助较低版本的Android系统进行兼容。 |
Auto | 开发Android Auto应用的组件,提供了适用于所有车辆的标准化界面和用户交互。 |
检测 | 从AndroidStudio中快速检测基于Kotlin或Java的代码。 |
多Dex处理 | 为具有多个Dex文件应用提供支持。 |
安全 | 安全的读写加密文件和共享偏好设置。 |
测试 | 用于单元和运行时界面测试的Android 测试框架。 |
TV | 构建可让用户在大屏幕上体验沉浸式内容的应用。 |
Wear OS | 开发Wear应用的组件。 |
3. BeHavior(行为组件)
行为组件可帮助开发者的应用与标准Android服务(如通知、权限、分享)相集成。
元素 | 介绍 |
---|---|
CameraX | 帮助开发简化相机应用的开发工作。它提供一致且易于使用的界面,适用于大多数Android。 设备,并可向后兼容至Android 5.0(API 21)。 |
DownloadManager | 处理长时间运行的HTTP下载的系统服务。 |
媒体和播放 | 用于媒体播放和路由(包括Google Cast)的向后兼容API。 |
通知 | 提供向后兼容的通知API,支持Wear和Auto。 |
权限 | 用于检查和请求应用权限的兼容性API。 |
设置 | 创建交互式设置,建议使用AndroidX Preference Library库将用户可配置设置集成到应用中。 |
分享操作 | 可以更轻松地实现友好的用户分享操作。 |
切片 | 切片是一种UI模板,创建可在应用外部显示应用数据的灵活界面元素。 |
4. UI(界面组件)
元素 | 介绍 |
---|---|
Animation and Transition | 该框架包含用于常见效果的内置动画,并允许开发者创建自定义动画和生命周期回调。 |
Emoji Compatibility | 即便用户没有更新Android系统也可以获取最新的表情符号。 |
Fragment | 组件化界面的基本单位。 |
布局 | 用XML中声明UI元素或者在代码中实例化UI元素。 |
调色板 | 从调色板中提取出有用的信息。 |
三、 Jetpack的优点
解决了 Android 架构问题
由于之前 Google 并没有推出关于 Android 应用程序架构设计的标准,因此,很多工程师只能自己创造各种解决方案,但这些方案都普遍存在两个问题:
- 非 Google 官方解决方案
一般有经验的工程师,都会从自己做过的项目中,总结出一套自己的架构设计,并且将其应用到生产环境中,不过或多或少的都会存在一定的问题,因此需要有人一直维护和持续优化项目的架构。并且随着项目需求复杂度的增加,也面临重新设计架构的工作。
- 无法辨别最佳的解决方案
由于每个工程师的设计思路都不相同,因此,也无法确认到底谁的架构是最佳方案,最终也导致了开发出来的应用参差不齐。
Google 也意识到了这些问题,因此推出了 Jetpack,让开发者能够使用标准的架构组件,而不用去纠结架构的方案设计,可以将更多的精力放在自己的业务代码上。
优点:
1.加速开发
组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率。
2.消除样板代码
Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理)。
3.构建高质量的强大应用
Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。
4. 遵循最佳做法,Android Jetpack 组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄露。
5. 消除样板代码,Android Jetpack 可以管理各种繁琐的 Activity(如后台任务、导航和生命周期管理),以便您可以专注于打造出色的应用。
6. 减少不一致,这些库可在各种 Android 版本和设备中以一致的方式运作,助您降低复杂性。