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


103

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

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

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

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


Ответы:


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, подпись отладки, суффикс имени версии и тестовая информация
  • зависимости

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.