android 手写-组件化与ARouter框架(2.0)!!

1,880 阅读2分钟

最近在学习APT技术,写了一个非常火的路由框架ARouter 来看看代码思路吧!!底部有完整代码哦!

我的环境

  • 硬件: mac
  • gradle: 6.5-bin
  • as版本gradle:4.1.3

项目结构:

在这里插入图片描述

同一个颜色表示同一“等级”

组件化特性:

  • 在测试环境下,各个模块独立,可以单独运行
  • 在正式环境下,可以调用到各个模块的代码!

ARouter特性:

可以使单独模块互相不依赖并且可以实现通信!

例如 my 模块和find模块并没有相互的依赖,使用ARouter框架就可以互相调用

ARouter原理:

在编译期间采用了APT技术,配合javaPoet 让项目中所有的Activity生成对应的文件,将文件保存到hashMap<String,Class>中,通过key来获取到Class,获取到class就话就可以随意跳转了

  • APT:注解处理技术,在编译器生成
  • javaPost: 可以生成java文件

ARouter原理辅助图: 在这里插入图片描述 my模块去util_lib, 然后util_lib去找arouter_api,找到find在表(hashMap)中注册的代码,最后找到class完成跳转

arouter_api 看命名就知道 是ARouter对外暴露的api,提供开发者来使用的!

场景:my模块需要调用find模块Activity:

来看看生成的文件:在这里插入图片描述

项目介绍

  • isRelease = true 正式环境下 各个独立模块不准运行! 在这里插入图片描述
  • isRelease = false 在这里插入图片描述

路由跳转并携带参数使用:

在这里插入图片描述 在app壳之内跳转,和模块之间跳转使用是一样的!

共享图片

需求: first_page 有一张1MB的图片, find需要使用 为了节省开销,必须访问,并且禁止横向依赖

辅助图: 在这里插入图片描述

使用:

  • 实现ARouterDrawable 接口 重写getDrawable()方法 将需要暴露的图片返回
  • 添加ARouter注解
  • 接收图片端 添加@Parameter

记得设置ParameterManager!

辅助图:

在这里插入图片描述 简单原理分析: 在这里插入图片描述

效果图:

共享Bean类

需求:

find模块写了一个Bean类,很重要,app要使用一下!

注意: app集成了find模块,所以能直接使用到find模块中的类,这里只是举例子!

只要对外暴露,所有模块中都可以使用到! 在这里插入图片描述 使用和对外暴露图片一样!

共享方法

需求: find中有一个请求网络图片的框架写的特别好,first_page 需要调用find中的网络请求框架,将路径传递给find,并且最终find返回图片请求结果给first_page!

使用:

  • 1.在find中对外暴露请求网络图片框架! 并且实现ARouterMethod方法,重写getMethod()进行网络请求
  • 2.在first_page 中添加注解,传递图片路径,进行异步请求,
  • 设置图片

在这里插入图片描述 效果图:


代码细节请 star 查看!!

// true ARouter与组件化 // flase 只有组件化的代码 private static final Boolean isARouter = true

if(isARouter) ARouter与组件化完整代码 else 组件化完整代码

原创不易,您的点赞就是对我最大的支持!