项目总览
SumTea 是一个基于组件化与模块化架构设计的 WanAndroid 客户端项目,采用 Kotlin 语言结合 Jetpack 组件构建 MVVM 架构模式。该项目集成了协程、Flow、Retrofit、Room 等现代 Android 开发技术栈,并实现了短视频播放功能,旨在展示从零到一构建大型 Android 项目的最佳实践。项目通过 ARouter 实现模块间通信,使用 ExoPlayer 实现类抖音短视频列表,整体架构遵循 Google 推荐的应用架构指南。
技术栈概览
| 技术领域 | 核心技术 | 版本信息 |
|---|---|---|
| 开发语言 | Kotlin | - |
| 架构模式 | MVVM + Jetpack | Lifecycle, Navigation, DataBinding, LiveData, ViewModel |
| 网络请求 | Retrofit + OkHttp + 协程 + Flow | Retrofit 2.9.0 (config.gradle:25) |
| 数据缓存 | MMKV + Room | Room 2.5.0 (config.gradle:38), MMKV 1.2.15 (config.gradle:29) |
| 图片加载 | Glide | 4.15.0 (config.gradle:31) |
| 视频播放 | ExoPlayer | 2.18.5 (config.gradle:36) |
| 路由框架 | ARouter | 1.5.2 (config.gradle:33-34) |
| 响应式 | RxJava3 + RxAndroid | RxJava 3.1.6 (config.gradle:39) |
| 编译配置 | compileSdk 33, minSdk 21, targetSdk 32 | (config.gradle:14-17) |
架构设计
MVVM 架构模式
项目采用标准的 MVVM 架构模式,严格遵循 Google 推荐的应用架构指南。ViewModel 仅负责数据存储与 UI 状态管理,数据加载逻辑由 Repository 层完成。通过 Room 数据库实现本地缓存,在无网络或弱网环境下优先展示缓存数据,确保用户体验的连续性。
架构核心要点:
- ViewModel 职责边界:仅处理 UI 相关的数据存储与状态管理,不直接进行网络请求或数据库操作
- Repository 数据网关:统一管理远程数据源与本地数据源,实现数据缓存策略
- LiveData 数据驱动:UI 层通过观察 LiveData 自动响应数据变化,实现响应式编程
组件化与模块化设计
项目通过组件化与模块化拆分实现代码解耦与复用。isModule 配置项控制模块是否独立运行,支持单模块调试与集成编译模式切换。ARouter 作为模块间通信桥梁,通过路由表实现页面跳转与服务调用。
模块化核心原则:
- 化整为零:将复杂系统拆分为独立的功能模块
- 化繁为简:每个模块职责单一,降低维护成本
- 重用与解耦:基础库下沉,业务模块上浮
(README.md:14, config.gradle:3)
系统架构图
正在加载图表渲染器...
架构说明:
- APP壳工程:负责应用全局配置、环境切换、签名混淆及业务模块集成 (README.md:28-30)
- 业务模块层:5 个独立业务模块,通过 ARouter 实现模块间通信,支持独立调试
- 核心基础库层:提供 Base 基类、通用组件、网络请求等核心能力
- 支撑库层:Banner、图片加载、数据库、启动器等独立功能组件
模块结构
业务模块划分
| 模块名称 | 职责边界 | 核心功能 | 入口页面 |
|---|---|---|---|
| mod_main | 首页、分类、体系、我的四大 Tab 管理 | Banner 轮播、视频列表、文章列表、知识体系 | MainActivity |
| mod_user | 用户个人设置与账户管理 | 个人信息编辑、隐私政策、版本更新、缓存清理 | UserSettingActivity |
| mod_login | 用户认证流程 | 登录、注册、隐私协议、第三方登录入口 | LoginActivity |
| mod_search | 内容搜索功能 | 搜索历史、搜索推荐、搜索结果展示 | SearchActivity |
| mod_video | 短视频播放模块 | RecyclerView 仿抖音列表、ExoPlayer 播放、旋转音乐盒 | VideoActivity |
基础库封装
lib_framework 核心能力:
- Base 基类封装:BaseActivity、BaseFragment、BaseViewModel
- 扩展函数集:提供大量 Kotlin 扩展函数加速开发
- 工具类集合:LogUtil、TipsToast、通用 Utils
- 管理类封装:各类 Manager 统一管理资源与状态
lib_network 网络层设计:
- API 接口统一管理
- 错误处理与异常封装
- Flow 扩展类实现协程网络请求
- 拦截器链:日志拦截、头部拦截、缓存拦截
- BaseViewModel 与 BaseRepository 封装协程作用域
lib_room 数据缓存层:
- Room 数据库实体定义
- DAO 层数据访问接口
- 视频列表缓存策略实现
- 数据库版本迁移管理
目录结构
SumTea_Android/
├── app/ # APP壳工程
│ ├── src/main/
│ │ ├── java/com/sum/tea/ # Application类
│ │ └── res/ # 主题与资源
│ └── build.gradle # 打包配置
├── mod_main/ # 首页模块
├── mod_user/ # 用户模块
├── mod_login/ # 登录模块
├── mod_search/ # 搜索模块
├── mod_video/ # 视频模块
├── lib_framework/ # 基础框架库
├── lib_common/ # 通用组件库
├── lib_network/ # 网络请求库
├── lib_stater/ # 启动器库
├── lib_banner/ # Banner组件库
├── lib_glide/ # 图片加载库
├── lib_room/ # 数据库库
├── config.gradle # 统一配置
└── settings.gradle # 模块声明
核心数据流
网络请求调用链
正在加载图表渲染器...
数据流说明:
- UI 层:通过 DataBinding 绑定 ViewModel 的 LiveData,自动响应数据变化
- ViewModel 层:持有 Repository 引用,不直接进行网络请求,仅管理 UI 状态
- Repository 层:作为唯一数据源,协调网络与本地缓存,实现单一数据源原则
- 网络层:通过 Flow 封装异步请求,支持协程取消与异常处理
- 缓存层:Room 数据库持久化,MMKV 存储轻量级键值对
(README.md:15-17, README.md:22-24)
模块间通信机制
项目通过 ARouter 实现模块间解耦通信,核心通信模式包括:
路由跳转:
- 使用
@Route注解声明目标页面路径 - 通过
ARouter.getInstance().build(path).navigation()进行页面跳转 - 支持参数传递、拦截器、转场动画
服务调用:
- 定义
IService接口暴露模块能力 - 通过
@Route注解实现类注册服务 - 调用方通过 ARouter 获取服务实例进行方法调用
技术亮点
开发规范与最佳实践
项目严格遵循阿里巴巴 Java 开发规范与 Android 开发规范,代码注释完善。核心亮点包括:
UI 开发规范:
- 全面采用 ConstraintLayout 减少布局层级
- ViewOutlineProvider 实现圆角效果,避免手写 shape XML
- CoordinatorLayout + Toolbar 实现栏目吸顶与轮播图电影效果
- ChipGroup 与 FlexboxLayoutManager 实现流式布局
代码质量保障:
- 大量 Kotlin 扩展函数提升开发效率
- 完善的注释覆盖,符合团队协作规范
- 模块化设计确保代码边界清晰
性能优化方案
启动优化:
- lib_stater 异步任务启动器处理 Application 同步初始化
- 任务优先级、线程池、依赖关系配置
- 有效减少 APP 启动耗时
(README.md:79-81, README.md:102)
网络优化:
- Retrofit + OkHttp 连接池复用
- 网络请求拦截器链统一处理日志、头部、缓存
- Flow 封装实现请求去重与防抖
缓存策略:
- Room 数据库缓存结构化数据
- MMKV 缓存键值对配置信息
- Glide 图片缓存与内存管理
(README.md:16, README.md:84-86)
短视频播放实现
mod_video 模块实现类抖音短视频列表,核心技术点:
播放器管理:
- ExoPlayer 播放器实例全局单例
- RecyclerView 复用机制与播放器生命周期绑定
- 保证全局只有一个播放器处于播放状态
UI 交互:
- RotateNoteView 实现旋转音乐盒动画
- 滑动切换视频的流畅体验
- 视频列表与评论、点赞等交互组件
(README.md:52-55, config.gradle:36)
核心能力量化
| 指标维度 | 量化数据 |
|---|---|
| 业务模块数 | 5 个(main、user、login、search、video) |
| 基础库数量 | 6 个(framework、common、network、stater、banner、glide、room) |
| 支持最低版本 | Android 5.0(API 21) |
| 目标版本 | Android 12L(API 32) |
| 技术栈组件数 | 15+ 核心组件 |
| 架构模式 | MVVM + 组件化 + 模块化 |
(settings.gradle:19-31, config.gradle:14-17)
适用场景
学习场景:
- Android MVVM 架构最佳实践学习
- Kotlin + 协程 + Flow 现代开发范式
- 组件化与模块化项目结构设计
- 短视频播放功能实现参考
项目参考:
- 中大型 Android 项目架构设计
- 模块化拆分与通信方案选型
- 网络请求封装与缓存策略实现
- 启动优化与性能调优实践
(README.md:3, README.md:91-93)
报告阅读路线图
正在加载图表渲染器...
推荐阅读顺序:
- 项目总览(当前页面):了解项目整体架构与技术栈
- 架构设计:深入理解 MVVM 模式与组件化设计思想
- 模块详解:按业务模块逐个分析实现细节
- 数据流分析:掌握网络请求、缓存策略、模块通信机制
- API 设计:学习网络层封装与接口设计规范
- 技术亮点:提炼可复用的技术方案与最佳实践
