目录

maven publish dependency

​今天 pull 工程,发现有个库的源码看不到,在 gradle external libraries 中也找不到,只能找到一个 api 接口层的代码

于是,就研究了一下原因

pom 文件

我们在向 maven 发布 aar 时,会生成对应的 pom 文件,告诉我们具体依赖哪些额外 lib

android 工程中,我们使用 gradle 作为编译脚本

implementation lib 和 api lib,默认会使得 pom 文件产生差别,dependency scope 分别为 runtime 和 compile

runtime 表示运行时依赖,所以在 external libraries 中不可见,而 compile 表示编译时依赖,所以我们 sync gradle 后就可见

举个例子,我们发布 liba,liba implementation libb。首先, liba 的 aar 只包含工程本身的代码,其次其 pom 对于 libb 为 runtime 的依赖。所以,当我们在工程中引入liba 时,external libraries 中只有 liba aar 而没有 libb。改为 liba api libb 则可见

为什么要这么做

目前唯一觉得可能得原因是做代码隔离

较大的工程都有组件化问题,某 sdk 只会暴露一个 api 接口层给其他方依赖,而不会让其直接使用 api-impl 模块

sdk 只会保证 api 接口层的兼容,而内部的具体实现可能会发生很大变化,这是十分常见的

然后 api-impl 通过注解实现在编译期间注册 api 接口的实现类,进而实现了仅仅依赖 api 层就可以最终成功调用 api-impl 的代码

引申

宏编程 和 注解处理器,有什么优劣么?