【问题标题】:Create a library with dependencies in android在android中创建一个具有依赖项的库
【发布时间】:2016-09-01 04:00:36
【问题描述】:

我创建了一个库“LibA”,它依赖于许多 3rd 方库,如 RecyclerView、EventBus 等。当我尝试将它作为 aar 包含在另一个项目中时,Library 被成功包含,但依赖项没有出现在 aar 中。

Q1我怎样才能在LibA中包含依赖,这样当其他项目包含这个库时,它就不用担心我的库的内部依赖了。

Q2 gradle 是如何管理库的依赖的,是一次性下载所有的依赖,还是先检查主项目中已经存在的依赖?

Q3当有人包含来自 jcenter 的库时,是否会带来所有的依赖关系?

任何帮助将不胜感激。 :)

【问题讨论】:

    标签: android android-studio gradle dependencies android-gradle-plugin


    【解决方案1】:

    aar 文件不包含嵌套(或transitive)依赖项,并且没有描述库使用的依赖项的 pom 文件。

    这意味着,如果您使用 flatDir 存储库导入 aar 文件,您还必须在项目中指定依赖项。

    Q1 如何在 LibA 中包含依赖项,这样当其他项目包含此库时,它不应该担心我的库的内部依赖项。

    您应该使用 ma​​ven 存储库(您必须在私有或公共 maven 存储库中发布库),您不会遇到同样的问题。
    在这种情况下,gradle 使用 pom 文件下载依赖项,该文件将包含依赖项列表。

    Q2 gradle 是如何管理库的依赖的,是一次性下载所有的依赖,还是先检查主项目中已经存在的依赖?

    Gradle 为您处理依赖项。它不会两次或多次添加相同的依赖项。

    Q3 当有人包含来自 jcenter 的库时,是否会带来所有依赖项?

    如前所述,在这种情况下,依赖项有一个描述所有嵌套依赖项的 pom 文件。 Gradle 会自动下载它。

    【讨论】:

    • 只是术语上的小修正——我认为“嵌套”应该是“传递”
    • @EugenMartynov 是的。在这种情况下,嵌套是可传递的。
    【解决方案2】:

    Q1 如何在 LibA 中包含依赖项,这样当其他项目包含此库时,它不应该担心我的库的内部依赖项。

    你应该使用一些依赖管理器。例如 Maven Central,它有 .pom 文件,它定义了应该使用的所有附加依赖项

    Q2 gradle 是如何管理库的依赖的,是一次性下载所有的依赖,还是先检查主项目中已经存在的依赖?

    gradle 下载所有必要的依赖项。它为依赖关系创建一个图表,尝试解决冲突并下载它们

    Q3 当有人包含来自 jcenter 的库时,是否会带来所有依赖项?

    如果 pom 文件中没有定义其他依赖项,则不会下载它们,只有库

    【讨论】:

      猜你喜欢
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 2017-08-04
      • 1970-01-01
      • 2020-05-18
      相关资源
      最近更新 更多