android - Gradle dependencies compile, apk project, compile project,provided,implementation project的区别

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

Gradle依赖之间的区别。

 compile
 apk project 
 compile project
 provided project
 implementation

我的问题是

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

最佳答案

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

依赖配置

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

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

在Android上你可以遇到更多的配置,比如testCompile,它允许你指定一个只用于测试的编译时依赖,比如你想在中使用junit你的测试,那么你会做如下:

testCompile 'junit:junit:4.12'

依赖源

一旦了解了可用的配置,就需要指定一个实际的依赖项。依赖关系可能是内部的或外部的,您可能依赖于您正在使用的另一个库,以及公共(public)可用的库。这是 project 关键字的用武之地,它允许您指定对内部模块或库的依赖关系。通过将依赖项定义为 compile project,您将该模块或库作为传递依赖项添加到您的项目中。

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

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

现在假设 consumerproducer 都以 json 格式存储消息,并且您想使用 google-gson为了这个目的。假设这两个项目都有一些它们依赖的公共(public)源代码,即您的 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项目apk 项目 等等!

关于android - Gradle dependencies compile, apk project, compile project,provided,implementation project的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947897/

相关文章:

android - 首次启动Android Studio时发生Gradle构建错误

java - 压缩机是抽象的;无法实例化

android - Phonegap Android 创建文件如果不存在并写入它

java - Android Studio Java EditText 包含单词

android-studio - 无法使用 Android Studio 从 JNI 打印日志消息

android - 使用 gradle 构建时出现 dexDebug 错误

java - 2个不同依赖问题中的相同接口(interface)

maven - 使用Gradle找不到slf4j LoggerFactory类定义

android - ViewPager Adapter 类中的 Activity 布局元素

android - 我如何访问谷歌日历信息?