Jetpack系列——Jetpack简介

1,518 阅读5分钟

Jetpack简介

Android程序架构缺乏标准

关于架构,就不得不说MVC、MVP和MVVM。在Android开发中,一直以来都有用到MVC,将Activity/Fragment与布局文件分开就是一种最简单、最基本的MVC思想,但它没有很好地解决我们的问题,所以之后提出了MVP和MVVM。由于Google官方并没有推出关于Android应用程序架构的标准设计,所以各公司各团队只能创造各种解决方案,但这些解决方案有如下两个问题:

  • 非Google官方方案:

由于不是Google官方提供的解决方案,所以工程师不敢轻易在自己的线上项目中尝试,除了担心引入未知的问题,更重要的是担心这些解决方案后期是否有人持续维护。

  • 无法辨别最佳解决方案:

Android应用程序架构一直比较混乱,工程师不确定自己使用的架构是否是最佳的方案,这不仅增加了工程师的学习成本,还可能会导致开发出的应用程序质量参差不齐。

什么是Jetpack

Jetpack是Google为了解决Android架构混乱而引入的,但实际上Jetpack能做的不只这些。Google官方定义是:Jetpack是一套库,工具和指南,可以帮助开发者更轻松地编写应用程序。Jetpack中的组件可以帮助开发这遵循最佳做法,摆脱编写样板代码的工作,并且简化复杂任务,以便他们能够将精力集中放在业务所需的代码上。

Jetpack主要分为4个部分,即架构(Architecture)、界面(UI)、行为(Behavior)和基础(Foundation)。

Foundation

包含:Android KTX,AppCompat, Auto, 检测, Multidex, 安全, 测试, TV,Wear OS by Google。

  • Android KTX

Android KTX 是一组 Kotlin 扩展程序,属于 Android Jetpack 系列。它优化了供 Kotlin 使用的 Jetpack 和 Android 平台 API。Android KTX 旨在让您利用 Kotlin 语言功能(例如扩展函数/属性、lambda、命名参数和参数默认值),以更简洁、更愉悦、更惯用的方式使用 Kotlin 进行 Android 开发。Android KTX 不会向现有的 Android API 添加任何新功能。

  • AppCompat

在较低版本的Android 系统上恰当地降级。AppCompat就是指v7 appcompat库。 此库添加了对操作栏用户界面设计模式的支持。这个库包括对Material Design用户界面实现的支持。也就是说,我们可以借助该库,对Material Design有更便捷和兼容性更好的实现。

  • Auto

Android Auto 提供了适用于所有车辆的标准化界面和用户交互模式。作为设计者,您无需担心车辆特有的硬件差异(如屏幕分辨率、软件界面、旋钮和触摸式控件)。

  • 检测

快速对基于 Kotlin 或 Java 的代码进行基准化分析。该库会处理预热,衡量代码性能,并将基准化分析结果输出到 Android Studio 控制台。由于这些步骤涉及停用调试功能以获得准确的性能结果,因此您不会将更改提交至源代码控制系统中。

  • Multidex

方法数超过 64K 的应用启用多 dex 文件( 65,536 方法数限制)。

Architecture

包含:DataBind, Lifecycles, LiveData, Navigation, Paging, Room, ViewModel, WorkManager。

  • DataBind

可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。即:将布局组件与源数据绑定,使源数据变化的同时布局组件及时同步更新。

  • Lifecycles

用来管理和响应 Activity / Fragment 的生命周期的变化,帮助我们编写出更易于组织且通常更加轻量级的代码,让代码变得更易于维护。 Lifecycle 是一个类,它持有 Activity / Fragment 生命周期状态的信息,并允许其它对象观察此状态。

  • LiveData

LiveData是一个可观察的数据持有者类。与常规observable不同,LiveData是生命周期感知的。

  • Navigation

是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。

  • Paging

逐步从您的数据源按需加载信息。分页库。

  • Room

Room是Google为了简化旧式的SqlLite操作专门提供的一个SqlLite的ORM抽象层框架库。

  • ViewModel

是以生命周期的方式存储与管理UI相关数据。

  • WorkManager

管理一些要在后台工作的任务, -- 即使你的应用没启动也能保证任务能被执行。 例如: 向后端服务发送日志分析, 定期与服务器同步应用程序数据。

Jetpack与AndroidX

在2018年Google的I/O大会上,Google宣布使用AndroidX代替Android Support Library,Android Support Library在28版本之后就不再更新了,未来的更新会在AndroidX中进行。所以当使用Jetpack的组件时,经常会看到以"androidx"开头的包名。

为什么Jetpack组件要以兼容包的形式存在,而不是成为framework中的一部分呢?是为了向后兼容,使得Jetpack组件能够应对更加频繁的更新。

迁移至AndroidX

可以在菜单栏中选择 Refactor -> Migrate to AndroidX ,之后项目的gradle.properties文件中会看到以下两行代码

android.useAndroidX=true // 是否使用AndroidX
android.enableJetifier=true // 是否将第三方库迁移到AndroidX

Jetpack更新

在最新的alpha版本中提供了一些新的强大组件:

  • Hilt - Jetpack 推荐的依赖注入类库
  • Paging3 - 逐步加载和显示数据
  • App Startup - 在应用启动时初始化组件
  • Auto-fill IME - 展示自动填充建议
  • Database Inspector - 调试数据库工具
  • WindowManger - 更好的设备支持
  • MotionLayout - 构建流畅的交互式动画
  • core-animation 和 SeekableAnimatedVectorDrawable - 更简单的动画库