一丶说明
(一)丶模块化
- 定义:我的理解模块化就是,我们开发中的一种设计思想,我们在组件化的过程中,有些组件或基础库在多个模块中都有调用,我们可以把这些耦合度高的提炼出来,形成组件。供上层模块调用。
- 使用:将我们用到的ListView,TabView,Dialog等抽离成单独的组件。
- 目的:复用 解耦
- 架构定位:纵向分层
(二)丶组件化
- 定义:就是按照业务逻辑,将功能属于同一业务的代码整合到一起,模块的功能相对比较复杂。
- 使用:我们APP中一般都包含首页,用户中心,启动,消息中心等模块,根据业务将属于他们各自的代码整合在一起,形成模块化。
- 目的:隔离,高内聚
- 架构定位:横向分层,根据业务逻辑进行划分
(三)丶插件化
- 定义:它是把某个功能或者业务模块,单独抽离出来以减少宿主APP的体积,在使用该模块的时候再去加载它,这就是插件化技术
- 使用:APP分成多个模块每个模块都是一个APk,而对组件化来说每个模块是一个lib。
- 目的:解耦,更新
- 架构定位:横向分层
(四)丶热修复:
动态加载技术,用于dex修复 组件化和模块化的比较 组件化更加强调的是复用,低耦合,一个组件能够在多个模块中重复调用,而模块化更加强调业务的高内聚,相近的业务功能都在同一模块中
二丶对比
(一)丶组件化和插件化的比较
- 组件化是一种思想,插件化是一种技术。
- 组件化中每个模块对应的是一个lib,而插件化中每个模块对应的是一个apk。
- 组件化是为了提高代码中的内聚度,而插件化是为了减少宿主APP的体积而出现的。
(二)丶插件化和热修复的比较
- 两者都是动态加载技术的应用。
- 插件化的对象是插件,也就是要加载运行APK包。 而热修复的对象是补丁,就是要加载运行patch,dex,jar等一系列包含dex修复内容的文件
(三)丶模块化,组件化,插件化的特点
- 模块化(lib)主要解决问题是重用问题,不强调单独编译
- 组件化(lib)主要解决问题是功能拆分,强调单独编译
- 插件化(application)是所有组件都为apk的特殊组件化
(四)丶模块化,组件化,插件化的不同点
- 模块化相互引入,需要引入需要的module
- 组件化通讯方式分为隐式和路由。
- 插件化本身是不同进程,因此是binder机制进程间通讯。
三丶插件化方案的对比说明
(一)丶DroidPlugin
- 概述:
DroidPlugin是由360手机助手团队在16年开源的插件框架,已经在360手机助手上使用,它可以在无需安装、修改的情况下运行APK文件,此机制对改进大型APP的架构。实现多团队协作开发具有一定的好处,其实VirtualAPK等开发框架一样具有这样的优势,由于360团队在后期推出了RePlugin这套新的插件框架,所以目前这套插件框架被RePlugin取代 - 优点:
- 宿主和插件完全隔离,插件不依赖宿主,可以独立安装运行
- 低入侵设计,插件不需要继承任何类
- 插件apk和普通apk一样的,所以插件开发没有门槛,开发的时候集成简单
- 缺点:
- 插件启动速度比较慢
- 无法在插件中发送具有自定义资源的Notification
- 无法在插件中注册一些具有特殊Intent Filter的Service、Activity、BroadcastReceiver、ContentProvider等组件以供Android系统、已经安装的其他APP调用
- 缺乏对Native层的Hook,对某些带native代码的apk支持不好,可能无法运行
(二)丶Replugin
- 概述:
RePlugin是360安全卫士团队,在17年开源的插件框架,据17年360安全卫士团队介绍,他们的安卓客户端83%的功能都实现了插件化,并且成功的为2亿用户提供了服务,17年全年他们发布达将近600次,平均一天2次的发版,也是完全得力于这套插件框架,目标这套框架还在持续的更新中 - 优点:
- 支持几乎所有的Android特性,四大组件均不需要在宿主manifest中预注册,支持几乎所有单品app可以利用到的特性如AppCompat,databing等等;
- 及其稳定:hook点仅有一处(classLoader),崩溃率低于万分之一,很好的兼容了市面上的android rom
- 拥有成熟的插件管理方案,支持插件的升级,安装,版本迭代,进程间通信,协议版本等等
- 入侵极低,插件开发等同于原生开发
- 集成相对来说比较简单
- 缺点:
- 对资源、application和context,插件和宿主的共享存在各种问题
(三)丶VirtualApk
- 概述:
irtualAPK是滴滴出行自研的一款优秀的插件化框架,是该团队在17年6月3号开源的,该框架通过将业务模块插件化,可随时更新插件来发布新功能,具备版本随时发布的能力。VirtualAPK对插件没有额外的约束,原生的apk即可作为插件。插件工程编译生成apk后,即可通过宿主App加载,每个插件apk被加载后,都会在宿主中创建一个单独的LoadedPlugin对象。通过这些LoadedPlugin对象,VirtualAPK就可以管理插件并赋予插件新的意义,使其可以像手机中安装过的App一样运行
- 优点:
- 支持几乎所有的Android特性,四大组件均不需要在宿主manifest中预注册,每个组件都有完整的生命周期
- Native层的Hook,插件中的so库能够正常使用
- 兼容市面上几乎所有的Android手机,这一点已经在滴滴出行客户端中得到验证
- 入侵极低,插件开发等同于原生开发
- 插件的构建过程简单,通过Gradle插件来完成插件的构建,整个过程对开发者透明
- 缺点:
- 需要在插件中声明使用插件的宿主,所以在一定程度上影响了插件的独立性
- 对资源、application和context,插件和宿主的共享存在各种问题
本文介绍了模块化、组件化、插件化和热修复的概念和区别。模块化关注组件复用和解耦,组件化强调业务高内聚,插件化则用于减小APP体积并支持热更新。热修复则是一种动态加载技术,用于修复DEX错误。DroidPlugin、RePlugin和VirtualAPK是三种插件化框架,各有优缺点。

5769

被折叠的 条评论
为什么被折叠?



