El propósito del archivo build.gradle
I. Introducción al sistema de compilación Gradle
Android Studio utiliza Gradle para compilar proyectos. Gradle es una herramienta de compilación muy avanzada que usa un lenguaje específico del dominio (DSL) basado en Groovy para declarar la configuración del proyecto, en lugar del tradicional XML.
Un proyecto HelloWorld tiene dos archivos
build.gradle: uno externo (a nivel de proyecto) y uno interno (a nivel de módulo).
II. build.gradle externo (a nivel de proyecto)
Ruta: Directorio raíz del proyecto/build.gradle
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// NOTA: No coloques las dependencias de tu aplicación aquí; pertenecen
// en los archivos build.gradle de cada módulo
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}Lenguaje del código: JavaScript (javascript)
Análisis de configuraciones clave
| Elemento de configuración | Descripción |
|---|---|
jcenter() | Declara el uso del repositorio de alojamiento de código JCenter. Muchos proyectos Android de código abierto están alojados en JCenter; al declararlo, puedes hacer referencia a estas bibliotecas directamente. |
google() | Declara el uso del repositorio Maven de Google para obtener bibliotecas oficiales como Android Support Library y Constraint Layout. |
classpath 'com.android.tools.build:gradle:3.1.2' | Declara el plugin de Android para Gradle. Gradle puede compilar proyectos Java, C++, etc., pero para proyectos Android se requiere este plugin. |
allprojects | Configura de forma unificada las direcciones de los repositorios para todos los módulos (incluidos los submódulos). |
task clean | Define una tarea de limpieza que, al ejecutarse, elimina todo el directorio build del proyecto. |
El archivo
build.gradleexterno raramente necesita modificarse, a menos que necesites agregar repositorios globales o actualizar la versión del plugin de Gradle.
III. build.gradle interno (a nivel de módulo / directorio app)
Ruta: app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}Lenguaje del código: PHP (php)
A continuación, desglosamos cada parte.
IV. apply plugin — Declaración del plugin
apply plugin: 'com.android.application'Lenguaje del código: JavaScript (javascript)
| Valor | Significado |
|---|---|
com.android.application | Módulo de aplicación, se puede ejecutar directamente. |
com.android.library | Módulo de biblioteca, no se puede ejecutar de forma independiente y está disponible para que otros módulos dependan de él. |
Esta es la configuración clave que distingue si un módulo es una «App» o una «Library».
V. Bloque android — Configuración principal de compilación
1. Versión de compilación y herramientas de compilación
compileSdkVersion 27
buildToolsVersion "27.0.3"Lenguaje del código: CSS (css)
| Configuración | Descripción |
|---|---|
compileSdkVersion | Especifica qué versión del SDK de Android se utilizará para compilar el proyecto. 27 corresponde a Android 8.1. |
buildToolsVersion | Número de versión de las herramientas de compilación; Android Studio notificará si hay una versión más reciente. |
2. defaultConfig — Configuración predeterminada
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Lenguaje del código: JavaScript (javascript)
| Propiedad | Descripción |
|---|---|
applicationId | El nombre de paquete único de la aplicación, que sirve como identificador único (por ejemplo, para Google Play). |
minSdkVersion | Versión mínima de Android compatible; 14 corresponde a Android 4.0. |
targetSdkVersion | Indica que la aplicación se ha probado exhaustivamente en esa versión. El sistema habilitará las nuevas funciones en consecuencia (por ejemplo, el modo multiventana en 7.0). |
versionCode | Número de versión, un entero que las tiendas de aplicaciones usan para determinar las actualizaciones. |
versionName | Nombre de versión, una cadena visible para el usuario. |
testInstrumentationRunner | Especifica el ejecutor para pruebas automatizadas de Android. |
3. buildTypes — Tipos de compilación
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}Lenguaje del código: JavaScript (javascript)
| Configuración | Descripción |
|---|---|
debug | Configuración de la versión de prueba (se puede omitir, tiene valores predeterminados). |
release | Configuración de la versión de lanzamiento. |
minifyEnabled | Indica si se debe habilitar la ofuscación de código. false = sin ofuscación, true = ofuscar. |
proguardFiles | Especifica los archivos de reglas de ofuscación: • Primero: reglas generales del directorio del SDK. • Segundo: proguard-rules.pro, donde se pueden escribir reglas específicas del proyecto. |
Por defecto, Android Studio ejecuta la versión debug; más adelante se explicará cómo generar una versión de lanzamiento.
VI. dependencies — Gestión de dependencias
Esta es la sección más modificada, utilizada para declarar todas las bibliotecas de las que depende el proyecto.
Tres tipos de dependencias
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Dependencia local | Depende de archivos jar o directorios locales | compile fileTree(dir: 'libs', include: ['*.jar']) |
| Dependencia de biblioteca | Depende de un módulo de biblioteca en el proyecto | compile project(':library') |
| Dependencia remota | Depende de bibliotecas de código abierto en repositorios JCenter/Google | compile 'com.android.support:appcompat-v7:27.+' |
Análisis línea por línea
// Dependencia local: agrega todos los archivos .jar del directorio libs a la ruta de compilación
compile fileTree(dir: 'libs', include: ['*.jar'])Lenguaje del código: PHP (php)
// Dependencia remota: biblioteca de compatibilidad AppCompat
// Formato: dominio:grupo:versión
compile 'com.android.support:appcompat-v7:27.+'Lenguaje del código: JavaScript (javascript)
// Dependencia remota: biblioteca de diseño ConstraintLayout
compile 'com.android.support.constraint:constraint-layout:1.0.2'Lenguaje del código: JavaScript (javascript)
// Dependencia de prueba: JUnit para pruebas unitarias
testCompile 'junit:junit:4.12'Lenguaje del código: JavaScript (javascript)
// Dependencia de prueba de Android: Espresso para pruebas de UI
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})Lenguaje del código: JavaScript (javascript)
Flujo de trabajo de dependencias remotas: Gradle primero verifica si la biblioteca está en caché localmente → si es así, la usa → si no, la descarga automáticamente → luego la agrega a la ruta de compilación.
VII. Resumen comparativo
| Archivo | Propósito | Frecuencia de modificación |
|---|---|---|
build.gradle externo | Configuración global de repositorios, versión del plugin Gradle | Raramente modificado |
app/build.gradle interno | Configuración de compilación del módulo, gestión de dependencias | Frecuentemente modificado |
| Configuración principal | Atributos clave | |
| ——— | ——— | |
apply plugin | Distinción entre application / library | |
compileSdkVersion | Versión del SDK de compilación | |
applicationId | Identificador único de la aplicación | |
minSdkVersion | Versión mínima compatible | |
targetSdkVersion | Versión objetivo de prueba | |
buildTypes | Configuración de compilación debug / release | |
dependencies | Dependencias locales / remotas / de biblioteca |
build.gradle