首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle包括依赖项的依赖项。

Gradle包括依赖项的依赖项。
EN

Stack Overflow用户
提问于 2017-11-01 17:25:53
回答 2查看 2K关注 0票数 3

场景

我有两个Android库:

  • 图书馆A
  • 图书馆B

库B依赖于库A,并从其build.gradle中包含它。

我的安卓应用程序需要使用B库和A库的一些基类。我在这方面取得的唯一成功就是在我的安卓应用程序的build.gradle中包括两个库,并将传递设置为false。

问题

有没有办法让我只添加B库,并从我的Android应用程序中访问它的依赖项?

Android Studio

代码语言:javascript
复制
Android Studio 3.1 Canary
Build #AI-171.4415322, built on October 24, 2017
JRE: 1.8.0_152-release-1012-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

Gradle

代码语言:javascript
复制
3.1.0-alpha01
EN

回答 2

Stack Overflow用户

发布于 2017-11-01 18:05:44

从评论中可以看出,如果您需要在应用程序中使用库A,并且您的库A包含在使用implementation project(':LibA')B中,那么它将不会传递到您的主应用程序。

您必须使用B ( apiapi project(':LibA') )将其包含进来。

api配置应该用于导出到外部模块的依赖项(传递依赖项)。implementation配置应该用于组件内部的(而不是传递依赖项)的依赖项。

票数 3
EN

Stack Overflow用户

发布于 2017-11-01 17:50:42

这就是所谓的传递依赖。

Gradle和所有其他依赖系统都会自动处理这个问题。如果B需要A,则得到A如果没有A,这意味着B的依赖关系是不正确的。

是否应该在依赖项中显式地调用A是一个有争议的话题。我是你不该去的营地。我的理由是你最终会有这样的结果,

代码语言:javascript
复制
include B(v1.0) -depends on-> A(1.0)
include A(1.1)

现在,A的哪个版本被编译到您的应用程序中并在运行时使用?1.0还是A1.1?答案取决于构建系统的实现。

  • 如果是A1.0,那么您的是针对1.1编译的,但运行是针对1.0的。
  • 如果是1.1,则B是针对1.0编译的,但在运行时使用的是1.1。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47060450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档