xiuyuantech 博客: https://xiuyuantech.github.io/
前言
在 Android 开发中,组件化是将一个大型应用程序拆分成多个独立的组件,每个组件都是一个相对独立、可复用的单元。
组件化强调的是减少组件之间的耦合,提高代码的可维护性和可测试性。
每个组件可以独立开发、测试和编译,组件之间通过定义接口和调用 API 的方式进行通信和交。
组件化的优势包括:
提高开发效率:解耦,多个小团队可以并行开发不同的组件。
提高代码复用性:不同的组件可以通过接口和 API 进行通信和交互。
提高系统稳定性:每个组件可以独立运行,一个组件的崩溃不会影响整个系统。
模块化、插件化区别
1.模块化是将一个应用程序按照功能或业务领域划分为多个相互独立、低耦合的模块。每个模块专注于实现特定的功能或解决特定的问题。模块化强调的是功能的分离和模块之间的独立性。
模块化的优势包括:
清晰的结构:使得代码结构更清晰、易于理解和维护。
促进重用和扩展:模块化的设计可以促进代码的重用和扩展。
2. 插件化是将一个应用程序拆分成多个独立的插件,每个插件可以独立开发、测试、编译和发布。插件化强调的是功能的动态加载和卸载,以及功能的动态更新。
插件化的优势包括:
功能扩展:通过加载和卸载插件,可以动态地扩展宿主应用程序的功能。
灵活性:插件可以独立开发和测试,不需要修改宿主应用程序的代码。
动态更新:插件可以在运行时动态加载和卸载,实现功能的动态更新。
企业大多常用组件化架构进行开发,也仅有国内部分企业使用插件化开发。不过随着 Android 版本迭代更新,权限越来越严格插件化将受到限制。
问题
组件分层:怎么将一个项目分成多个组件、组件间的依赖关系是怎么样的?
组件单独运行和集成调试:组件是如何独立运行和集成调试的?
组件间通信: 主项目与组件、组件与组件之间如何通信的?
业务组件不能反向依赖壳工程,如何获取 Application 实例、如何获取 Application onCreate() 回调 (用于任务初始化)?

根据上面的组件化架构图,组件分为 基础组件、业务功能组件、业务组件。
基础组件,不用多说,就是基础功能,例如网络请求、日志框架、图片加载,这些与业务毫无关联,可用于公司所有项目,是底层最稳定的组件。
业务功能组件,主要是供业务组件依赖使用,例如 分享、支付组件,通常是一个完整的功能,是较为最稳定的组件。
业务组件,完整的业务块,例如前面提到京东的 「首页」、「分类」、「发现」、「购物车」、「我的」。
项目搭建
- 单工程方案
// gradle.properties / 新增 config.gradle 中配置
isDebug = true 独立调试
//app/library build.gradle 中配置, 若在 config.gradle 中配置则需要添加 apply from:"config.gradle"
if(isDebug.toBoolean()){
//构建后输出一个 APK 安装包
apply plugin: 'com.android.application'
}else{
//构建后输出 ARR 包
apply plugin: 'com.android.library'
}
android {
defaultConfig {
if(isDebug.toBoolean()){
//独立调试的时候才能设置 applicationId
applicationId "com.demo.module.collect"
}
}
sourceSets {
main {
if (isDebug.toBoolean()) {
//独立调试
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
//集成调试
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
- 多工程方案
多工程方案,业务组件以 library module 形式存在于独立的工程。
java
// settings.gradle 中配置
include ":app",
include ":app_pay",

总结
总之任何项目开发组件化都是在项目发展到一定规模后必定要使用的技术,学习至完全掌握是非常必要的。
业务咨询:https://soloist.pages.dev

文章来源:w2solo





