问下大佬们,我写了一个 android library a ,这个 a 同时依赖了另一个本地 module b ,我如果直接在别的工程里面本地依赖 a ,那么会丢失 b 的依赖。是不是把 a 推送 jetpack 远程仓库里面,然后远程依赖 a ,是不是就不存在这个问题了。原理是什么呢?
1
wangxiansheng2 2022-09-15 17:44:31 +08:00
这里要分几步确定 a 打包有没有打入 b ,如果没有打入,那么把 b 提交远程库,通过 maven 下载,a 库可以直接
|
2
lidayl 2022-09-15 17:45:10 +08:00
可以在工程里重新依赖一下 b
或者用 embed 的方式把 module b 打进 module a 中 |
3
wangxiansheng2 2022-09-15 17:45:38 +08:00
这里要分几步
1.确定 a 打包有没有打入 b ,如果没有打入,那么把 b 提交远程库,通过 maven 下载,a 库发文件 2.a b 库都提交 maven ,通过导入形式都下载下来 |
4
PrayT OP @wangxiansheng2 你好 正常打 aar 的话 a 是不会打入 b 的话,需要做依赖方式的什么改动 可以在 a 打成 aar 的时候,b 也会打进去呢
|
5
wangxiansheng2 2022-09-15 17:48:56 +08:00
我之前打 aar 包 ,第三方库 都是未打进去的,在新项目的时候 build.gradle 在 implementation 一次原 a 包内的引入的库
|
6
PrayT OP @lidayl b 是本地的 现在是别人的工程 我不可能把 b 的代码拷贝给别人吧 我只能提供 a 编译的 aar 给他;不知道你说的 embed 是什么方式 可以详细点吗
|
7
PrayT OP @wangxiansheng2 我知道你的意思 我这个 a 引入的都是好几个本地的 module lib ,不可能在别的工程里面再拷贝这几个 module lib
|
8
wangxiansheng2 2022-09-15 17:51:32 +08:00
那你可以把 B 封装成一个可导入的库,maven 库你可以了解下,或者 github 搞个私有库,也能下
|
9
xiaojianghu 2022-09-15 17:55:59 +08:00
把 b 打成 aar ,a 引入 b 的 aar ,然后再把 a 打成 aar ,这样不行吗
|
10
ifdef 2022-09-15 18:01:18 +08:00
" 我如果直接在别的工程里面本地依赖 a ,那么会丢失 b 的依赖"
在别的工程里 compileOnly b 一下试试呢 |
11
xFrye 2022-09-15 18:03:54 +08:00
|
12
q503315508 2022-09-15 19:57:38 +08:00
aar 不能直接依赖传递,可以把 a b 都打包,a 中 build.gradle 添加 api (name:'b',ext:'aar') 。b 让他放到任意目录下然后项目添加 repositories {
flatDir { dirs "对应目录" } } |
13
PrayT OP @xFrye 确实这个可以解决 我想问下 按照 google 的标准 正规的思路是啥 我是把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库吗,然后让使用方远程依赖?
|
14
Goooler 2022-09-15 23:17:09 +08:00
api 就好了,如果依赖的是远程仓库的库那就自动传递依赖,如果依赖的是本地的,那就需要把依赖的那个也同时发布到远程仓库
|
15
shily 2022-09-16 10:09:06 +08:00
“按照 google 的标准”,不要使用 aar 依赖,不要发布 aar 依赖。“把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库,然后让使用方远程依赖”是正解。
|
16
zhanlanhuizhang 2022-09-22 11:17:30 +08:00
https://github.com/kezong/fat-aar-android ,用了这个就不需要推远程了。只需要推一个 aar 。
|