先看看官方对于这个库的定义和目的,简单明了,就一句话:
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 待续。。。
|