Maitriser Gradle – Partie 1

gradle

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.
Il est utilisé pour construire et gérer des projets Android avec le langage Groovy.

Il permet, entre autres, de gérer très facilement la construction d’un projet grâce à plusieurs modules et dépendances de librairies Maven.

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

Fichier settings.gradle

A la racine du projet Android-Studio, nous trouvons le fichier settings.gradle.
Il contient la liste des modules que Gradle va prendre en charge. Par exemple, si nous avions 2 modules : app et secondmodule, le fichier settings.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 utilisés par 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

Quand on développe un projet, il nous est souvent demandé d’ajouter des fonctionnalités longues à développer, comme la gestion de téléchargement et de mise en cache d’images.
Très souvent, la communauté des développeurs Android a déjà programmé les modules dont nous avons besoin, et l’ont mis à disposition des utilisateurs sur github et maven.

Prenons par exemple 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, la ligne “Download the latest JAR or grab via Gradle:” est présente suivie 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'
}

 

Comme nous pouvons le voir, la ligne ajoutée a le format suivant :

Package:Module:Version

Il est possible de mettre “+” à la place du numéro de version pour toujours utiliser la dernière version disponible, mais ce n’est pas conseillé.
En effet, imaginez que 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 sûreté, pensez à écrire le numéro de version.

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);
    }

}

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

5 commentaire sur “Maitriser Gradle – Partie 1

Laisser un commentaire

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