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

103

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

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

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

Для чего нужны два отдельных файла? Есть ли отдельные задачи сборки?

Sabuncu
источник

Ответы:

72

<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
}
Габриэле Мариотти
источник
+1 Спасибо, приму ваш ответ моментально. Является ли build.gradleналичие файла обязательным для запуска сборки? Кроме того, вызывает ли файл сборки верхнего уровня файлы подуровня? (Хотя этому нет никаких доказательств.)
Sabuncu
Файлы build.gradle являются обязательными, если вы хотите создать проект с помощью gradle. Android Studio не требует Gradle, но настоятельно рекомендуется. Файл верхнего уровня не вызывает подфайлы; gradle работает с задачами, но это сложно объяснить в комментарии.
Габриэле Мариотти
Большое спасибо, Габриэле, это поможет мне начать.
Sabuncu
1
Тем более rootProject.ext.compileSdkVersionконструкция очень информативна.
Sabuncu
2
Важно ли использовать ext {...} в обход, или мы должны напрямую применить плагин android и compileSdkVersion к файлу сборки верхнего уровня?
PhilLab
17

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

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

введите описание изображения здесь

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

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

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

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


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

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

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

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

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

SMR
источник