【问题标题】:Gradle dependencies difference between compile, apk project, compile project,provided,implementation projectcompile、apk project、compile project、provided、implementation project之间的Gradle依赖区别
【发布时间】:2016-06-27 03:38:03
【问题描述】:

Gradle 之间的依赖区别。

 compile
 apk project 
 compile project
 provided project
 implementation

我的问题是

compile,apk project,compile project,provided project 这里有什么区别?

【问题讨论】:

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


    【解决方案1】:

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

    依赖配置

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

    1. compile:编译依赖在项目的所有类路径中都可用。此外,这些依赖关系会传播到依赖项目。运行时通常需要编译时依赖项。
    2. apk:定义运行时依赖项。在编译时不需要具有此范围的依赖项,但它将用于执行。这意味着您可以在编译时节省时间,并且在项目实际运行时仍然可以使用依赖项。 This 是何时使用 apk 依赖项的一个很好的例子。
    3. provided:表示这个依赖在运行时环境是可用的。因此,此范围仅在编译和测试类路径上可用,并且不可传递。 Android 项目不支持它,但您可以通过定义自己的配置来解决它,如 here 所述。

    你可以在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 projectapk project等等!

    【讨论】:

    • Gradle 使用 configuration 而不是 scope
    • 谢谢@RaGe,你是对的。使用适当的 gradle 词汇更新答案。
    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 2015-07-27
    • 2016-10-15
    • 2016-06-03
    • 2015-10-25
    • 2019-03-21
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多