在android中创建一个具有依赖项的库

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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 文件中没有定义其他依赖项,则不会下载它们,只有库

【讨论】:

以上是关于在android中创建一个具有依赖项的库的主要内容,如果未能解决你的问题,请参考以下文章

链接具有不兼容依赖项的库

Android:如何创建一个没有冲突依赖的库

如何将依赖于 Styled Components 的 React 组件库提供给另一个也具有 Styled Comopnents 依赖项的库?

创建一个包含所有颤振库和依赖项的 aar

为从姜饼开始的所有 android 版本在 android 中创建全屏活动

无法安装具有 C 依赖项的 Python 库