build.gradle(Project)和build.gradle(Module)之间的区别


98

我正在尝试将Android异步Http客户端的依赖项添加到我的项目中。因此,项目中有两个build.gradle文件。

在此处输入图片说明

根据我的理解,有不同类型的依赖项:

  1. 在build.gradle(Project:My-app)的根级别上定义的一个
  2. 在build.gradle(Project:My-app)的buildscript中的一个
  3. 另一个是build.gradle(Modules:app)

这个问题是关于buildScript依赖项的存储库,请解释一下前两种类型。

还build.gradle(Project:My-app)说

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

所以我猜应该在build.gradle(Module:app)中添加Android异步Http客户端的依赖项代码。

如果有人可以清楚地说明所有这些内容以便更好地理解,那就太好了。


3
如果是外部图书馆,是的,您应该在自动选择并添加您的图书馆的位置添加 build.gradle(Modules:app)或转到File -> Project Structure -> Modules -> (Choose project you want to add library) -> Dependencies会看到绿色十字符号的位置Module Dependency
hrskrs 2015年

添加到build.gradle(Module:app),给我一个错误,Failed to find: com.loopj.android:android-async-http:1.4.5 为什么它不能直接下载,我也设置了代理。我下载了jar文件,并手动尝试了,但是File Repository..是正确的方法吗。
Anil Bhaskar,2015年

为简单起见,使用Project StructureModules,并选择您的项目。在那里,您将看到一个green cross sign。点击打开New Module窗口。在此处选择导入库。如果您有.jar文件,则在下面选择import .JAR or .AAR package。否则,将jar复制到libs文件夹中并Module:app添加以下依赖项:dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile files('libs/your_jar_file.jar') }
hrskrs 2015年

Answers:


49

build.gradle(Project:My-app)

顶级构建文件,您可以在其中添加所有子项目/模块共有的配置选项。

每个项目都包含一个top-level gradle file。它通常包含common configs所有内容modules。无论其中包括什么top-level gradle,都会影响所有人modules

例如:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha3'

        //Maven plugin
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle(Module:app)

特定模块的构建文件(您在其中添加依赖项,签名配置,构建类型,种类等)

全部modules都有一个特定的gradle文件。无论此gradle文件中包含什么内容,都只会影响其中module包含的内容。

例如:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.hrskrs.gesturefun"
        minSdkVersion 10
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            zipAlignEnabled true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':gesture-fun')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.jakewharton:butterknife:7.0.1'
}

43

这有点令人困惑,因为默认情况下,Android Studio会将两个build.gradle文件都显示为彼此相邻(使用Android视图时)。

在此处输入图片说明

如果切换到项目视图,则可以看到实际的结构以及不同build.gradle文件的位置。

在此处输入图片说明

build.gradle(项目:为MyApplication)文件是在项目的根文件夹及其配置设置应用到项目中的每个模块。模块是较大项目中的一个孤立部分。在多模块项目中,这些模块具有各自的工作,但一起工作就构成了整个项目。大多数Android项目只有一个模块,即app模块。

build.gradle此处的(Module:app)文件位于app文件夹中。其构建设置仅适用于应用程序模块。如果有另一个模块,则该模块也将具有其自己的build.gradle文件。作为一个例子,我做了三个模块库项目:一个库模块,演示应用程序模块,而另一个应用程序模块,我打算使用进行测试。他们每个人都有自己build.gradle可以调整的文件。

在此处输入图片说明

在基本项目中,几乎所有需要编辑的内容都将位于应用程序模块的build.gradle文件中。您可以像这样记住它:

您正在制作一个应用程序,因此转到build.gradle(Module:app)文件。

进一步阅读


1

关于两个gradle文件的关系,hrskrs做出了非常明确的解释,我将对此做一些补充。

如果您的项目只有一个Module(例如app),则top build.gradle(Project:My-app)的优势不会很明显。因为您可以在build.gradle(Module:app)中配置有关模块的所有内容,并且仅在以后几天升级时才修改一个文件。

但是如果您的项目有5个模块,并且碰巧它们具有相同的依赖关系A,如果您不使用top build.gradle(Project:My-app),则接下来的几天需要维护5个文件。

顺便说一句,build.gradle(Module:app)可以覆盖 build.gradle(Project:My-app)

这样的设计可以提高APP的可维护性

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.