V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
PrayT
V2EX  ›  Android

关于 aar 包的依赖问题

  •  
  •   PrayT · 2022-09-15 17:25:38 +08:00 · 8952 次点击
    这是一个创建于 798 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    https://github.com/kezong/fat-aar-android
    q503315508
        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 "对应目录"
    }
    }
    PrayT
        13
    PrayT  
    OP
       2022-09-15 20:07:09 +08:00
    @xFrye 确实这个可以解决 我想问下 按照 google 的标准 正规的思路是啥 我是把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库吗,然后让使用方远程依赖?
    Goooler
        14
    Goooler  
       2022-09-15 23:17:09 +08:00
    api 就好了,如果依赖的是远程仓库的库那就自动传递依赖,如果依赖的是本地的,那就需要把依赖的那个也同时发布到远程仓库
    shily
        15
    shily  
       2022-09-16 10:09:06 +08:00
    “按照 google 的标准”,不要使用 aar 依赖,不要发布 aar 依赖。“把我的 lib a 以及把 a 依赖的所有的本地 lib 都推到远程仓库,然后让使用方远程依赖”是正解。
    zhanlanhuizhang
        16
    zhanlanhuizhang  
       2022-09-22 11:17:30 +08:00
    https://github.com/kezong/fat-aar-android ,用了这个就不需要推远程了。只需要推一个 aar 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2880 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:52 · PVG 22:52 · LAX 06:52 · JFK 09:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.