Maitriser Gradle – Partie 1

Gradle est le digne successeur de Maven et de Ant, alliant ces deux outils afin de créer une plateforme de production Java simple à utiliser, et bien adaptée pour les projets Android.

Gradle est intégré à Android Studio et est utilisé afin de gérer et construire les projets Android (en utilisant le langage Groovy).

Il permet entre-autre de gérer la construction d’un projet utilisant plusieurs modules et dépendances de librairies Maven, et ce, de façon très simple.

Dans cette première partie du tutoriel nous verrons comment fonctionne Gradle, et essaierons d’ajouter des dépendances à nos modules.

Fichier setting.gradle

Dans le fichier setting.gradle, placé à la racine du projet Android Studio, est référencé la liste des modules donc gradle doit gérer. Si on a 2 modules : app et secondmodule, le fichier setting.gradle contiendra :

 include ':app', ':secondmodule'

Fichier build.gradle (Projet)

Le fichier principal build.gradle contient la liste des informations partagées entre tous nos modules. Nous pouvons par exemple y retrouver la version de gradle utilisée, ou les différents repository maven nécessaires à chacun de nos modules. Nous pouvons de même définir des variables qui seront utilisables par tous nos sous-modules, tel que la version minimum d’android supportée.

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

//définit des constantes utilisables dans chacun de nos modules 
ext{
    ANDROID_BUILD_MIN_SDK_VERSION=14
    ANDROID_BUILD_TARGET_SDK_VERSION=21
    ANDROID_BUILD_TOOLS_VERSION="21.1.1"
    ANDROID_BUILD_SDK_VERSION=21
}

//ajoute le serveur jcenter comme source de librairies maven à tous les modules 
allprojects {
    repositories {
        jcenter()
    }
}
Vous avez aussi la possibilité de placer ces données dans le fichier gradle.properties
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION="21.1.1"
ANDROID_BUILD_SDK_VERSION=21

Fichier build.gradle (Module)

Chaque module possède un fichier build.gradle,  ses options de compilation, ainsi que la liste de ses dépendances.

Dans ce fichier, nous pouvons retrouver :

  • Les propriétés Android de l’application, anciennement présentes dans le Manifest
    • compileSdkVersion le numéro de version d’android sdk utilisée pour compiler le projet
    • buildToolsVersion la nom complet de la version d’android sdk utilisée pour compiler le projet
    • applicationId l’identifiant unique de l’application (son nom de package complet)
    • minSdkVersion la version minimum d’android supportée
    • targetSdkVersion la version d’android pour laquelle l’application a été compilée
    • versionCode le numéro de version
    • versionName le nom complet de la version
apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.tutosandroid.HelloAndroidStudio"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false //activer proguard ? http://proguard.sourceforge.net/
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

Réutiliser les constantes gradle

Nous avons précédemment placé des constantes Gradle dans le fichier gradle.properties ou dans notre build.gradle global, voici comment les utiliser dans notre nouveau build.gradle :

apply plugin: 'com.android.application'

android {
    compileSdkVersion project.ANDROID_BUILD_SDK_VERSION
    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION

    defaultConfig {
        applicationId "com.tutosandroid.HelloAndroidStudio"
        minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION
        targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
}

Ajouter des dépendances

Module

Si nous voulons que notre module app ait comme dépendance le module secondmodule, afin qu’il accède au code écrit dans ce second, il faut ajouter la ligne suivante dans le fichier build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.tutosandroid.HelloAndroidStudio"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile project(':secondmodule') 
}

Librairie Maven

Lorsque l’on développe un projet, il nous est souvent demandé d’ajouter des fonctionnalités longues à développées, tel que la gestion de téléchargement et de mise en cache d’images. Il est très fréquent que la communauté des développeurs Android ai déjà programmé les modules dont vous avez besoin, et qu’ils l’aient mit à disposition des utilisateurs sur github et maven.

Prenons l’exemple de la librairie Picasso, développé par le groupe Square (dont j’admire le travail). Cette librairie est disponible sur github à l’adresse https://github.com/square/picasso. Nous pouvons voir que dans la section download est présent la ligne “Download the latest JAR or grab via Gradle:” suivi de

compile 'com.squareup.picasso:picasso:2.5.0'

Afin de l’utiliser dans notre projet, rien de plus simple, il suffit de copier cette ligne et de l’ajouter dans la catégorie dependencies des notre module

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.tutosandroid.HelloAndroidStudio"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.squareup.picasso:picasso:2.5.0' 
}

Pour information, les librairies sont hébergées sur des serveurs Maven,
pour le cas de Picasso, nous pouvons la retrouver à l’adresse http://search.maven.org/#artifactdetails%7Ccom.squareup.picasso%7Cpicasso%7C2.5.0%7Cjar

Nous pouvons dès à présent utiliser les classes de la librairie Picasso dans notre code java, avec un import tout ce qu’il y a de classique

package com.tutosandroid.HelloAndroidStudio;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;

public class MainActivity extends ActionBarActivity {

    private ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mImageView = (ImageView) findViewById(R.id.image);

        Picasso.with(this).load("http://www.tutos-android.com/wp-content/uploads/2015/02/gradle-300x83.png").into(mImageView);
    }

}

Le format des librairies importées est le suivant

Package:Module:Version

Il est possible de mettre + à la version pour toujours utiliser la dernière disponible, mais ce n’est pas conseillé, en effet imaginez vous la veille de la mise en production de votre application, une librairie que vous utilisez dans tout votre projet reçoit une mise à jour et change complètement son implémentation… Pour plus de sureté, pensez à écrire le numéro de version.

5 commentaires


  1. Merci pour ce tuto.

    J’ai relevé une erreur; sauf erreur, ce n’est pas setting.gradle mais settings.gradle.

    De plus, j’ai une question; pour quelle raison les noms des projets sont-ils précédés de deux points ? exemple: “:app”. J’ai l’impression que leur présence n’a aucune utilité particulière fonctionnellement parlant.

    Répondre

  2. Bonjour,
    Le target sur lequel va etre deployer mon application android à pour version android 4.2.2(API 17).

    Est ce que avec la configue gradle ci dessous peut engendrer un probléme?

    apply plugin: ‘com.android.application’

    android {
    compileSdkVersion 17
    buildToolsVersion ‘19.1.0’

    defaultConfig {
    applicationId “com.telnet.myapplication”
    minSdkVersion 17
    targetSdkVersion 23
    versionCode 1
    versionName “1.0”
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
    }
    }
    }

    dependencies {
    compile fileTree(include: [‘*.jar’], dir: ‘libs’)
    testCompile ‘junit:junit:4.12’
    }

    Il est a noté que j’utilise Android studio 1.5.1, et cette version n’accepte pas de mettre dans le fichier gradle une buildToolsVersion < '19.1.0'.

    Répondre

  3. si c’est possible de publier un tuto sur les tests unitaires en android et merci infiniment

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *