关于 aar 包的依赖问题

2022-09-15 17:25:38 +08:00
 PrayT

问下大佬们,我写了一个 android library a ,这个 a 同时依赖了另一个本地 module b ,我如果直接在别的工程里面本地依赖 a ,那么会丢失 b 的依赖。是不是把 a 推送 jetpack 远程仓库里面,然后远程依赖 a ,是不是就不存在这个问题了。原理是什么呢?

9006 次点击
所在节点    Android
16 条回复
wangxiansheng2
2022-09-15 17:44:31 +08:00
这里要分几步确定 a 打包有没有打入 b ,如果没有打入,那么把 b 提交远程库,通过 maven 下载,a 库可以直接
lidayl
2022-09-15 17:45:10 +08:00
可以在工程里重新依赖一下 b
或者用 embed 的方式把 module b 打进 module a 中
wangxiansheng2
2022-09-15 17:45:38 +08:00
这里要分几步
1.确定 a 打包有没有打入 b ,如果没有打入,那么把 b 提交远程库,通过 maven 下载,a 库发文件
2.a b 库都提交 maven ,通过导入形式都下载下来
PrayT
2022-09-15 17:46:18 +08:00
@wangxiansheng2 你好 正常打 aar 的话 a 是不会打入 b 的话,需要做依赖方式的什么改动 可以在 a 打成 aar 的时候,b 也会打进去呢
wangxiansheng2
2022-09-15 17:48:56 +08:00
我之前打 aar 包 ,第三方库 都是未打进去的,在新项目的时候 build.gradle 在 implementation 一次原 a 包内的引入的库
PrayT
2022-09-15 17:50:13 +08:00
@lidayl b 是本地的 现在是别人的工程 我不可能把 b 的代码拷贝给别人吧 我只能提供 a 编译的 aar 给他;不知道你说的 embed 是什么方式 可以详细点吗
PrayT
2022-09-15 17:51:31 +08:00
@wangxiansheng2 我知道你的意思 我这个 a 引入的都是好几个本地的 module lib ,不可能在别的工程里面再拷贝这几个 module lib
wangxiansheng2
2022-09-15 17:51:32 +08:00
那你可以把 B 封装成一个可导入的库,maven 库你可以了解下,或者 github 搞个私有库,也能下
xiaojianghu
2022-09-15 17:55:59 +08:00
把 b 打成 aar ,a 引入 b 的 aar ,然后再把 a 打成 aar ,这样不行吗
ifdef
2022-09-15 18:01:18 +08:00
" 我如果直接在别的工程里面本地依赖 a ,那么会丢失 b 的依赖"

在别的工程里 compileOnly b 一下试试呢
xFrye
2022-09-15 18:03:54 +08:00
我猜这个是你想要的工具

https://github.com/kezong/fat-aar-android
q503315508
2022-09-15 19:57:38 +08:00
aar 不能直接依赖传递,可以把 a b 都打包,a 中 build.gradle 添加 api (name:'b',ext:'aar') 。b 让他放到任意目录下然后项目添加 repositories {
flatDir {
dirs "对应目录"
}
}
PrayT
2022-09-15 20:07:09 +08:00
@xFrye 确实这个可以解决 我想问下 按照 google 的标准 正规的思路是啥 我是把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库吗,然后让使用方远程依赖?
Goooler
2022-09-15 23:17:09 +08:00
api 就好了,如果依赖的是远程仓库的库那就自动传递依赖,如果依赖的是本地的,那就需要把依赖的那个也同时发布到远程仓库
shily
2022-09-16 10:09:06 +08:00
“按照 google 的标准”,不要使用 aar 依赖,不要发布 aar 依赖。“把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库,然后让使用方远程依赖”是正解。
zhanlanhuizhang
2022-09-22 11:17:30 +08:00
https://github.com/kezong/fat-aar-android ,用了这个就不需要推远程了。只需要推一个 aar 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/880318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX