Android Jetpack是一个由谷歌官方提供的安卓开发套件(套件是一组组件的意思),目的是帮助安卓开发者解决兼容性问题,减少重复代码,提升体验和性能,最重要的是提升开发效率。安卓以碎片化著名,不同的版本,不同的OEM厂商导致整个安卓设备碎片化严重,对App生态来说是很不友好,加之安卓本身的原因导致像流畅度,体验和性能始终逊水果不止一筹。后来谷歌推出一系列的Android SDK之外的一系列开发组件如support library来解决兼容性(App compat)和新的开发组件(RecyclerView, CardView, Pager等),后来这些东西就演变成了现在的Android Jetpack。
缘起
最开始是一坨support library,有v4有v7还有v13,它们是针对 不同的SDK版本使用的不同的兼容性组件。后来到了2017年的Google I/O,又推出了一系列叫做Android Architecture Components,然后到了2018年的Google I/O大会,把所有这一坨融合了在一起,进行了大统一,起了个新名字叫做Android Jetpack,各个组件包名统一为androidx.*。这便是Android Jetpack的由来。
之后2019年Google I/O,已经初具格局,之后Android Jetpack就定型了,不断的向前演进,更新的频次也很快,每当有的新的技术,新的编程范式都会有所呈现,甚至有点超过Android SDK本身了。Android SDK与安卓本身是绑定在一起的,受制于底层SoC的发展,因为它毕竟是一个操作系统。但Android Jetpack却不一样,它是纯的三方软件,可以以相当快的速度在迭代,软件开发最前沿的东西都能快速得到尝试,只要它符合Android Jetpack本身的定位,会很快被纳入其中。
Android Jetpack到底是个啥
前面说了好多废话,下面来看一下Android Jetpack到底是个啥,它就是一套软件开发组件,由谷歌官方提供,能解决Android App开发中的比较蛋疼的问题(如兼容性和碎片化),并有很多能提升体验,提升性能提升效率的组件。
它提供了四大技术领域组件:
技术领域 | 组件 | 说明 |
---|---|---|
Foundation components | App compat Multidex Test Android KTX |
兼容性组件 测试框架 Kotlin支持 |
Architecture components | Data binding 优雅的把数据绑定到View上,省去findView and setText Lifecycles 感知系统框架(Activity/Fragment)的生命周期 LiveData 监听数据变化且能感知生命周期 Navigation 内部页面跳转 Paging 分页 Room 数据库封装 ViewModel MVVM式架构 WorkManager 耗时后台任务或者定时后台任务 |
在架构层面能起到作用的组件 增强模块化,可测试性和可维护性 |
Behavior components | CameraX Preference |
更好的与Android系统进行交互 |
UI components | Animations and Transitions Emoji Fragments Palette 调色板 Layouts |
更丰富更强大的UI部件, 体验好,兼容性好,易于使用 |
为何要用它
自从2019年起统一成了Android Jetpack后,它相较之前分散的support library在整个生态中的地位不一样了,现基本上与Android SDK有着同等的重要性,甚至很多东西都会优先被放到Jetpack里面。
毕竟它是由谷歌官方主推的东西,是由正统的Android专家写出来的,质量是有保证的。并且现在它的迭代速度也很快,生态上已形成闭环,如果能解决项目上的问题,当然首选Android Jetpack。
Jetpack Compose又是个啥
在2019年的Google I/O与Jetpack一起发布的还有一个叫做Compose的东西,它是一个符合Material Design的全新的写UI的方式,基于Kotlin语言。 需要注意的是Compose是一种构建原生UI的方式,它用Kotlin DSL的方式来构建 UI,而不是原始的View和XML,它有点类似于早先的anko。
需要特别注意的是,它并不像Android Jetpack那样是一种三方组件,而是一种构建原生UI的方式,它的野心也比较大,并不局限于构建Android UI,现在也支持构建 Desktop UI了,重点理解它是一种构建UI界面的工具,至于底下的平台可以适配到任何平台。结合Kotlin,Kotlin也在做KMM Kotlin Multiplatform Mobile,也即跨平台的Kotlin,以后的Compose可以生成任何平台的目标文件。
所以,学习Compose的曲线就要比Jetpack要陡峭得多了,因为Jetpack其实就是额外的一些三方组件,但Compose是一种全新的构建UI的方式,需要系统的学习才能掌握它。并且除非你从头搭建app,否则Compose很难与现有的UI构建方式(View和XML)融合在一起。其实这种东西并不新鲜,从React Native到Flutter都是这种可以构建跨平台UI的工具(虽然RN和Flutter并不仅仅是UI,它们号称跨平台构建App,UI是跨平台最大的挑战,因为每个平台的原生UI构建方式都不一样,非UI部分,做一层API的桥接就可以做到)。
而且感觉Compose想要挑战RN和Flutter难度也不小,因为RN和Flutter出生就是为了跨平台开发,而Compose是生于安卓UI,它们的出发点的高度并不一样,是因为有了Kotlin KMM的支持,所以有想跨平台的野心。其实Compose是被水果Swift UI逼出来的,所以它的定位与Swift UI是一样的。
注意与Compose的区分
Android Jetpack是一组Android官方SDK之外的开发套件,用以提升Android开发的兼容性和开发效率,也不仅仅能用于Android开发,大部分是标准的Jar包,其实也可以用于其他JVM平台的开发。
而Jetpack Compose或者说Compose则一个声明式的UI开发框架,它是专门用来写UI的,由谷歌开发出来用于对抗水果SwiftUI的。同样的,虽然主要用于Android开发,但它就是一个声明式UI框架,并不受制于具体的平台。
所以说Jetpack与Compose其实是两个东西,Compose并不包含在Jetpack套件之中。当然了,就像我们之前的文章中经常提到的那样,Compose与Jetpack融合的非常好,在Compose之中可以非常方便的使用Jetpack,谷歌也在Jetpack中开发出了Compose想当友好的粘合API,很多Jetpack的API可以在Compose中无缝的使用,但还是要注意本质上它们还是不同的东西。