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

Ani*_*kar 87 android android-studio build.gradle

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

在此输入图像描述

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

  1. 在build.gradle的根级别定义的一个(Project:My-app)
  2. 一个在build.gradle的构建脚本中(Project:My-app)
  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
Run Code Online (Sandbox Code Playgroud)

所以我想Android Asynchronous Http Client的依赖代码应该在build.gradle(Module:app)中添加.

如果有人能够清楚地了解所有这些以便更好地理解,那就太棒了.

hrs*_*krs 39

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
}
Run Code Online (Sandbox Code Playgroud)

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'
}
Run Code Online (Sandbox Code Playgroud)


Sur*_*gch 36

这有点令人困惑,因为Android Studio默认显示两个build.gradle文件紧挨着(使用Android视图时).

在此输入图像描述

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

在此输入图像描述

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

这里的build.gradle(Module:app)文件位于该app文件夹中.其构建设置仅适用于app模块.如果有另一个模块,那么该模块也将拥有自己的build.gradle文件.作为一个例子,我创建了一个包含三个模块的库项目:库模块,演示应用程序模块和我计划用于测试的另一个应用程序模块.他们每个人都有自己的build.gradle文件,我可以调整.

在此输入图像描述

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

你正在创建一个应用程序,所以转到build.gradle(Module:app)文件.

进一步阅读


小智 5

gradle关于这两个文件的关系, hrskrs已经解释得很清楚了\xef\xbc\x8can,我会做一些补充。

\n

如果你的项目只有一个Module(比如app ),那么最上面的build.gradle(Project:My-app)的优势就表现的不是很明显。因为你可以在build.gradle(Module:app)中配置关于Module的所有内容,并且以后升级时只修改一个文件。

\n

但是如果你的项目有五个模块,并且恰好它们有相同的依赖A,如果你不\xe2\x80\x99t使用顶层的build.gradle (项目:My-app)你需要维护以下五个文件天。

\n

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

\n

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

\n


归档时间:

查看次数:

39874 次

最近记录:

7 年,6 月 前