Android中项目架构:

先做一个大分类(最容易混乱的根源)

Android 架构一共分 4 大类,绝大多数开发者都混在一起讲:

  1. 工程架构(整个项目怎么拆模块) 模块化、组件化、插件化、一体化工程
  2. 代码分层架构(单个模块内部代码怎么写) MVC、MVP、MVVM、Clean 架构、MVI
  3. 基础通用架构 单组件内部封装(Base、基类、通用架构)
  4. 动态化架构 插件化、AppBundle 动态交付、动态组件

我全部逐个详细讲,大白话 + 项目对比 + 面试标准答案。

一、工程架构(项目整体拆分,你之前一直在学的)

就是整个 App 工程怎么拆分 module、模块之间怎么依赖

1. 一体化(单工程)

整个项目就一个 app module,所有代码全写里面。

  • 特点:无拆分、耦合极高、编译慢、维护难
  • 适用:小 Demo、简单小工具、新手项目

2. 模块化

按功能分层拆多个 library module

模块之间可以互相依赖 ,全部依附主 App,不能独立运行

跳转用原生 Intent,不需要 ARouter,直接模块相互依赖就行

模块化:拆分代码,直接依赖,原生跳转,不用 ARouter

3. 组件化

模块化的升级版

业务组件之间禁止互相依赖 ,可切换 Application/Library 独立运行

调试必须用 ARouter 路由 跳转、通信。

大厂大型 App 标准架构。

组件化:业务独立,禁止依赖,必须路由,必用 ARouter

4. 插件化

每个模块打包成独立 APK 插件,主 App 动态加载运行线上不需要发版,就能动态下发模块、更新页面

  • 缺点:系统限制多、兼容性坑极多,现在原生插件化基本淘汰
  • 替代方案:App Bundle 动态交付、鸿蒙服务卡片、动态化 SDK

5. 微服务架构(Android 移动端微组件化)

比组件化更细,公共能力全部下沉成独立服务(网络、权限、存储、支付),全部接口化,完全无硬依赖,大型超大型项目用。

二、代码分层架构(单个模块内部代码结构,面试必考)

和模块拆分无关,只管一个 module 里面 Activity/ViewModel/Model 怎么分层解耦你平时写代码的业务架构,全部属于这一类。

1. MVC(最原始)

View(页面)、Controller(Activity)、Model(数据)

  • 问题:Activity 过于臃肿,业务全堆 Activity,耦合严重,难以维护
  • 现状:老旧项目、简单页面还在用

2. MVP(MVC 升级版)

View、Presenter、Model把业务逻辑从 Activity 抽离到 Presenter

  • 优点:解耦 Activity,可测试
  • 缺点:接口泛滥、内存泄漏多、代码量暴增
  • 现状:前几年主流,现在基本被 MVVM 淘汰

