Files
moliparty-android/方案.txt
2025-07-07 10:26:00 +08:00

109 lines
4.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目重构技术方案
## 一、目标
- **语言迁移**:将原有 Java 代码逐步迁移到 Kotlin。
- **架构升级**:采用 MVVMModel-View-ViewModel架构提高可维护性和可测试性。
- **现代化异步处理**:使用 Kotlin 协程和 Flow 替代 RxJava简化异步编程模型。
- **事件总线更换**:使用 LiveDataBus , 替换现EventBus , LiveDataBus具备生命周期管理,不再需要单独注册回收,可跨进程通讯,可发粘性事件
- **RecyclerView Adapter 优化** 引入 DiffUtil, 提升全局刷新的效率,避免不必要的消耗
- **更换屏幕适配方案** 使用头条的适配方案 AndroidAutoSize 替换现屏幕适配方案
- **模块化设计**:按功能模块划分代码结构,增强模块解耦和复用能力。
- **模块路由TheRouter**:货拉拉提供的模块路由方案,替换掉已经不再更新维护的ARouter
- **Glide**:升级版本,尝试兼容 GZip ,提升图片加载效率
- **混淆方案**ProGuard + aabResGuard + xmlClassGuard+包名隔离
---
## 二、技术选型
### 1. 编程语言
- **Kotlin**:全面使用 Kotlin 替代 Java利用其简洁语法、空安全等特性。
### 2. 架构模式
- **MVVMModel-View-ViewModel**
- **Model**:数据层,包含网络请求、本地存储、业务逻辑等。
- **View**UI 层,由 Activity 和 Fragment 实现。
- **ViewModel**:连接 Model 和 View 的桥梁,持有 UI 数据并提供生命周期感知的数据绑定。
### 3. 异步处理
- **Kotlin Coroutines + Flow**:替代 RxJava简化异步操作和响应式编程。
- **LiveData/StateFlow**:用于在 ViewModel 和 View 之间传递 UI 数据变化。
### 4. RecyclerView
- **融云Provider方案/BaseRecyclerViewAdapterHelper**:选一个替代 原有adapter
- **DiffUtil**:工具会自动计算,差异化对比后只刷新对应的item,大幅度提升效率
### 5. 网络请求
- **Retrofit + OkHttp**:保留现有 Retrofit 网络框架,结合 Kotlin 协程进行优化。
- **协程封装**:统一封装网络请求,简化调用方式。
### 6. 数据库与本地缓存
- **Room**:本地持久化数据使用 Room 数据库。
- **CacheManager**:统一的缓存策略封装。//考虑
### 7. 事件总线
- **LiveDataBus** :替代 EventBus/RxBus实现跨组件跨进程通信,事件生命周期管理,粘性事件收发。
### 8. 混淆
- **ProGuard** :基础混淆,自定义规则在 proguard-rules.pro 中。
- **aabResGuard** :资源文件名混淆保护,白名单机制保留关键资源,支持多语言保护
- **xmlClassGuard** :布局文件类名混淆,目录结构混淆,生成映射文件
- **包名隔离** :测试包跟正式包采用不同 包名
### 9. 工具库
- **Glide**图片加载。尝试兼容GZip,因 Glide还充当下载 svga,mp4,如果GZip不能兼容这两种情况,那就只好放弃
- **TheRouter**:货拉拉团队开源的路由框架,使用ktps效率,编译效率远高于ARouter
- **uCrop**:裁剪图片框架,打算集成源码进项目,好应对各种需求
- **LeakCanary**:侦测内存泄漏
- **AndroidAutoSize**:头条适配方案
- **XCrash**:拦截 java层崩溃,so层崩溃,ANR,OOM 等,输出日志到本地,方便开发调试
- **饺子播放器/ExoPlayer**优先ExoPlayer,谷歌推荐,且不加入FFmpeg扩展的情况下1MB左右
....
---
## 三、预计模块划分
| 模块名 | 功能说明 |
|--------|----------|
| [core] | 基础库,如网络、数据库、全局工具类等 |
| [common] | 公共库 |
| `app` | app层 |
| `login` | 登录注册相关逻辑 |
| `home` | 首页相关逻辑 |
| `dynamic` | 社区模块 |
| `game` | 游戏模块 |
| `message` | 云信模块|
| `mine` | 用户模块 |
| `room` | 房间模块 |
| `pay` | 支付相关模块 |
| `google` | 谷歌代码模块 |
| `develop` | 开发模块,存放一些不上线的代码,正式包不引入该模块 |(非必要)
| `library` | 工具库模块 |
---
---
## 四、迁移计划
| 阶段 | 内容 |
|------|------|----------|
| Phase 0 | 必要库,第三方引入,gradle升级,混淆方案出包,等兼容测试(优先保障混淆插件能运行,其他可做取舍,不断试错找到最优解)
| Phase 1 | 基础设施搭建Kotlin 支持,协程封装,模块划分,启动页搭建,路由搭建...
| Phase 2 | 用户登录注册、社区模块,用户模块
| Phase 3 | 云信模块
| Phase 4 | 游戏模块
| Phase 5 | 房间模块
| Phase 6 | 支付模块
| Phase 7 | 后续工作...
....
---
## 注意事项
1. **保持兼容性**:新旧代码共存期间需做好桥接,避免破坏已有流程。
2. **代码质量保障**
3. **文档同步更新**:重构过程中同步更新文档。
---