TheRouter 是一个 Kotlin 编写,由货拉拉技术开源的,用于 Android 模块化开发的一整套解决方案框架。支持KSP、支持AGP8,不仅能对常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。
Github 项目地址与使用文档详见 https://github.com/HuolalaTech/hll-wp-therouter-android。
为什么要使用 TheRouter
路由是现如今移动端开发中必不可少的功能,尤其是企业级APP,可以用于将Intent页面跳转的强依赖关系解耦,同时减少跨团队开发的互相依赖问题。
对于大型 APP 开发,基本都会选用模块化(或组件化)方式开发,对于模块间解耦要求更高。
TheRouter 是一整套完全面向模块化开发的解决方案,不仅能支持常规的模块依赖解耦、页面跳转,同时提供了模块化过程中常见问题的解决办法。例如:完美解决了模块化开发后由于组件内无法获取 Application 生命周期与业务流程,造成每次初始化与关联依赖调用都需要跨模块修改代码的问题。
TheRouter 核心功能具备如下能力:
Navigator:
- 支持
Activity 和 Fragment
- 支持
Path与页面多对一关系或一对一关系,可用于解决多端path统一问题
- 页面
Path支持正则表达式声明
- 支持
json 格式路由表导出
- 支持动态下发
json 路由表,降级任意页面为H5
- 支持任意
object跨模块传递(无需序列化,且能保证对象类型)
- 支持页面跳转拦截处理
- 支持自定义页面参数解析方式(例如将
json解析为对象)
- 支持使用路由跳转到第三方 SDK 中的
Activity(Fragment)
ServiceProvider:
- 支持跨模块依赖注入
- 支持自定义注入项的创建规则,依赖注入可自定义参数
- 支持自定义服务拦截,单模块
mock调试
- 支持注入对象缓存,多次注入 只会new一次对象
FlowTaskExecutor:
- 支持单模块独立初始化
- 支持懒加载初始化
- 独立初始化允许多任务依赖(参考
Gradle Task)
- 支持编译期循环引用检测
- 支持自定义业务初始化时机,可以用于解决隐私合规问题
ActionManager:
- 支持全局回调配置
- 支持优先级响应与中断响应
- 支持记录调用路径,解决调试期观察者模式无法追踪
Observable的问题
与其他路由对比
| 功能 |
TheRouter |
ARouter |
WMRouter |
| Fragment路由 |
✔️ |
✔️ |
✔️ |
| 依赖注入 |
✔️ |
✔️ |
✔️ |
| 加载路由表 |
无运行时扫描 无反射 |
运行时扫描dex(新版本改为反射) 反射实例类 性能损耗大 |
运行时读文件 反射实例类 性能损耗中 |
| 注解正则表达式 |
✔️ |
✖️ |
✔️ |
| Activity指定拦截器 |
✔️(四大拦截器可根据业务定制) |
✖️ |
✔️ |
| 导出路由文档 |
✔️(路由文档支持添加注释描述) |
✔️ |
✖️ |
| 动态注册路由信息 |
✔️ |
✔️ |
✖️ |
| 支持 APT/KAPT 增量编译 |
✔️ |
✔️(开启文档生成则无法增量编译) |
✖️ |
| 支持 KSP 编译 |
✔️ |
✖️ |
✖️ |
| 支持 AGP8 |
✔️ |
Gradle 7.3 以后无法使用 |
Gradle 7.3 以后无法使用 |
| plugin支持增量编译 |
✔️ |
✖️ |
✖️ |
| 多 Path 对应同一页面(低成本实现双端path统一) |
✔️ |
✖️ |
✖️ |
| 远端路由表下发 |
✔️ |
✖️ |
✖️ |
| 支持单模块独立初始化 |
✔️ |
✖️ |
✖️ |
| 支持使用路由打开第三方 SDK 页面 |
✔️ |
✖️ |
✖️ |
| 对热修复支持(例如tinker) |
✔️(未改变的代码多次构建无变动) |
✖️(多次构建apt产物会发生变化,生成无意义补丁) |
✖️(多次构建apt产物会发生变化,生成无意义补丁) |