方案
我有两个Android库:
库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
答案 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?答案取决于构建系统的实现。
答案 1 :(得分:0)
如果您需要在应用中使用库 A ,并且 B 中包含 A 库,请发表评论使用implementation project(':LibA')
,它不会成为您的主应用的传递。
您必须使用api
,api project(':LibA')
将其包含在 B 中。
api
配置应该用于导出到外部模块的依赖项(传递依赖项)。副Versa implementation
配置应该用于组件内部的依赖(不是传递依赖)。