Gradle依赖关系编译,apk项目,编译项目,提供,实现项目之间的区别

时间:2016-03-11 18:59:09

标签: android android-studio gradle android-gradle build.gradle

Gradle依赖关系之间的区别。

 compile
 apk project 
 compile project
 provided project
 implementation

我的问题是

compileapk projectcompile projectprovided project之间的区别是什么?

1 个答案:

答案 0 :(得分:9)

这里要讨论两个不同的事情:依赖配置和依赖源。

依赖关系配置

配置有助于定义依赖项的传递性,从而消除了必须发现和指定您自己的项目/库所需的库的痛苦,包括它们自动包含它们。 gradle中的配置概念与Maven's scopes的配置非常相似:

  1. compile:编译依赖项在项目的所有类路径中都可用。此外,这些依赖项将传播到依赖项目。运行时通常需要编译时依赖。
  2. apk:定义运行时依赖项。在编译时不需要具有此作用域的依赖项,但它将用于执行。这意味着您可以在编译时节省时间,并在项目实际运行时仍具有依赖性。 This是何时使用apk依赖项的一个很好的例子。
  3. provided:这意味着此依赖项在运行时环境中可用。因此,此范围仅在编译和测试类路径中可用,并且不可传递。 Android项目不支持它,但您可以通过定义here讨论的自己的配置来解决此问题。
  4. 您可以在Android上遇到更多配置,例如testCompile,它允许您指定仅用于测试的编译时依赖项,比如说您想在测试中使用junit,然后你会这样做:

    testCompile 'junit:junit:4.12'
    

    依赖关系来源

    了解可用的配置后,您需要指定实际的依赖关系。依赖关系可能是内部的或外部的,您可能依赖于您正在处理的另一个库,以及公共库。这里是project关键字所在的位置,允许您指定对内部模块或库的依赖关系。通过将依赖项定义为compile project,您将添加该模块或库作为项目的传递依赖项。

    假设您的项目messages包含三个模块(producerconsumershared),项目结构如下所示:

    messages/
        build.gradle
        settings.gradle
        consumer/
            build.gradle
        producer/
            build.gradle
        shared/
            build.gradle
    

    现在假设consumerproducer都以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'
    }
    

    总而言之,它是配置来源的组合,可让您将依赖关系声明为compilecompile project,{ {1}}等等!