前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jetpack来了:走近Google标准应用架构

Jetpack来了:走近Google标准应用架构

作者头像
用户1682855
发布2020-07-14 16:53:49
8560
发布2020-07-14 16:53:49
举报
文章被收录于专栏:前沿技墅前沿技墅

本文先对Android架构的现有问题进行了分析和讨论,介绍了Jetpack诞生的背景。进而讨论了什么是Jetpack,以及它与AndroidX之间的关系。在对Jetpack有了大致的了解后,我们分别对如何将旧项目迁移至Jetpack,以及如何让新项目支持AndroidX进行了介绍。

Android应用程序架构设计标准的缺失

一个Android应用程序通常至少有一个Activity,当我们要开发一个小型Android应用程序时,通常会将大部分的代码写在Activity/Fragment中。这些代码包括业务逻辑、数据Model、UI控件等。当涉及网络数据获取或数据库CRUD(Create、Retrieve、Update、Delete,即增加、查询、更新、删除)操作时,还需要用到工作线程,进而,我们还不得不考虑Activity/Fragment的生命周期问题。

针对一个小型项目,将大部分代码写在Activity/Fragment中并没有什么问题,但对于中大型项目而言,随着时间的推移和业务复杂度的增加,Activity/Fragment中的代码会变得复杂且难以维护。因此,我们需要将代码按照功能或类型的不同进行分类,并放到不同的包或类文件中,但又不破坏彼此正常的功能和通信。这在软件开发中叫作“解耦”。为了将代码解耦以应对日益膨胀的代码量,工程师在应用程序中引入了“架构”的概念。使之在不影响应用程序各模块组件间通信的同时,还能够保持模块的相对独立。这样不仅有利于后期维护,也有利于代码测试。

关于架构,相信大家或多或少都听说过MVC(Model View Controller)、MVP(Model View Presenter)和MVVM(Model View ViewModel)。在Android应用程序开发中,一直以来都有用到MVC,将Activity/Fragment与布局文件分开就是一种最简单、最基本的MVC思想,只是它没有很好地解决我们的问题,所以才有了MVP和MVVM。由于Google官方并没有推出关于Android应用程序架构设计的标准,因此,世界各地的工程师只能自己创造各种解决方案,但这些方案都面临着以下问题。

  • 非Google官方解决方案:由于不是Google官方解决方案,所以工程师不敢轻易在自己的线上项目中使用这些方案,除了害怕引入未知问题,更重要的是担心这些解决方案后期是否有开发者持续跟进维护。
  • 无法辨别最佳解决方案:Android的应用架构始终处于一个混乱的阶段,Android工程师很困惑,他们不确定自己使用的架构是否真的是最佳方案。这不仅增加了工程师的学习成本,还可能最终导致他们开发出的应用程序质量参差不齐。

Android工程师希望Google官方可以推出并维护一些关于架构的组件或指南,这样他们就可以将更多的精力放在自己的业务代码上了。Google也意识到了这个问题,这便有了Jetpack,Jetpack正是为了解决这些问题而诞生的。

什么是Jetpack

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

Jetpack主要包括4个方面,如下图所示,分别是架构(Architecture)、界面(UI)、行为(Behavior)和基础(Foundation)。其中,架构是我们要关注的重点,也是本书主要讨论的内容,我们会对其中的每一个组件进行讨论。

Jetpack与AndroidX

在2018年的Google I/O大会上,Google宣布用AndroidX代替Android SupportLibrary,AndroidSupport Library在版本28之后就不再更新了,未来的更新会在AndroidX中进行。不仅如此,AAC(Android Architecture Component)中的组件也被并入AndroidX。所以,当使用Jetpack的组件时,经常会看到以“androidx”开头的包名。如下图所示,从包名的变化,我们便可以看出,AndroidSupport Library与AAC中的各种组件已经迁移到了AndroidX中。

为什么Jetpack组件需要以兼容包的形式存在,而不是成为Framework的一部分呢?很简单,这是为了提供向后兼容,使Jetpack组件能够应对更加频繁的更新。除了Android Support Library和AAC,其他一些需要频繁更新和迭代的特性也被并入了AndroidX,例如Emoji。

迁移至AndroidX

如果你从未在项目中使用过Jetpack组件,现在你希望将项目迁移至AndroidX,那么可以在菜单栏中选择“Refactor”→“Migrate to AndroidX...”选项,将你的项目迁移至AndroidX。

此时,会出现一个对话框,询问迁移之前是否需要以Zip文件的形式备份项目,如下图所示。这里建议备份一份,以防迁移出错。

新建项目默认支持AndroidX

如果你的Android Studio为最新版本,那么在新建一个项目时,应该能在创建过程中看到“Useandroidx.* artifacts”这个选项。这表示,新创建的项目会默认配置对AndroidX的支持,如下图所示。

如果没有看见此选项,那么请检查你的SDK配置。通过“Tools”→“SDK Manager”打开配置界面,确保你已经安装了Android 9.0及以上版本的SDK,如下图所示。

本文节选自博文视点新书《Android Jetpack应用指南》。本书出自前豆瓣FM首席Android架构师之手,对Jetpack中的每个组件都进行深入浅出地介绍。学习组件如何使用的同时,也对其源码进行简要分析。其中每个组件都通过实例进行演示,最大程度地减少读者的学习成本。Android初学者可通过本书直接上手最符合Google官方标准的应用架构MVVM,Android老手可以通过本书快速了解Jetpack组件,辨别是否对架构自己的应用程序有所帮助。直击左下阅读原文,破“门”而入,有如神助!

内容简介本书讲解的是Android Jetpack最核心的内容—架构。第1章将对Jetpack做一个大致的介绍。第2章至第9章,将分别详细介绍为搭建MVVM架构而设计的各个Jetpack组件,包括LiveData、ViewModel、DataBinding等。第10章是对前面各章节的总结,将向读者详细介绍什么是数据模型驱动界面更新、什么是MVVM架构,以及如何利用Jetpack组件搭建符合MVVM架构规范的应用程序。本书假设读者对Android应用程序有基本的了解,希望系统学习Jetpack,并打算最终使用Jetpack组件架构符合MVVM规范的应用程序。

作者简介:叶坤,毕业于闽南师范大学计算机系。曾先后就职于网龙、搜狐畅游17173、豆瓣。在豆瓣任职期间,负责豆瓣FM Android客户端的研发工作。现为美餐网资深Android工程师,负责美餐行星项目Android客户端的研发工作。他在大学期间便开始自学Android研发技术,从事Android研发已有10年,在该领域有较为丰富的经验,曾译《Android高性能编程》一书。除了码字,他还十分喜爱阿根廷探戈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前沿技墅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档