3. MVVM(目前 Android 官方主流、现在项目标配

View、ViewModel、Model

  • 核心:数据驱动视图、双向绑定、生命周期感知
  • 组件:Jetpack 全套(ViewModel + LiveData + DataBinding/ViewBinding + Room)
  • 优点:解耦、无内存泄漏、逻辑清晰、适合协作开发
  • 你日常开发、公司项目 90% 都是 组件化工程 + MVVM 内部分层

4. MVI(MVVM 进阶、最新架构)

Model-View-Intent

单一数据源、单向数据流、状态唯一

把所有事件、状态统一封装,不可变数据

优点:逻辑极其清晰、便于调试、状态可回溯

适合复杂页面、大型业务、Compose 开发

现在越来越多新项目改用 MVI。

5. Clean 架构(整洁架构,大厂底层架构)

严格分层:

UI层 → 领域层(Domain) → 数据层(Data)

每一层完全隔离,依赖只能单向向内

抽离实体、用例、仓库,极度解耦,可移植性极强

适合超大型长期维护项目(微信、支付宝、字节大型 App)

三、结合你之前所有知识点,一张总表全部吃透

架构类型 包含架构 核心特点 使用场景 是否需要 ARouter
工程架构(项目模块拆分) 一体化、模块化、组件化、插件化、微服务 整个项目 module 怎么拆、模块依赖 项目整体结构 模块化:不需要; 组件化:必须要
代码分层架构(模块内部) MVC、MVP、MVVM、MVI、Clean 单个模块内代码怎么分层 页面业务代码编写 完全不需要

四、最容易混淆的灵魂区别(面试必问)

很多人搞错:组件化 ≠ MVVM

  1. 组件化工程层面 ,管模块拆分、模块之间怎么通信
  2. MVVM代码层面 ,管模块内部页面代码怎么写

真实公司项目标准组合(几乎所有中大型 App)

外层:组件化(工程拆分) 内层:MVVM / MVI(代码分层)

五、全部架构通俗一句话总结(背诵版)

【工程架构】

  1. 一体化:所有代码塞一个 app 模块,新手小项目
  2. 模块化 :拆多个 library,模块可互依赖,原生跳转
  3. 组件化 :业务独立可运行,模块禁止互依赖,必须 ARouter
  4. 插件化:模块拆成独立 apk 动态加载,现在基本淘汰
  5. 移动端微服务:组件化极致细化,能力全部接口化下沉

【代码分层架构】

  1. MVC:Activity 包揽一切,臃肿老旧
  2. MVP:抽逻辑到 Presenter,接口多、易内存泄漏
  3. MVVM:官方主推,数据驱动,ViewModel+LiveData,目前主流
  4. MVI:MVVM 升级版,单向数据流,状态统一,复杂项目首选
  5. Clean 整洁架构:严格分层单向依赖,超大型项目底层架构

六、终极最全对比

项目架构 是否需要 ARouter 页面跳转方式 模块依赖关系
纯模块化 ❌ 不需要 原生 Intent 直接跳转 直接 implementation 硬依赖
组件化 必须用 ARouter 路径跳转 模块间无直接依赖,仅依赖基础库

1. 工程架构区别

  • 模块化:拆分代码,模块可互相依赖,全部 library,不可独立运行
  • 组件化:模块化进阶,业务组件独立可运行,组件间禁止依赖,路由通信
  • 插件化:模块独立 APK,动态加载,线上动态更新
对比点 模块化 组件化
能否独立运行 ❌ 不能,全是 library ✅ 每个业务模块可单独跑 App
拆分粒度 粗,按层级 / 功能拆分 细,按完整业务模块拆分
模块类型 全部 Android Library 可切换:Application / Library
依赖方式 直接 implementation 硬依赖 无直接依赖,路由跳转(ARouter)
编译速度 改动一处全项目重编 只编译当前调试组件,极快
团队开发 多人易冲突,耦合高 多人并行开发,互不干扰
项目大小 中小型项目 大型、超大型项目
最终打包 一个 APK 上线依然一个 APK
核心目的 代码解耦、结构清晰 独立开发、并行开发、快速调试、彻底解耦

2. 代码分层架构区别

  • MVC:View-Controller-Model,Activity 既是 View 又是 Controller
  • MVP:抽离 Presenter,View 与 Model 完全隔离,接口通信
  • MVVM:ViewModel 接管逻辑,数据驱动 UI,生命周期安全
  • MVI:单向数据流,单一状态源,事件统一管理
  • Clean 架构:严格四层分层,依赖向内,极致解耦
相关推荐
shaoming37764 小时前
浏览器动作开发:地址栏图标点击事件、弹出页面设计
android·mysql·adb
赏金术士4 小时前
Kotlin 协程与挂起函数(Coroutines & suspend)入门到实战
android·开发语言·kotlin
泡泡以安6 小时前
Unidbg学习笔记(十三):固定随机干扰项
android·逆向
泡泡以安6 小时前
Unidbg学习笔记(十六):Console Debugger
android·逆向
赏金术士6 小时前
Room + Flow 完整教程(现代 Android 官方方案)
android·kotlin·room·compose
泡泡以安6 小时前
Unidbg学习笔记(八):文件系统层补环境
android·逆向
泡泡以安6 小时前
Unidbg学习笔记(六):补环境的思维框架
android·逆向
通往曙光的路上7 小时前
mysql2
android·adb
木易 士心7 小时前
会见SDK文档
android
Co_Hui8 小时前
Android:多线程
android