为什么Android Studio项目中有两个build.gradle文件?

将Eclipse项目导入Android Studio后,我看到两个compileSdkVersion文件:

1 - <PROJECT_ROOT>\build.gradle
2 - <PROJECT_ROOT>\app\build.gradle

第一个版本较短,第二个版本包含compileSdkVersion等的定义。

有两个单独的文件背后的目的是什么? 是否有单独的构建任务?

2个解决方案
63 votes

app\build.gradle特定于app模块。

app\build.gradle是一个&#34;顶级构建文件&#34; 您可以在其中添加所有子项目/模块共有的配置选项。

如果您在项目中使用另一个模块,作为本地库,您将有另一个app\build.gradle文件:<PROJECT_ROOT>\module\build.gradle

例如,在顶级文件中,您可以指定以下常用属性:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
    }
}

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

在您的app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}
Gabriele Mariotti answered 2019-08-13T20:45:18Z
15 votes

从官方文档:

Android Studio项目包含一个顶级项目Gradle构建文件,该文件允许您添加项目中所有应用程序模块通用的配置选项。 每个应用程序模块还有自己的<PROJECT_ROOT>\app\build.gradle文件,用于特定于该模块的构建设置。

enter image description here

项目构建文件

<PROJECT_ROOT>\app\build.gradle或项目构建文件用于整个项目,因此它将用于全局项目配置。典型的项目构建文件包含以下内容:

  • buildscript定义:
    • 存储库和
    • 依赖
  • Gradle插件版本

默认情况下,项目级Gradle文件使用buildscript来定义Gradle存储库和依赖项。 这允许不同的项目使用不同的Gradle版本。 支持的存储库包括JCenter,Maven Central或Ivy。 此示例声明构建脚本使用JCenter存储库和包含Gradle版本1.0.1的Android插件的类路径依赖项工件。


模块构建文件

<PROJECT_ROOT>\app\build.gradle或模块构建文件用于特定模块,因此它将用于特定的模块级配置。模块构建文件包含以下内容:

  • android设置
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig和productFlavors
    • 显示属性,例如applicationId,minSdkVersion,targetSdkVersion和测试信息
  • buildTypes
    • 构建属性,例如debuggable,ProGuard启用,调试签名,版本名称后缀和测试信息
  • 依赖

你可以在这里阅读官方文档:

项目和模块构建设置

SMR answered 2019-08-13T20:47:50Z
translate from https://stackoverflow.com:/questions/23241681/why-are-there-two-build-gradle-files-in-an-android-studio-project