Por que existem dois arquivos build.gradle em um projeto Android Studio?

102

Depois de importar um projeto Eclipse para o Android Studio, vejo dois build.gradlearquivos:

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

A primeira versão é mais curta, a segunda versão contém definições para compileSdkVersion, etc.

Qual é o propósito de ter dois arquivos separados? Existem tarefas de construção separadas?

Sabuncu
fonte

Respostas:

72

<PROJECT_ROOT>\app\build.gradleé específico para o módulo de app .

<PROJECT_ROOT>\build.gradleé um "arquivo de construção de nível superior" onde você pode adicionar opções de configuração comuns a todos os subprojetos / módulos.

Se você usar outro módulo em seu projeto, como uma biblioteca local, você terá outro build.gradlearquivo: <PROJECT_ROOT>\module\build.gradle

Por exemplo, em seu arquivo de nível superior, você pode especificar estas propriedades comuns:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

Na tua app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}
Gabriele Mariotti
fonte
1 Obrigado, aceitará sua resposta em instantes. A build.gradlepresença do arquivo é obrigatória para acionar uma compilação? Além disso, o arquivo de compilação de nível superior chama arquivos de nível inferior? (Embora não haja nenhuma evidência disso.)
Sabuncu
Os arquivos build.gradle são obrigatórios se você deseja construir um projeto com o gradle. O Android Studio não requer gradle, mas é altamente recomendado. O arquivo de nível superior não chama subarquivos; O gradle trabalha com tarefas, mas é difícil de explicar em um comentário.
Gabriele Mariotti
Muito obrigado Gabriele, isso vai me ajudar a começar.
Sabuncu
1
Especialmente a rootProject.ext.compileSdkVersionconstrução é muito informativa.
Sabuncu
2
É importante fazer o desvio usando ext {...} ou devemos aplicar diretamente o plug-in do Android e a compileSdkVersion ao arquivo de compilação de nível superior?
PhilLab
17

Da documentação oficial:

Os projetos do Android Studio contêm um arquivo de construção Gradle de projeto de nível superior que permite adicionar as opções de configuração comuns a todos os módulos de aplicativo no projeto. Cada módulo de aplicativo também possui seu próprio build.gradlearquivo para configurações de construção específicas para aquele módulo.

insira a descrição da imagem aqui

Arquivo de construção de projeto

<PROJECT_ROOT>\build.gradleou o Arquivo de construção do projeto é para todo o projeto, portanto, será usado para configurações globais do projeto. Um arquivo de construção de projeto típico contém o seguinte:

  • buildscript que define:
    • repositórios e
    • dependências
  • Versão do plugin Gradle

Por padrão, o arquivo Gradle de nível de projeto usa buildscript para definir os repositórios e dependências do Gradle . Isso permite que diferentes projetos usem diferentes versões do Gradle. Os repositórios com suporte incluem JCenter, Maven Central ou Ivy. Este exemplo declara que o script de construção usa o repositório JCenter e um artefato de dependência de caminho de classe que contém o plug-in Android para Gradle versão 1.0.1.


Arquivo de construção de módulo

<PROJECT_ROOT>\app\build.gradleou o Module Build File é para um módulo específico, portanto, será usado para configurações de nível de módulo específicas. Um arquivo de construção de módulo contém o seguinte:

  • configurações do Android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig e productFlavors
    • propriedades de manifesto, como applicationId, minSdkVersion, targetSdkVersion e informações de teste
  • buildTypes
    • propriedades de construção, como depurável, habilitação do ProGuard, assinatura de depuração, sufixo do nome da versão e informações de teste
  • dependências

você pode ler os documentos oficiais aqui:

Configurações de construção de projetos e módulos

SMR
fonte