一、起源
- 由于业务的增长提高了项目的复杂性,为了更好的适应团队开发,提高开发效率,实行组件化乃大势所趋。
- 组件化可以让我们程序更容易的扩展、更方便的维护,更快捷的同步开发与更简单的单元调试。
- 但是由于各个组件在不同的model甚至在不同的项目中,这样他们之间的通信就成了问题,而
ARouter
的出现就是让组件间、模块间是实现完全的独立。 - 并且后台还可以通过路由的机制控制Android界面调用实现远程控制和高度解耦。
二、是什么?
一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
三、功能介绍
- 支持直接解析标准URL进行跳转,并自动注入参数到目标页面中
- 支持多模块工程使用
- 支持添加多个拦截器,自定义拦截顺序
- 支持依赖注入,可单独作为依赖注入框架使用
- 支持InstantRun
- 支持MultiDex(Google方案)
- 映射关系按组分类、多级管理,按需初始化
- 支持用户指定全局降级与局部降级策略
- 页面、拦截器、服务等组件均自动注册到框架
- 支持多种方式配置转场动画
- 支持获取Fragment
- 完全支持Kotlin以及混编
- 支持第三方 App 加固(使用 arouter-register 实现自动注册)
- 支持生成路由文档
- 提供 IDE 插件便捷的关联路径和目标类
四、原理解析
1、调用关系
- 两个界面之间的跳转,调用关系如下:
- 注册:B界面先在ARouter里注册一个唯一标识;
- 查询:A界面调用时,ARouter会先查询B界面是否已注册;
- 整合:ARouter查询到B界面后,会将A界面传入信息进行整合;
- 调用:整合好信息后,会调起B界面并将传入信息传递到B界面。
2、流程解析
- 界面跳转,arouter做了以下工作:
五、原理解析
- 从外部URL映射到内部页面,以及参数传递与解析
- 跨模块页面跳转,模块间解耦
- 拦截跳转过程,处理登陆、埋点等逻辑
- 跨模块API调用,通过控制反转来做组件解耦
六、基础功能
1.添加依赖和配置
android {
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
}
dependencies {
// 替换成最新版本, 需要注意的是api
// 要与compiler匹配使用,均使用最新版可以保证兼容
compile 'com.alibaba:arouter-api:x.x.x'
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x