这里有两个不同的事情要讨论:依赖配置和依赖源。
依赖配置
配置有助于定义依赖项的传递性,从而消除了必须发现和指定您自己的项目/库所需的库的痛苦,包括自动包含它们。 gradle 中的这种配置概念与Maven's scopes 非常相似:
-
compile:编译依赖在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。运行时通常需要编译时依赖项。
-
apk:定义运行时依赖项。在编译时不需要具有此范围的依赖项,但它将用于执行。这意味着您可以在编译时节省时间,并且在项目实际运行时仍然可以使用依赖项。 This 是何时使用 apk 依赖项的一个很好的例子。
-
provided:表示这个依赖在运行时环境是可用的。因此,此范围仅在编译和测试类路径上可用,并且不可传递。 Android 项目不支持它,但您可以通过定义自己的配置来解决它,如 here 所述。
你可以在Android上遇到更多的配置,比如testCompile,它允许你指定一个编译时依赖,它只会用于测试,比如说你想在你的测试中使用junit,那么你会做如下:
testCompile 'junit:junit:4.12'
依赖源
一旦您了解了可供您使用的配置,您就需要指定一个实际的依赖项。依赖关系可能是内部的或外部的,您可能依赖于您正在处理的另一个库,以及公共可用的库。这是project 关键字出现的地方,允许您指定对内部模块或库的依赖关系。通过将依赖项定义为compile project,您将该模块或库作为传递依赖项添加到您的项目中。
假设您有一个项目messages,其中包含三个模块(producer、consumer 和shared),项目结构如下所示:
messages/
build.gradle
settings.gradle
consumer/
build.gradle
producer/
build.gradle
shared/
build.gradle
现在假设 consumer 和 producer 都以 json 格式存储消息,并且您想为此目的使用 google-gson。假设这两个项目都有一些它们依赖的公共源代码,即您的shared 模块。然后consumer 的 build.gradle 可以定义以下依赖项:
dependencies {
// Internal dependency to project shared
compile project (':shared')
// External dependency to publicly available library,
// through public repositories such as jcenter() or mavencentral()
compile 'com.google.code.gson:gson:1.7.2'
}
总而言之,配置和来源的组合使您能够将依赖关系声明为compile、compile project、apk project等等!