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 架构:严格四层分层,依赖向内,极致解耦
相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui