Почему в проекте Android Studio есть два файла build.gradle?

После импорта проекта Eclipse в Android Studio я вижу два файла build.gradle:

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

Первая версия короче, вторая версия содержит определения для compileSdkVersion и т.д.

В чем заключается назначение двух отдельных файлов? Существуют ли отдельные задачи сборки?

Ответ 1

<PROJECT_ROOT>\app\build.gradle специфичен для модуля приложения.

<PROJECT_ROOT>\build.gradle является "файлом сборки верхнего уровня" , где вы можете добавить параметры конфигурации, общие для всех подпроектов/модулей.

Если вы используете другой модуль в своем проекте, в качестве локальной библиотеки у вас будет другой файл 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
}

Ответ 2

Из официальной документации:

Проекты Android Studio содержат файл сборки проекта Gradle верхнего уровня, который позволяет добавлять параметры конфигурации, общие для всех модулей приложения в проекте. Каждый модуль приложения также имеет собственный файл build.gradle для настроек сборки, специфичных для этого модуля.

enter image description here

Файл сборки проекта

<PROJECT_ROOT>\build.gradle или Файл сборки проекта для всего проекта, поэтому он будет использоваться для глобальных конфигураций проектов. Типичный файл сборки проекта содержит следующее:

  • buildscript, который определяет:
    • репозитории и
    • зависимостей
  • Gradle Версия плагина

По умолчанию файл Gradle на уровне проекта использует buildscript для определения репозиториев Gradle и зависимостей. Это позволяет различным проектам использовать разные версии Gradle. Поддерживаемые репозитории включают JCenter, Maven Central или Ivy. В этом примере объявляется, что в сборке script используется репозиторий JCenter и артефакт зависимости элемента classpath, который содержит плагин Android для Gradle версии 1.0.1.


Файл сборки модуля

<PROJECT_ROOT>\app\build.gradle или Файл сборки модуля предназначен для специального модуля, поэтому он будет использоваться для определенных конфигураций уровня модуля. Файл сборки модуля содержит следующее:

  • Настройки Android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig и productFlavors
    • проявлять свойства, такие как applicationId, minSdkVersion, targetSdkVersion и тестовые данные
  • buildTypes
    • создавать такие свойства, как отладка, включение ProGuard, подпись отладки, суффикс имени версии и тестовая информация.
  • зависимостей

вы можете прочитать официальные документы здесь:

Настройки сборки проектов и модулей