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 架构:严格四层分层,依赖向内,极致解耦
相关推荐
程序员陆业聪3 小时前
线上监控与防劣化:让启动优化成果不再回退 | Android启动优化系列(五·完结)
android
程序员陆业聪3 小时前
首帧渲染优化:从白屏到内容可见的最后一公里
android
AI玫瑰助手4 小时前
Python基础:字符串的常用内置方法(查找替换分割)
android·开发语言·python
xiangxiongfly9155 小时前
Android 使用WebSocket通信
android·websocket·网络协议·okhttp
su_ym81105 小时前
Android属性系统
android·framework·property
明天就是Friday6 小时前
Android实战项目③ Room+Clean Architecture开发待办事项App 完整源码详解
android
没有了遇见6 小时前
《彻底搞懂 ViewModel:作用、原理与源码分析》
android
Fate_I_C6 小时前
Kotlin 协程:串行/并行请求、async/await、coroutineScope 管理并发、重试机制
android·代码规范
山河梧念6 小时前
【保姆级教程】VMware虚拟机安装全流程
android·java·数据库