109 lines
4.6 KiB
Plaintext
109 lines
4.6 KiB
Plaintext
![]() |
# 项目重构技术方案
|
|||
|
|
|||
|
## 一、目标
|
|||
|
- **语言迁移**:将原有 Java 代码逐步迁移到 Kotlin。
|
|||
|
- **架构升级**:采用 MVVM(Model-View-ViewModel)架构,提高可维护性和可测试性。
|
|||
|
- **现代化异步处理**:使用 Kotlin 协程和 Flow 替代 RxJava,简化异步编程模型。
|
|||
|
- **事件总线更换**:使用 LiveDataBus , 替换现EventBus , LiveDataBus具备生命周期管理,不再需要单独注册回收,可跨进程通讯,可发粘性事件
|
|||
|
- **RecyclerView Adapter 优化**: 引入 DiffUtil, 提升全局刷新的效率,避免不必要的消耗
|
|||
|
- **更换屏幕适配方案**: 使用头条的适配方案 AndroidAutoSize 替换现屏幕适配方案
|
|||
|
- **模块化设计**:按功能模块划分代码结构,增强模块解耦和复用能力。
|
|||
|
- **模块路由TheRouter**:货拉拉提供的模块路由方案,替换掉已经不再更新维护的ARouter
|
|||
|
- **Glide**:升级版本,尝试兼容 GZip ,提升图片加载效率
|
|||
|
- **混淆方案**:ProGuard + aabResGuard + xmlClassGuard+包名隔离
|
|||
|
---
|
|||
|
|
|||
|
## 二、技术选型
|
|||
|
|
|||
|
### 1. 编程语言
|
|||
|
- **Kotlin**:全面使用 Kotlin 替代 Java,利用其简洁语法、空安全等特性。
|
|||
|
|
|||
|
### 2. 架构模式
|
|||
|
- **MVVM(Model-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. **文档同步更新**:重构过程中同步更新文档。
|
|||
|
|
|||
|
---
|