服务化在安卓中的实现

### 需求背景
1. 项目工程组件化
随着业务越来越多、越来越繁杂,项目工程模块化、组件化是一条必经之路。把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护
2. 组件间的通信、解耦
组件化之后那么接踵而来的问题就是组件之间如何通信呢?如果是页面间跳转,那么我们就需要开发一套路由框架;但是如果我们在组件1中需要调用组件2的某个功能又该如何实现呢?现在主流的做法就是将这些需要被跨组件调用的功能做成服务化
### 现有第三方库的弊端
目前能实现路由功能+服务化功能框架市面上也很多,比较流行的就是阿里出品的ARouter,但是ARouter也未必是尽善尽美的,在我实际使用过程中,总结了有三个弊端:
1. 只支持至少两段路径(path="/test/Activity")
2. app启动时初始化服务,可能存在性能问题,当然这个问题应该没有那么严重尤其是服务少的时候
3. 每个页面只能支持一个path,如果出现两个协议跳转同一页面,ARouter当前版本就实现不了
### 设计思路
因此我们就想到可以基于ARouter实现一个更轻量级的服务化框架。简单列了一下我们需要实现如下功能:
1. 服务管理
1. 注册服务
2. find服务
3. 标记是否是一个需要被缓存的服务
2. 减少代码量以及重复劳动
1. 注解
2. gradle插件
3. ASM(一个Java字节码操纵框架)
### 具体实现
1. 注解
服务化在安卓中的实现
文章图片
注解核心代码 2. gradle插件
服务化在安卓中的实现
文章图片
插件核心代码 3. ASM
服务化在安卓中的实现
文章图片
ASM核心代码 ### TODO list
1. 自定义路由框架
### 踩过的坑
1. Android library通过插件形式依赖 会出现r文件找不到的错误
【服务化在安卓中的实现】2. kapt使用对注解处理器的影响

    推荐阅读