开发应用程序就像搭积木。没有良好架构的应用程序,就像没有搭好底座的积木,随着项目复杂度的上升,维护起来会困难重重,工程师会不停地陷入技术债务之中——“积木的倒塌”只是时间问题。

如何把握模块的粒度,在保持模块独立性的同时,又不影响模块间的通信,是全世界优秀的Android工程师共同追求的目标。为了解决这一问题,各类架构模式层出不穷,比较著名的有MVC、MVP和MVVM。Jetpack正是在这一背景下诞生的。它由Google官方推出,用于方便工程师搭建符合MVVM规范的Android应用程序。

本文选自《Android Jetpack应用指南》一书,让我们跟随下文一同走近Google标准应用架构。

01

▊ 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正是为了解决这些问题而诞生的。

02

▊ 什么是Jetpack

前面提到,Jetpack是Google为了解决Android架构问题而引入的,但实际上Jetpack能做的不止这些。

按照Google官方的说法:

Jetpack是一套库、工具和指南,可以帮助开发者更轻松地编写应用程序。Jetpack中的组件可以帮助开发者遵循最佳做法、摆脱编写样板代码的工作并简化复杂的任务,以便他们能将精力集中放在业务所需的代码上。

Jetpack主要包括4个方面,如下图所示,分别是架构(Architecture)、界面(UI)、行为(Behavior)和基础(Foundation)。

03

▊ 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。

04

▊ 迁移至AndroidX

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

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

05

▊ 新建项目默认支持AndroidX

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

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

本文选自博文视点新书 《Android Jetpack应用指南》。

《Android Jetpack应用指南》

叶坤著

  • Android开发者必学

  • 国内外第一本系统介绍Jetpack的图书

本书讲解的是Android Jetpack最核心的内容——架构。对Jetpack中的每个组件都进行深入浅出地介绍。学习组件如何使用的同时,也对其源码进行简要分析。每个组件都通过实例进行演示,最大程度地减少读者的学习成本。

(扫码了解本书详情)

▊ 作者简介

叶坤

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


更多科技资讯请见微信公众号:博文视点Broadview(微信号:bvbooks)

Jetpack来了:走近Google标准应用架构相关推荐

  1. 如何2周拿到Google Cloud专业架构师认证

    如何2周拿到Google Cloud 专业架构师认证 由于工作内容涉及到Google cloud,需要从零开始快速全面的了解一下Google Cloud,按照Google Cloud的Learning ...

  2. Google首席Java架构师访谈:选择编程语言就像选择酒吧

    文 / Peter Seibel 译 / 郝培强 本文是Commmon Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈,谈到程序员应该看什么书. ...

  3. 爱奇艺微服务标准技术架构实践

    背景 为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造. 在微服务化的过程中,各业务团 ...

  4. Google App Engine技术架构之Google App Engine架构

    上一篇我们介绍了Google App Engine的基本信息,本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍. 设计理念 App Engine在设计 ...

  5. 说说标准服务器架构(WWW+Image/CSS/JS+File+DB)

    现在不少大型网站和应用程序都采用标准架构来进行开发,何为标准架构,标准架构有什么好处,今天我想说一下. 标准,说它是一种标准,也就是它其有一定的通用性,可以解决大部分问题,今天说的架构不是软件层次上的 ...

  6. ThreatSource:Google BeyondProd安全架构详解

    安全乐观主义点评:由cnbird鸟哥分享的一份介绍Google BeyondProd实现的ppt,笔者遗憾没有现场听到具体的内容,ppt下面的"安全乐观主义点评"字样为小编的发散思 ...

  7. 图解USB标准之架构概览

    前面写了一些SPI/I2C/RS-485之类的文章,有朋友留言希望能分享一些USB方面的梳理总结,今天就从系统标准层面先来梳理一下.看看有没有朋友喜欢.先从系统层面来梳理.个人学习,习惯于先从整体上摸 ...

  8. SCSI PRs命令研究总结1 - SCSI标准和架构

    SCSI-2的标准与SCSI-3的标准并没有本质的区别,只是SCSI-3的标准进行了全面的重写,组织更加合理. SCSI-3标准组成 从SCSI-3开始,SCSI的标准主要有5大部分: 架构模型(SC ...

  9. UEFI标准与架构简介

    参考文档:Vincent Zimmer, Michael Rothman, Suresh Marisetty - Beyond BIOS_ Developing with the Unified Ex ...

  10. 图解数据中心水系统标准和架构(大全)

    按照TIA-942标准,数据中心水系统可以分为四个标准,分别是T1.T2.T3和T4. 一.T1:无备用级,所有设备和管路均无冗余,N+0配置,冷机.冷却塔.水泵和末端仅仅能满足实际需求,没有备份和冗 ...

最新文章

  1. linux下db2创建批量存储过程,DB2批量执行SQL脚本以及存储过程的实现
  2. 栈----生产者消费者实例
  3. 秦九韶算法matlab程序,数值分析matlab程序实例.doc
  4. LeetCode 1668. 最大重复子字符串
  5. Java ObjectInputStream readUnshared()方法与示例
  6. shell中的大括号和小括号
  7. C# 封装的功能强大的中国农历日历操作类的代码
  8. PADS2007教程(一)——原理图封装
  9. 构建自己的Conficker
  10. android 上位机下位机串口通讯,上位机下位机串口通信.doc
  11. 【君思智慧园区】物业管理系统解决方案
  12. SEO和SEM是什么?又有什么区别?
  13. flink定时器使用问题
  14. android view viewgroup 区别,Android笔记:View ViewGroup 对比
  15. Java 学习 for循环小题目 天朝有一个乞丐姓洪,去天桥要钱第一天要了1块钱第二天要了2块钱第三天要了4块钱第四天要了8块钱以此类推 2n问题: 洪乞丐干10天,收入是多少?
  16. 商业谈判在中国:西方人的见解
  17. Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(一)
  18. week09_day0203_CSS
  19. 简述锂离子电池的分类及结构
  20. 运满满服务器繁忙显示500,运满满上线两年多 听听货车司机怎么说

热门文章

  1. JAVA大数——lightoj1024
  2. Filter和interceptor比较
  3. go tcp socket
  4. android错误详细教程四
  5. 经典参考书:《编程之美——微软技术面试心得》
  6. ProviderManager
  7. 关于Linux下使用Windows应用程序的尝试总结
  8. cf980E TheNumberGames (贪心+倍增)
  9. 密码协议(一)协议概述
  10. VC6.0代码移植到VS2008运行时乱码问题解决