稀有猿诉

十年磨一剑,历炼出锋芒,说话千百句,不如码二行。

Introduction to Android Jetpack

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 NativeFlutter都是这种可以构建跨平台UI的工具(虽然RN和Flutter并不仅仅是UI,它们号称跨平台构建App,UI是跨平台最大的挑战,因为每个平台的原生UI构建方式都不一样,非UI部分,做一层API的桥接就可以做到)。

而且感觉Compose想要挑战RN和Flutter难度也不小,因为RN和Flutter出生就是为了跨平台开发,而Compose是生于安卓UI,它们的出发点的高度并不一样,是因为有了Kotlin KMM的支持,所以有想跨平台的野心。其实Compose是被水果Swift UI逼出来的,所以它的定位与Swift UI是一样的。

参考资料

Comments