Gradle包含依赖项的依赖项

时间:2017-11-01 17:25:53

标签: android android-studio gradle android-gradle

方案

我有两个Android库:

  • 图书馆A
  • 图书馆B

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

我的Android应用程序需要使用库B和库A中的一些基类。我这样做的唯一成功是在我的Android应用程序的build.gradle中包含这两个库并设置传递到假的。

问题

我有没有办法只添加库B并可以从我的Android应用程序访问其依赖项?

Android Studio

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

摇篮

3.1.0-alpha01

2 个答案:

答案 0 :(得分:1)

这称为传递依赖。

Gradle,以及所有其他依赖系统自动处理此问题。如果B需要A,你得到A.如果你没有得到A,那就意味着B的依赖关系不正确。

是否应该在依赖项中明确地调用A是一个有争议的话题。我是你不应该的营地。我的理由是你最终会得到类似的东西,

include B(v1.0) -depends on-> A(1.0)
include A(1.1)

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

  • 如果它是A 1.0,那么正在针对1.1进行编译,但是针对1.0运行。
  • 如果是1.1,那么 B 是针对1.0编译的,但在运行时使用1.1。

答案 1 :(得分:0)

如果您需要在应用中使用库 A ,并且 B 中包含 A 库,请发表评论使用implementation project(':LibA'),它不会成为您的主应用的传递。

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

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