¿Por qué hay dos archivos build.gradle en un proyecto de Android Studio?

102

Después de haber importado un proyecto de Eclipse en Android Studio, veo dos build.gradlearchivos:

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

La primera versión es más corta, la segunda versión contiene definiciones para compileSdkVersion, etc.

¿Cuál es el propósito de tener dos archivos separados? ¿Hay tareas de construcción independientes?

Sabuncu
fuente

Respuestas:

72

<PROJECT_ROOT>\app\build.gradlees específico para el módulo de la aplicación .

<PROJECT_ROOT>\build.gradlees un "archivo de compilación de nivel superior" donde puede agregar opciones de configuración comunes a todos los subproyectos / módulos.

Si usa otro módulo en su proyecto, como biblioteca local, tendría otro build.gradlearchivo: <PROJECT_ROOT>\module\build.gradle

Por ejemplo, en su archivo de nivel superior puede especificar estas propiedades comunes:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

En tus app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}
Gabriele Mariotti
fuente
+1 Gracias, aceptará tu respuesta momentáneamente. ¿Es build.gradleobligatoria la presencia del archivo para activar una compilación? Además, ¿el archivo de compilación de nivel superior llama a archivos de subnivel? (Aunque no hay evidencia de eso.)
Sabuncu
Los archivos build.gradle son obligatorios si desea crear un proyecto con gradle. Android Studio no requiere gradle, pero es muy recomendable. El archivo de nivel superior no llama a archivos secundarios; gradle trabaja con tareas, pero es difícil de explicar en un comentario.
Gabriele Mariotti
Muchas gracias Gabriele, esto me ayudará a empezar.
Sabuncu
1
Especialmente la rootProject.ext.compileSdkVersionconstrucción es muy informativa.
Sabuncu
2
¿Es importante tomar el desvío usando ext {...} o deberíamos aplicar directamente el complemento de Android y compileSdkVersion al archivo de compilación de nivel superior?
PhilLab
17

De la documentación oficial:

Los proyectos de Android Studio contienen un archivo de compilación de Gradle de proyecto de nivel superior que te permite agregar las opciones de configuración comunes a todos los módulos de la aplicación en el proyecto. Cada módulo de aplicación también tiene su propio build.gradlearchivo para configuraciones de compilación específicas para ese módulo.

ingrese la descripción de la imagen aquí

Archivo de construcción del proyecto

<PROJECT_ROOT>\build.gradleo el archivo de compilación del proyecto es para todo el proyecto, por lo que se utilizará para configuraciones de proyecto globales. Un archivo de compilación de proyecto típico contiene lo siguiente:

  • buildscript que define:
    • repositorios y
    • dependencias
  • Versión del complemento de Gradle

De forma predeterminada, el archivo Gradle a nivel de proyecto usa buildscript para definir los repositorios y dependencias de Gradle . Esto permite que diferentes proyectos utilicen diferentes versiones de Gradle. Los repositorios compatibles incluyen JCenter, Maven Central o Ivy. Este ejemplo declara que la secuencia de comandos de compilación usa el repositorio de JCenter y un artefacto de dependencia de classpath que contiene el complemento de Android para Gradle versión 1.0.1.


Archivo de compilación del módulo

<PROJECT_ROOT>\app\build.gradleo el archivo de compilación del módulo es para un módulo específico, por lo que se utilizará para configuraciones de nivel de módulo específicas. Un archivo de compilación de módulo contiene lo siguiente:

  • configuración de Android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig y productFlavors
    • propiedades de manifiesto como applicationId, minSdkVersion, targetSdkVersion e información de prueba
  • buildTypes
    • construir propiedades como depurable, habilitación de ProGuard, firma de depuración, sufijo de nombre de versión e información de prueba
  • dependencias

puedes leer los documentos oficiales aquí:

Configuración de construcción de proyectos y módulos

SMR
fuente