Android组件化和插件化的概念

组件化:

就是将一个app分成多个模块,每个模块都是一个组件(Module),开发的过程中我们可以让这些组件相互依赖或者单独调试部分组件等,但是最终发布的时候是将这些组件合并成一个apk,这就是组件化开发。

插件化:

和组件化开发略有不用,插件化开发时将整个app拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk(组件化的每个模块是个lib),最终打包的时候将宿主apk和插件apk分开或者联合打包。

两者区别

简单来说组件化是在编译期分模块,插件化是在运行期。一般插件化用于动态修复bug或者动态更新模块,相对来说黑科技更多一些。

一、组件化


1、android工程的组件一般分为两种:

  • **application组件:**是指该组件本身就可以运行并打包成apk

  • **lib组件:**是指该组件属于app的一部分,可以供其它组件使用但是本身不能打包成apk

正常一个App中可以有多个module(模块),但是一般只会有一个module是设置为application的,其他均设置为library。组件化开发就是要每个module都可以运行起来,因此在开发期间每个module均设置为application,发布时再进行合并。

2、为什么要有组件化?

Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,短则一两分钟,长则达到五六分钟。随着app业务的壮大,模块越来越多,代码量超10万是很正常的,这个时候我们会遇到以下问题:

  • 稍微改动一个模块的一点代码都要编译整个工程,耗时耗力

  • 公共资源、业务、模块混在一起耦合度太高

  • 不方便测试

3、组件化开发的好处(优点):

组件化开发可以有效降低代码模块的耦合度,使代码架构更加清晰,同时模块化的编译可以有效减少编译时间,当然总的编译时间是不会减少的,只是App模块化之后开发某个模块时,只需要编译特定模块,可以快速编译调试。

  • 业务模块分开,每个模块可以独立开发编译运行,解耦的同时也降低了项目的复杂度。

  • 开发单个模块时可以共享资源和工具类。

  • 可以针对单个模块测试, 开发调试时不需要对整个项目进行编译。

  • 多人合作时可以只关注自己的业务模块,把某一业务当成单一项目来开发。

  • 可以灵活的对业务模块进行组装和拆分。

4、组件化开发的主要思路

就是将一个Module拆分成若干个Module,由主App提供统一的入口,每个拆分后的Module都依赖共享的Common依赖库,通过相关配置,各个Module可以独立运行调试,也可以供主App依赖使用。

5、组件化开发的步骤:

  1. 新建一个lib组件,New → Module → Andorid Library,取名BaseUtilLib,我们将所有的公共的工具类、网络封装等类放在其中。

  2. 新建一个lib组件,New → Module → Andorid Library,取名BaseReslLib,我们将所有的公共资源、drawable、String等类放在其中。

  3. 将app按照需求划分成多个模块,比如按业务按地区等都可以,然后分别创建Module模块。

  4. 逐一开发某个模块,每个组件都可以引用[1][2]步骤的BaseUtilLib、BaseReslLib里的公共类和公共资源,组件可以单独开发、单独测试。

  5. 将工程中的开发好的组件模块,引入到工程的app中,然后就可以发布了。

6、举一个更简单的图例:

app:壳工程

module1:组件1

module2:组件2

common:第三库,公用工具、自定义 View、主题等

二、插件化


1、为什么需要插件化?

我们在项目的开发过程中,难免会遇到产品需求的变更或者出现bug。在传统的模式中,我们首先需要修改代码,然后重新打包Apk,再交给公司的运营去官网或者应用商店上线,用户在打开应用的时候就会进行更新了。但是这种模式有几个缺点:

  • 上线周期长,从修改代码到用户更新需要较长的时间;

  • 用户更新代价较大,每次用户更新都需要下载整个Apk包,整个Apk包括了一个应用的所有代码,要消耗用户较多的流量。

  • 如果是一些重要的更新,为了确保用户都能更新到,还需要强制更新,即用户打开App后如果不更新则退出应用,这种对用户来说是极其不友好的。

  • 还有另外一种情况,某些较大的App功能很多,比如支付宝、微信等,如果将这些功能全部塞到一个Apk中,那将会是一个巨型Apk,用户在安装或者更新Apk时将会经过漫长的等待时间。

基于以上几点,Android的插件化技术应运而生**,**插件化技术可以将整个巨型Apk按照功能模块划分,不同的功能打包成不同的Apk,然后应用的主Apk按需加载对应功能的Apk,用户只需要安装应用的主Apk即可。主Apk相当于一个壳,它会按需加载其他功能模块的Apk。通过这种模式,不仅解决了巨型Apk的问题,而且当某个功能模块需要变化时,也只需要修改对应功能的代码,打包功能Apk并更新即可,这样不仅可以让用户及时更新,而且更新的代价也很小。但是,我们知道,在Android中,没有安装的apk是不能直接运行的,那么要想实现插件化,我们就必须让宿主Apk能够加载功能Apk并运行。

2、插件化的好处:

你可能感兴趣的:(Android,经验分享,面试,android)