公司项目是一个维护了近十年的直播项目,经历了无数波的炮火,远古代码到新型代码各种夹杂,导致现在想用一些新一点的代码就得需要大动干戈.近期有新项目开展,所以基于个人开发经验整合一下新项目的架子.
目的:
解耦,易维护,风格统一
模块说明:
-
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、工具、路由等) |
依赖关系原则:
Feature→CoreComponent→CoreApp→Feature+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 Coroutines 和 Flow。
- 存储: 键值对存储优先使用 MMKV。
- 图片: 统一使用 Coil 3。
⚙️ 技术栈
| 技术 | 说明 |
|---|---|
| 语言 | Kotlin 2.x |
| UI | ViewBinding + Jetpack Compose (可选) |
| 异步 | Kotlin Coroutines & Flow |
| 网络 | Retrofit 3 + OkHttp 5 |
| 持久化 | MMKV (高性能 KV 存储) |
| Coil | Coil加载图片 (支持永久存储图片) |
🚀 自动路由机制
项目实现了 自动路由注册系统,用于实现模块间解耦通信。
工作流程:
- 在
feature或component模块定义*Routes.kt。 - Gradle 任务自动扫描并生成
RouterInit.kt。 - 应用启动时调用
RouterInit.registerAll()完成注册。
APK 自动命名
构建 APK 时会自动生成带版本和时间的文件名:
ApplicationArchitecture_${buildType}_v${versionName}_${time}.apk
示例:
ApplicationArchitecture_release_v1.0.0_20260313.apk