Le rôle du fichier build.gradle
I. Introduction au système de build Gradle
Android Studio utilise Gradle pour construire les projets. Gradle est un outil de build très avancé qui utilise un langage spécifique à un domaine (DSL) basé sur Groovy pour déclarer les paramètres du projet, plutôt que le traditionnel XML.
Un projet HelloWorld contient deux fichiers
build.gradle: un à l’extérieur (niveau projet) et un à l’intérieur (niveau module).
II. build.gradle externe (niveau projet)
Chemin : Répertoire racine du projet/build.gradle
buildscript {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
// NOTE : Ne placez pas les dépendances de votre application ici ; elles doivent
// se trouver dans les fichiers build.gradle de chaque module
}
}
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}Langage du code : JavaScript (javascript)
Analyse des configurations clés
| Élément de configuration | Description |
|---|---|
jcenter() | Déclare l’utilisation du dépôt d’hébergement de code JCenter. De nombreux projets Android open-source y sont hébergés ; une fois déclaré, vous pouvez y faire référence directement. |
google() | Déclare l’utilisation du dépôt Maven de Google pour obtenir les bibliothèques officielles comme Android Support Library et Constraint Layout. |
classpath 'com.android.tools.build:gradle:3.1.2' | Déclare le plugin Android pour Gradle. Gradle peut construire des projets Java, C++, etc., mais le plugin est nécessaire pour les projets Android. |
allprojects | Configure de manière unifiée les adresses des dépôts pour tous les modules (y compris les sous-modules). |
task clean | Définit une tâche de nettoyage qui supprime tout le répertoire build du projet lors de son exécution. |
Le fichier
build.gradleexterne ne nécessite généralement aucune modification, sauf si vous devez ajouter des dépôts globaux ou mettre à jour la version du plugin Gradle.
III. build.gradle interne (niveau module / répertoire app)
Chemin : 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'
}Langage du code : PHP (php)
Chaque section est détaillée ci-dessous.
IV. apply plugin — Déclaration du plugin
apply plugin: 'com.android.application'Langage du code : JavaScript (javascript)
| Valeur | Signification |
|---|---|
com.android.application | Module application, peut être exécuté directement. |
com.android.library | Module bibliothèque, ne peut pas être exécuté seul, destiné à être appelé par d’autres modules. |
C’est la configuration clé qui distingue un module « App » d’une « Library ».
V. Bloc android — Configuration de build principale
1. Version de compilation et outils de build
compileSdkVersion 27
buildToolsVersion "27.0.3"Langage du code : CSS (css)
| Configuration | Description |
|---|---|
compileSdkVersion | Spécifie la version du SDK Android utilisée pour compiler le projet. 27 correspond à Android 8.1. |
buildToolsVersion | Numéro de version des outils de build ; Android Studio invite à mettre à jour en cas de nouvelle version. |
2. defaultConfig — Configuration par défaut
defaultConfig {
applicationId "com.foxdevelop.www.myapplication"
minSdkVersion 14
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}Langage du code : JavaScript (javascript)
| Propriété | Description |
|---|---|
applicationId | Nom de package unique de l’application, utilisé comme identifiant unique (pour Google Play par exemple). |
minSdkVersion | Version minimale d’Android supportée ; 14 correspond à Android 4.0. |
targetSdkVersion | Indique que l’application a été entièrement testée sur cette version. Le système active les nouvelles fonctionnalités en conséquence (ex: mode multi-fenêtres sur 7.0). |
versionCode | Numéro de version, un entier utilisé par les stores pour déterminer les mises à jour. |
versionName | Nom de version, une chaîne visible par l’utilisateur. |
testInstrumentationRunner | Spécifie le runner pour les tests automatisés Android. |
3. buildTypes — Types de build
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}Langage du code : JavaScript (javascript)
| Configuration | Description |
|---|---|
debug | Configuration de la version de test (peut être omise, a des valeurs par défaut). |
release | Configuration de la version de production. |
minifyEnabled | Active ou non l’obfuscation du code. false = pas d’obfuscation, true = obfuscation. |
proguardFiles | Spécifie les fichiers de règles de obfuscation : • Premier : règles générales du répertoire SDK. • Deuxième : proguard-rules.pro, pour les règles spécifiques au projet. |
Par défaut, Android Studio exécute la version debug ; nous verrons plus tard comment générer une version de production.
VI. dependencies — Gestion des dépendances
C’est la section la plus souvent modifiée, utilisée pour déclarer toutes les bibliothèques dont le projet dépend.
Trois types de dépendances
| Type | Description | Exemple |
|---|---|---|
| Dépendance locale | Dépend de fichiers jar ou répertoires locaux | compile fileTree(dir: 'libs', include: ['*.jar']) |
| Dépendance de bibliothèque | Dépend d’un module bibliothèque dans le projet | compile project(':library') |
| Dépendance distante | Dépend de bibliothèques open-source sur JCenter/Google | compile 'com.android.support:appcompat-v7:27.+' |
Analyse ligne par ligne
// Dépendance locale : ajoute tous les fichiers .jar du répertoire libs au chemin de build
compile fileTree(dir: 'libs', include: ['*.jar'])Langage du code : PHP (php)
// Dépendance distante : bibliothèque de compatibilité AppCompat
// Format : domaine:groupe:version
compile 'com.android.support:appcompat-v7:27.+'Langage du code : JavaScript (javascript)
// Dépendance distante : bibliothèque de mise en page ConstraintLayout
compile 'com.android.support.constraint:constraint-layout:1.0.2'Langage du code : JavaScript (javascript)
// Dépendance de test : JUnit pour les tests unitaires
testCompile 'junit:junit:4.12'Langage du code : JavaScript (javascript)
// Dépendance de test Android : Espresso pour les tests UI
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})Langage du code : JavaScript (javascript)
Flux de travail des dépendances distantes : Gradle vérifie d’abord si la bibliothèque est en cache local → si oui, l’utilise → sinon, la télécharge automatiquement → puis l’ajoute au chemin de build.
VII. Résumé comparatif
| Fichier | Rôle | Fréquence de modification |
|---|---|---|
build.gradle externe | Configuration globale des dépôts, version du plugin Gradle | Rarement modifié |
app/build.gradle interne | Configuration de build du module, gestion des dépendances | Souvent modifié |
| Configuration principale | Attributs clés | |
| ——— | ——— | |
apply plugin | Distinction application / bibliothèque | |
compileSdkVersion | Version du SDK de compilation | |
applicationId | Identifiant unique de l’application | |
minSdkVersion | Version minimale compatible | |
targetSdkVersion | Version cible de test | |
buildTypes | Configuration debug / release | |
dependencies | Dépendances locales / distantes / bibliothèque |
build.gradle