Android Jetpack就是谷歌提供的一堆帮助你加速开发的工具,你不必再去重复地写样板代码,对于经常使用的一些逻辑代码,Android Jetpack已经帮你实现了,你能把更多的时间放在业务逻辑上。

Android Jetpack并不是全新的,他将我们所熟知的工具都整合到一起,比如AppCompat、LiveData、DataBinding等。又增加了一些工具比如WorkManager、Paging和Navigation等。
Android Jetpack主要分为四大部分,如图所示基础组件(Foundation Components),构架组件(Architecture Components),UI组件(UI Components)和行为组件(Behavior Components)。
AndroidX项目就是Jetpack工具所对应的开源代码,他的代码的包名都是以androidx为开头的。从28.0.0版本开始,Support Library已经不提供特性上的更新,Support Library子项目比如appcompat和recyclerview等都迁移到了AndroidX中,顺带包名也变了。同时AndroidX项目也相对独立了,不再随着Android系统的更新而更新,子项目版本号从1.0.0开始,遵循语义化版本号。如果你有新项目或者你领导准你更新现有项目,可以考虑及时迁移到AndroidX。
构架组件
Jetpack中的构架组件,之前就已经存在了,和Support Library一样,包名被改,版本号也从2.0.0开始。构架组件中LifeCycle用来管理监听Activity和Fragment的生命周期,配合LiveData可以在Activity和Fragment处于活动状态(active)的时候来监听数据变化。DataBinding和ViewModel可以配合使用以实现MVVM构架中的VVM部分,完成双向绑定。Room则是ORM,可以和LiveData、RxJava配合使用以实现异步查询。
你在使用RecyclerView的时候,肯定实现过“下滑加载更多数据”这种需求,如果你感觉自己的实现不太完美,可以考虑使用专门为这种场景设计的Paging库。WorkManager用来规划执行异步任务,app没启动也行。Navigation用来管理页面之间的跳转,可以进行跟Xcode里的StoryBoard一样进行图形化设置。话说WorkManager、Navigation和Paging这仨库我都还没仔细研究,实在是脑壳疼。而且WorkManager和Navigation都还没有正式版本,当然也快了,现在都RC了,不过相对来说肯定还不太成熟,我们不如先躺一躺,让大牛们趟一趟看看这些个库水有多深再说。
基础组件
AppCompat就是原来的v7 appcompat library,其中核心类是AppCompatActivity,我们写BaseActivity的时候很多都是集成它。Android KTX优化了部分Jetpack的API供Kotlin使用。MultiDex和Test就不多说了,你肯定用过。
UI组件
Layout包含了之前Support Library中的一些ViewGroup,比如CardView、Recyclerview和ConstraintLayout等,用法和以前都是一样的,都迁移到了AndroidX,只是需要改改build.gradle中的依赖。
Animation和Transition部分,除了系统自带的属性动画,为了让动画实现地更真实,Jetpack还包含了support-dynamic-animation库,方便使用Fling动画和Spring动画。还有transition库,可以帮助实现Activity之前切换时候的Transition动画。
Palette可以从图片中提取色调;Emoji针对Android 4.4的机型提供最新的Emoji支持不用随着系统更新;剩下的库都是给汽车、电视和可穿戴设备提供的UI工具。
说实话,UI组件没啥变化,就是给原来的库分了个类。
行为组件
更为组件感觉就更没什么可说的了,随着Android版本的升级,一些系统接口有了变化,比如通知(Notification),权限和分享等。为了统一和向后兼容,行为组件包含了一些库方便使用。这些库其实有的需要单独引用,有的已经包含在AppCompat的依赖中了,我感觉Jetpack官方文档这一点做得不好,有的时候都分不清哪些是Android系统原有的东西,哪些是Jetpack提供的,必须仔细地去文档里翻找。
总结
分析了这么多,感觉有点白费口舌,为啥捏?因为Android Jetpack起的名字怪玄乎,还以为有啥革命性东西,后来发现东西不多。如果回到几个小时前,我再写这篇文章,那么他只有一句话:
Android Jetpack把原来的Support库和构架组件换了个包名,分了个类,完