前言
网上关于 “Android 开发" 的文章很多,我本人学习 Android 开发的过程也借鉴了网上先辈们的文章;但大多数文章都从底层的细枝末节开始讲述,由下而上给人一种这门技术“博大精深”望而生畏的感觉;而我写这篇文章的初衷就是由上而下,希望别人在阅读的过程中能够觉得 “模块化、组件化、插件化、热修复原来是这样的啊!” 的感觉
模块化
模块:
-
最初的目的是将同一类型的代码整合在一起; 所以模块的功能相对复杂,但都同属于一个业务;
-
不同模块之间也会存在依赖关系; 但大部分都是业务性的互相跳转,从地位上来说它们都是平级的
特点:
-
分属同一功能/业务的代码进行隔离(分装)成独立的模块,可以独立运行; 以页面、功能或其他不同粒度划分程度不同的模块,位于业务框架层,模块间通过接口调用,目的是降低模块间的耦合,由之前的主应用与模块耦合,变为主应用与接口耦合,接口与模块耦合;
-
模块就像有多个USB插口的充电宝,可以和多部手机充电,接口可以随意插拔,复用性很强,可以独立管理; 模块就像是独立的功能和项目(如淘宝:注册、登录、购物、直播…),可以调用组件来组成模块,多个模块可以组合成业务框架
组件化
组件:
- 最初的目的是代码重用,功能相对单一或者独立; 在整个系统的代码层次上位于最底层,被其他代码所依赖,所以说组件化是纵向分层
特点:
-
把重复的代码提取出来合并成为一个个组件,组件最重要的就是重用(复用),位于框架最底层,其他功能都依赖于组件,可供不同功能使用,独立性强
-
组件就像一个个小的单位,多个组件可以组合成组件库,方便调用和复用,组件间也可以嵌套,小组件组合成大组件
Android工程的组件一般分为两种:
application组件: 是指该组件本身就可以运行并打包成apk
lib组件: 是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk
正常一个App中可以有多个module(模块),但是一般只会有一个module是设置为application的,其他均设置为library; 组件化开发就是要每个module都可以运行起来,因此在开发期间每个module均设置为application,发布时再进行合并。
为什么要有组件化?
Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情; 短则一两分钟,长则达到五六分钟;随着app业务的壮大,模块越来越多,代码量超10万是很正常的
这个时候我们会遇到以下问题:
-
稍微改动一个模块的一点代码都要编译整个工程,耗时耗力
-
公共资源、业务、模块混在一起耦合度太高
-
不方便测试
组件化开发的优点
组件化开发可以有效降低代