Android 模块化、组件化、插件化以及热修复的比较

前言

已经好久好久没有更新博客了,去年后半年太忙,没怎么抽出时间来写博客。以后给自己定个小目标,不管多忙,每周都要写一篇博客。闲话不多说,下面开始扯正题,最近有个同事问我“模块化、组件化,插件化还有热更新他们之间有什么关系和区别?“

概述

随着产品的业务不断的增加,我们的APP中代码就会越来越多,这时侯为了方便我们多个成员之间协同开发,所以就出现的根据业务,将我们代码分割为不同的模块(用户中心模块,首页模块,启动模块,消息模块等),即使这样随着业务的增加还是会出现以下问题
1、APP的体积越来越大,功能模块越来越多,编译速度变慢,但并不是所有的用户都用到每个模块。
2、模块间的耦合程度高,协同开发的成本越来越大。
这个时候我们就出现了组件化,根据业务,把耦合度高的组件或基础库,抽离出来,形成单独的组件,在底层供其他上层模块调用。同时由于APP体积大,一个APP包含太多模块,并不是所有的模块都会用到,所以就出现了,先有一个壳(宿主APP),然后根据用户需要动态加载其他模块的APK,这就是插件化技术。我们上线后有时候会出现需要紧急修复的bug,这时候如果改bug重新出包,很麻烦,耗费人力。所以就出现了热修复技术。
Android 模块化、组件化、插件化以及热修复的比较

模块化

定义: 就是按照业务逻辑,将功能属于同一业务的代码整合到一起,模块的功能相对比较复杂。
使用: 我们APP中一般都包含首页,用户中心,启动,消息中心等模块,根据业务将属于他们各自的代码整合在一起,形成模块化。
目的 隔离,高内聚
架构定位 横向分层,根据业务逻辑进行划分。

组件化

定义: 我的理解组件化就是,我们开发中的一种设计思想,我们在组件化的过程中,有些组件基础库在多个模块中都有调用,我们可以把这些耦合度高的提炼出来,形成组件。供上层模块调用。
使用 将我们用到的ListView,TabView,Dialog等抽离成单独的组件。
目的复用 解耦
架构定位纵向分层

插件化

顾名思义,它是把某个功能或者业务模块,单独抽离出来以减少宿主APP的体积,在使用该模块的时候再去加载它,这就是插件化技术。
对于插件化来说他将APP分成多个模块每个模块都是一个APk,而对组件化来说每个模块是一个lib。
Android 模块化、组件化、插件化以及热修复的比较

热修复

热修复就是不用二次安装客户端,在用户没有感知的情况下,修复线上的bug。

组件化和模块化的比较

组件化更加强调的是复用,低耦合,一个组件能够在多个模块中重复调用,而模块化更加强调业务的高内聚,相近的业务功能都在同一模块中。

组件化和插件化的比较

1、组件化是一种思想,插件化是一种技术。
2、组件化中每个模块对应的是一个lib,而插件化中每个模块对应的是一个apk。
3、组件化是为了提高代码中的内聚度,而插件化是为了减少宿主APP的体积而出现的。

插件化和热修复的比较

1、两者都是动态加载技术的应用。
2、插件化的对象是插件,也就是要加载运行APK包。 而热修复的对象是补丁,就是要加载运行patch,dex,jar等一系列包含dex修复内容的文件。