Pourquoi y a-t-il deux fichiers build.gradle dans un projet Android Studio?

102

Après avoir importé un projet Eclipse dans Android Studio, je vois deux build.gradlefichiers:

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

La première version est plus courte, la deuxième version contient des définitions pour compileSdkVersion, etc.

Quel est le but d'avoir deux fichiers séparés? Existe-t-il des tâches de construction distinctes?

Sabuncu
la source

Réponses:

72

<PROJECT_ROOT>\app\build.gradleest spécifique au module d'application .

<PROJECT_ROOT>\build.gradleest un "fichier de construction de niveau supérieur" dans lequel vous pouvez ajouter des options de configuration communes à tous les sous-projets / modules.

Si vous utilisez un autre module dans votre projet, en tant que bibliothèque locale, vous auriez un autre build.gradlefichier: <PROJECT_ROOT>\module\build.gradle

Par exemple, dans votre fichier de niveau supérieur, vous pouvez spécifier ces propriétés communes:

buildscript {
    repositories {
        mavenCentral()
    }

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

ext {
    compileSdkVersion = 23
    buildToolsVersion = "23.0.1"
}

Dans votre app\build.gradle

apply plugin: 'com.android.application'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion
}
Gabriele Mariotti
la source
+1 Merci, acceptera votre réponse momentanément. La build.gradleprésence d' un fichier obligatoire pour déclencher une accumulation? En outre, le fichier de construction de niveau supérieur appelle-t-il des fichiers de sous-niveau? (Bien qu'il n'y ait aucune preuve de cela.)
Sabuncu
Les fichiers build.gradle sont obligatoires si vous souhaitez construire un projet avec gradle. Android Studio ne nécessite pas de gradle, mais il est fortement recommandé. Le fichier de niveau supérieur n'appelle pas les sous-fichiers; gradle fonctionne avec des tâches, mais c'est difficile à expliquer dans un commentaire.
Gabriele Mariotti
Merci beaucoup Gabriele, cela me permettra de démarrer.
Sabuncu
1
Surtout la rootProject.ext.compileSdkVersionconstruction est très informative.
Sabuncu
2
Est-il important de faire le détour en utilisant ext {...} ou devrions-nous appliquer directement le plugin android et la compileSdkVersion au fichier de construction de niveau supérieur?
PhilLab
17

De la documentation officielle:

Les projets Android Studio contiennent un fichier de génération Gradle de projet de niveau supérieur qui vous permet d'ajouter les options de configuration communes à tous les modules d'application du projet. Chaque module d'application possède également son propre build.gradlefichier pour les paramètres de construction spécifiques à ce module.

entrez la description de l'image ici

Fichier de construction de projet

<PROJECT_ROOT>\build.gradleou le fichier de construction de projet concerne l' ensemble du projet , il sera donc utilisé pour les configurations de projet globales. Un fichier de construction de projet typique contient les éléments suivants:

  • buildscript qui définit:
    • référentiels et
    • dépendances
  • Version du plugin Gradle

Par défaut, le fichier Gradle au niveau du projet utilise buildscript pour définir les référentiels et les dépendances Gradle . Cela permet à différents projets d'utiliser différentes versions de Gradle. Les référentiels pris en charge incluent JCenter, Maven Central ou Ivy. Cet exemple déclare que le script de construction utilise le référentiel JCenter et un artefact de dépendance de chemin de classe qui contient le plug-in Android pour Gradle version 1.0.1.


Fichier de construction du module

<PROJECT_ROOT>\app\build.gradleou le fichier de construction de module est destiné à un module spécifique , il sera donc utilisé pour des configurations de niveau de module spécifiques. Un fichier de construction de module contient les éléments suivants:

  • paramètres android
    • compileSdkVersion
    • buildToolsVersion
  • defaultConfig et productFlavors
    • propriétés du manifeste telles que applicationId, minSdkVersion, targetSdkVersion et informations de test
  • buildTypes
    • propriétés de construction telles que déboguable, activation de ProGuard, signature de débogage, suffixe de nom de version et informations de test
  • dépendances

vous pouvez lire les documents officiels ici:

Paramètres de construction des projets et des modules

SMR
la source