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