Arouter 源码解析(一)

先看看官方对于这个库的定义和目的,简单明了,就一句话:
在这里插入图片描述

1.Arouter 的结构
模块 说明
app 示例app模块
module-java java示例组件模块
module-java-export java实例模块的服务数据模块,定义了一个示例的IProvider 服务接口和一些实体类
module-kotlin kotlin示例组件模块
arouter-annotation 注解类以及相关数据实体类
arouter-api 主要api模块,提供ARouter类等路由方法
arouter-compiler 处理注解,生成相关代码
arouter-gradle-plugin gradle插件,jar包中添加自动注册代码,减少扫描dex文件开销
arouter-idea-plugin idea插件,添加ARouter.build(path) 代码行标记,并点击跳转到代码定义
如果早知道有这个跳转的插件,就方便一些。藏在源码里,但回跳的好像不起作用,还不清楚原因。
2. 接下来分析一下Arouter init过程,这个过程,要拿到类的信息,怎么拿,用什么策略,用了什么技术:
会 registerByPlugin = false 然后优先用插件加载,
在这里插入图片描述圈中的注意是通过javapoet来插入代码的,大概插入后的效果就是注释中的内容。
在这里插入图片描述加载成功,修改这个值,在这里插入图片描述
在这里插入图片描述,加载失败,就才用实时加载的,代码如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述不论是用插件,还是实时扫描整个类,它们殊途同归loadInto(Warehouse.groupsIndex);
收集到key和class
在这里插入图片描述这就是大概的逻辑,然后我们看看其中用的技术或者说知识点:
pms的知识
在这里插入图片描述在这里插入图片描述在这里插入图片描述
异步转同步CountDownLatch
在这里插入图片描述
在这里插入图片描述
待续。。。

猜你喜欢

转载自blog.csdn.net/u012553125/article/details/124795189