在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 中包含依赖项,这样当其他项目包含此库时,它不应该担心我的库的内部依赖项。
您应该使用 maven 存储库(您必须在私有或公共 maven 存储库中发布库),您不会遇到同样的问题。 在这种情况下,gradle 使用 pom 文件下载依赖项,该文件将包含依赖项列表。
Q2 gradle 是如何管理库的依赖的,是一次性下载所有的依赖,还是先检查主项目中已经存在的依赖?
Gradle 为您处理依赖项。它不会两次或多次添加相同的依赖项。
Q3 当有人包含来自 jcenter 的库时,是否会带来所有依赖项?
如前所述,在这种情况下,依赖项有一个描述所有嵌套依赖项的 pom 文件。 Gradle 会自动下载它。
【讨论】:
只是术语上的小修正——我认为“嵌套”应该是“传递” @EugenMartynov 是的。在这种情况下,嵌套是可传递的。【参考方案2】:Q1 如何在 LibA 中包含依赖项,这样当其他项目包含此库时,它不应该担心我的库的内部依赖项。
你应该使用一些依赖管理器。例如 Maven Central,它有 .pom
文件,它定义了应该使用的所有附加依赖项
Q2 gradle 是如何管理库的依赖的,是一次性下载所有的依赖,还是先检查主项目中已经存在的依赖?
gradle
下载所有必要的依赖项。它为依赖关系创建一个图表,尝试解决冲突并下载它们
Q3 当有人包含来自 jcenter 的库时,是否会带来所有依赖项?
如果 pom 文件中没有定义其他依赖项,则不会下载它们,只有库
【讨论】:
以上是关于在android中创建一个具有依赖项的库的主要内容,如果未能解决你的问题,请参考以下文章
如何将依赖于 Styled Components 的 React 组件库提供给另一个也具有 Styled Comopnents 依赖项的库?