Files
moliparty-android/方案.txt

109 lines
4.6 KiB
Plaintext
Raw Normal View History

2025-07-07 10:26:00 +08:00
# 项目重构技术方案
## 一、目标
- **语言迁移**:将原有 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. **文档同步更新**:重构过程中同步更新文档。
---