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

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

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

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

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

<PROJECT_ROOT>\app\build.gradle是特定于应用程序模块的

<PROJECT_ROOT>\build.gradle是一个“顶级构build文件” ,您可以在其中添加对所有子项目/模块通用的configuration选项。

如果你在你的项目中使用另一个模块,作为一个本地库你可能会有另一个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 } 

从官方文档:

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

在这里输入图像描述

项目构build文件

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

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

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


模块构build文件

<PROJECT_ROOT>\app\build.gradle模块构build文件是为特定的模块,所以它将用于特定的模块级configuration。 模块构build文件包含以下内容:

  • android设置
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig和productFlavors
    • 清单属性,如applicationId,minSdkVersion,targetSdkVersion和testing信息
  • buildTypes
    • 构build诸如可debugging,ProGuard启用,debugging签名,版本名称后缀和testing信息等属性
  • 依赖

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

项目和模块构build设置