Android 中大型项目架构梳理

97 阅读3分钟

公司项目是一个维护了近十年的直播项目,经历了无数波的炮火,远古代码到新型代码各种夹杂,导致现在想用一些新一点的代码就得需要大动干戈.近期有新项目开展,所以基于个人开发经验整合一下新项目的架子.

目的: 解耦,易维护,风格统一

模块说明:

  • app 项目主入口,配置打包以及编译任务

  • core 项目的核心库,提供基础的功能(网络,工具,基础UI,路由)

  • component 通用且可复用模块(支付/登录/统计等模块)

  • feature 具体业务功能模块

🏗️ 项目架构说明 (Project Architecture)

为了适应中大型项目,采用 分层模块化架构(Layered Modular Architecture),通过清晰的模块划分来降低耦合、提升代码复用率,并支持业务快速扩展。

🎯 架构设计理念

本项目结合了多种现代 Android 架构思想:

  • Modular Architecture: 通过模块拆分实现并行开发和快速编译。
  • Decoupled by Router: 物理隔离,逻辑连接,实现真正的业务解耦。
  • Automated Infrastructure: 通过 Gradle 自动化任务减少人工出错率。

1:项目环境 新,新,新支持近两年Android新出的库.

  • MVVM/MVP
  • Gradle 8+
  • Jdk 17
  • 模块化/路由

2: 模块结构

ApplicationArchitecture
├── app                         # 应用入口模块
│
├── core                        # 核心基础层
│   ├── core_aar                # AAR库支持
│   ├── core_base               # 基础框架
│   ├── core_data               # 数据管理层 (UserInfo等)
│   ├── core_network            # 网络层
│   ├── core_ui                 # UI基础组件
│   ├── core_util               # 工具库
│   ├── core_res                # 公共资源
│   └── core_router             # 路由框架
│
├── component                   # 可复用业务组件层
│   ├── component_live          # 直播组件
│   ├── component_beauty        # 美颜组件
│   ├── component_pay           # 支付组件
│   └── component_res           # 组件资源
│
└── feature                     # 业务功能模块
    ├── feature_app             # 主业务功能
    ├── feature_res             # 资源业务
    └── feature_test            # 测试功能

3: 架构分层说明

层级作用
app应用入口、配置文件、全局初始化与模块集成
feature具体业务功能实现,互不依赖
component可复用业务组件,可被多个 Feature 依赖
core提供基础能力(数据、网络、UI、工具、路由等)

依赖关系原则

  • FeatureCore
  • ComponentCore
  • AppFeature + Component + Core


3.1. 资源命名规范

所有资源文件必须使用蛇形命名法(snake_case),且 Layout 文件 必须包含以下前缀:

  • activity_*: Activity 布局
  • fragment_*: Fragment 布局
  • view_*: 自定义 View 布局
  • item_*: 列表项布局
  • dialog_*: 对话框布局

3.2. 依赖管理

项目强制使用 gradle/libs.versions.toml (Version Catalog) 管理所有第三方依赖和插件版本,严禁在 build.gradle 中硬编码版本号。

3.3. 异步与存储

  • 异步: 优先使用 Kotlin CoroutinesFlow
  • 存储: 键值对存储优先使用 MMKV
  • 图片: 统一使用 Coil 3

⚙️ 技术栈

技术说明
语言Kotlin 2.x
UIViewBinding + Jetpack Compose (可选)
异步Kotlin Coroutines & Flow
网络Retrofit 3 + OkHttp 5
持久化MMKV (高性能 KV 存储)
CoilCoil加载图片 (支持永久存储图片)

🚀 自动路由机制

项目实现了 自动路由注册系统,用于实现模块间解耦通信。

工作流程

  1. featurecomponent 模块定义 *Routes.kt
  2. Gradle 任务自动扫描并生成 RouterInit.kt
  3. 应用启动时调用 RouterInit.registerAll() 完成注册。


APK 自动命名

构建 APK 时会自动生成带版本和时间的文件名:

ApplicationArchitecture_${buildType}_v${versionName}_${time}.apk

示例:

ApplicationArchitecture_release_v1.0.0_20260313.apk