Il a été conçu pour intégrer les applications Google : Gmail, Google Maps, Google Agenda,
YouTube et la géolocalisation.
Android est déployé en plusieurs versions qui ont des noms de dessert suivant l'ordre alphabétique,
de A à Z. Chaque version est sculptée et affichée devant le siège social de Google (Mountain
View) :
2. Versions d’Android ?
• 1.0 : sortie avant le premier téléphone Android (fin 2007)
• 1.1 : Version incluse dans le premier téléphone, le HTC Dream
• 1.5 : Cupcake (Petit Gâteau), sortie en avril 2009
• 1.6 : Donut (Beignet), sortie en septembre 2009
• 2.0 (2.0.1) : A cause de nombreux bugs, remplacée par la version 2.1
• 2.1 : Eclair, sortie en janvier 2010
• 2.2 : FroYo (Frozen Yogourt : Yaourt glacé), sortie en mai 2010
• 2.3 : Gingerbread (Pain d'épice), sortie le 6 décembre 2010
• 3.0 : Honeycomb10 (Rayon de miel), sortie le 26 janvier 2011
1
Mme JAKJOUD
• 4.0 : Ice Cream Sandwich (Sandwich à la crème glacée), version unifiée pour Smartphone,
Tablette et GoogleTV, combinant Gingerbread et Honeycomb, sortie le 19 octobre 2011
• 4.2.2 : API 17 sortie le 11 février 2013
3. Ecosystème :
L'écosystème d'Android s'appuie sur deux piliers:
• le langage Java
Le kit de développement donne accès à des exemples, de la documentation mais surtout à l'API
de programmation du système et à un émulateur pour tester ses applications.
Stratégiquement, Google utilise la licence Apache pour Android ce qui permet la redistribution
du code sous forme libre ou non et d'en faire un usage commercial.
Le SDK était anciennement manipulé par un plugin d'Eclipse (obsolète), maintenant, elle est
intégrée à Android Studio (IntelliJ).
Android est en fait un système de la famille des Linux sans les outils GNU, il comporte :
5. Particularité d’Android
Android tire parti des particularités des Smartphones, à savoir : l’interface homme machine
adapté (tactile, widget), Les divers modes (vibreur, sonnerie, silencieux, alarme), les
notifications (d'applications, d'emails, de SMS, d'appels en instance) , le GPS les divers capteurs
(gyroscope, gravité, accélération linéaire, baromètre), la téléphonie (GSM) et réseau 3G…
2
Mme JAKJOUD
Ceci en plus de ce qu'on peut avoir sur un ordinateur : navigateur, bibliothèques graphiques 2D,
3D, base de données (SQLite), applications de rendu multimédia (audio, vidéo, image) de divers
formats, réseau Bluetooth et Wi-Fi, caméra
Le SDK Android fournit les outils et les API nécessaires pour commencer à développer des
applications sur la plate-forme Android en utilisant le langage de programmation Java.
6. La couche Application :
Android est fourni avec un ensemble de programmes de base (également nommés applications
natives) permettant d'accéder à des fonctionnalités comme par exemple : les courriels, les SMS,
le téléphone, le calendrier, les photos, les cartes géographiques, le Web.
3
Mme JAKJOUD
Ces applications sont développées à l'aide du langage de programmation Java. Pour l'utilisateur
final, c'est la seule couche accessible et visible :
Cette couche permet de développer des applications riches et innovantes et ce grâce à une
plateforme de développement ouverte.
Les développeurs sont libres de profiter du matériel périphérique, les informations de localisation
d'accès, exécuter les services d'arrière-plan, définir des alarmes, ajouter des notifications de la
barre d'état, ….
Le framework offre, entre autre, des gestionnaires pour les applications : Gestion des fenêtres,
des activités, des ressources …
En effet, le framework Android utilise, implicitement, des appels à des fonctions C/C++ parce
que c’est beaucoup plus rapides à exécuter que des méthodes Java standard. La technologie Java
Native Interface (JNI) permet d'effectuer des échanges entre le code Java et le code C et C++.
Un moteur d'exécution « runtime system » est un programme qui permet l’exécution d'autres
programmes :
En effet, pour exécuter des applications JAVA sur un ordinateur, il faut absolument un moteur
d’exécution qu’on appelle JRE « Java Runtime Environment ».
Pour les applications Android, on utilise une version de Java réduite qui ne contient pas les
fonctionnalités qui n'ont rien à faire dans un environnement mobile (La bibliothèque graphique
Swing par exemple). La machine virtuelle utilisée est développée spécialement pour les
4
Mme JAKJOUD
systèmes embarqués et elle s'appelle « Dalvik ». Elle est optimisée pour mieux gérer les
ressources physiques à savoir la mémoire, la batterie,…
Le code source Jave est convertit, après la compilation, en un bytecode java (.class) puis, une
deuxième compilation va générer un autre bytecode (.dcx) qui est exécuté par la machine
virtuelle Dalvik.
Cette particularité d'Android en fait un système unique, loin des systèmes Linux traditionnels
que beaucoup avaient pu rencontrer auparavant.
5
Mme JAKJOUD
III. Architecture d’une application Android:
1. Architecture d’un projet Android Studio :
Activity (les activités) : Une activité représente un morceau de l’application (fonctionnalité) qui
a une interface avec l’utilisateur. Par exemple, une application de messagerie peut avoir une
activité qui assure l’authentification (login/mot de passe), une autre activité qui affiche une liste
de nouveaux mails, une troisième activité pour composer un nouveau mail et une autre activité
pour lire les mails.
6
Mme JAKJOUD
Si une application comporte plus d’une activité, l’une d’entre elles doit être marquée comme
l’activité présentée lors du lancement de l’application.
Une activité est implantée sous forme d’une sous classe de la classeAppCompact Activity (qui
remplace la classe Activity à partir de la version 3.0 de AndroidStudio) :
Services :Un service est un composant qui s’exécute en arrière-plan pour effectuer des
opérations à long terme. Par exemple, un service peut jouer de la musique en arrière-plan
lorsque l’utilisateur se trouve dans une autre application, ou il peut récupérer des données sur
le réseau sans bloquer l’interaction de l’utilisateur avec une activité.
Un service est mis en œuvre come sous classe de la classe Service comme suit :
Les récepteurs de diffusion répondent simplement aux messages diffusés provenant d’autres
applicatifs ou du système. Par exemple, les applications peuvent également déclencher des
émissions pour permettre aux autres applications de savoir si certaines données ont été
téléchargées sur le périphérique et qu’elles sont disponibles pour qu’elles puissent être
utilisées, donc c’est un récepteur qui intercepte cette communication et lancera une action
appropriée.
Un récepteur de diffusion est implanté sous la forme d’une sous classe de la classe
BroadcastReceiver et chaque message est un diffuseur comme objet Intent.
Un fournisseur de contenu est implanté comme une sous classe de la classe ContentProvider et
doit implanter un ensemble standard d’API permettant à d’autres applications d’effectuer des
transactions :
7
Mme JAKJOUD
Public Class MyContentProvider extends ContentProvider{….}
La configuration d’une application Android ainsi que l’ensemble des composants sont définis
dans le fichier AndroidManifest.xml : Par exemple, l’ensemble des Activités et des Services de
l’application doivent y être répertoriées.
Ce fichier doit également contenir l’ensemble des permissions de l’application : Par exemple si
l’application a besoin d’un accès à internet, ceci doit être spécifié dans le fichier
AndroidManifest.xml.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.istantic.android.temperature"
android:versionCode="1" android:versionName="1.0">
8
Mme JAKJOUD
• Le tag <Activity> définit une Activity : Dans cet exemple, on définit la classe « Convert ».
On définit alors un « intent filter » pour cette classe, ce qui permet de déterminer que
cette Activity est lancée au démarrage de l’application
(action android:name= »android.intent.action.MAIN »).
• Le tag <uses-sdk> définit la version minimale du SDK android pour laquelle l’application
est valide. Ceci empêchera l’installation de l’application sur des terminaux qui ont une
version du SDK Android plus ancienne.
Récapitulation :
9
Mme JAKJOUD
IV. Les activités :
Une activité est une classe qui peut avoir plusieurs états :
10
Mme JAKJOUD
1. Cycle de vie d’une activité :
11
Mme JAKJOUD
o onCreate() / onDestroy(): permet de gérer les opérations à faire avant l'affichage de
l'activité, et lorsqu'on détruit complètement l'activité de la mémoire. On met en général
peu de code dans onCreate() afin d'afficher l'activité le plus rapidement possible.
o onStart() / onStop(): ces méthodes sont appelées quand l'activité devient visible/
invisible pour l'utilisateur.
o onPause() / onResume(): une activité peut rester visible mais être mise en pause par le
fait qu'une autre activité est en train de démarrer, par exemple B. onPause() ne doit pas
être trop long, car B ne sera pas créé tant que onPause() n'a pas fini son exécution.
o onRestart(): cette méthode supplémentaire est appelée quand on relance une activité
qui est passée par onStop(). Puis onStart() est aussi appelée. Cela permet de différencier
le premier lancement d'un relancèrent.
12
Mme JAKJOUD
ATELIER 1 : Installation de
Android studio et prise en main
1. Prérequis :
Afin de développer convenablement des applications Android, il faut :
Même si les EDIs de développement Mobiles (Eclipse (obsolète), Android Studio, Netbeans,…)
utilisent ces outils implicitement mais, on se trouve parfois obligés d’y recourir (transfert de
fichier, installations directes d’applications,…).
13
Mme JAKJOUD
3. Installer l’émulateur GenyMotion :
Android Studio fournit ces propres Emulateurs mais ils partagent l’inconvénient d’être très lents
et de ne pas supporter GooglePlay Services pour tester les applications embarquant par exemple
une carte GoogleMap ou des publicités GoogleAd
Pour l’utiliser, il faut installer la machine virtuelle Oracle VM Virtual Box. Puis il faut créer un
nouvel émulateur.
14
Mme JAKJOUD
Puis on va fournir le nom de notre application et le chemin du dossier ou l’applicatif sera
sauvegarder. On fournit également le nom du domaine qui doit être unique pour chaque
application. EN effet, il faut pas oublier que ces applications doivent éventuellement être
cataloguées dans Google Play. Pour cela, Google exige de les identifier clairement par ce nom de
domaine.
15
Mme JAKJOUD
On choisit également le type d’appareils auquel est destiné l’applicatif :
On va choisir la nature de l’activité à ajouter à l’application. Une application peut contenir de une
à plusieurs activités.
Pour ce premier test, on va choisir Empty Activity (une activité vide) et on va laisser les valeurs
des champs de configuration par defaut.
16
Mme JAKJOUD
Et voilà le projet se lance avec le rendu suivant :
17
Mme JAKJOUD
18
Mme JAKJOUD
4. Le fichier manifest de l'application :
Le fichier AndroidManifest.xml fixe les caractéristiques du binaire de l'application Android. Son
contenu est ici le suivant :
La ligne 7 est le label de l’activité, sa valeur se trouve dans le fichier strings.xml qui contient les
différentes chaines de caractères utilisées par l’application.
19
Mme JAKJOUD
La ligne 12 : l'activité est désignée comme étant l'activité principale ;
La ligne 13 : Cette activité doit apparaître dans la liste des applications qu'il est possible de lancer
sur l'appareil Android.
5. L’Activité principale :
Une application Android repose sur une ou plusieurs activités. L’activité générée par l’application
est MainActivity sa classe est la suivante :
1. package com.example.widad.HelloWorldTDI;
2. import android.support.v7.app.AppCompatActivity;
3. import android.os.Bundle;
4. public class MainActivity extends AppCompatActivity {
@Override
5. protected void onCreate(Bundle savedInstanceState) {
6. super.onCreate(savedInstanceState);
7. setContentView(R.layout.activity_main);
8. }}
20
Mme JAKJOUD
La ligne 4 : la classe MainActivity hérite de la classe Android AppCompatActivity. Ce sera le cas de
toutes les activités futures ;
La ligne 5 : la méthode onCreate est exécutée lorsque l'activité est créée et avant l'affichage de
la vue associée à l'activité, c’est une méthode qui redéfinie une autre méthode dans la classe
mère AppCompatActivity. La méthode de base doit être toujours appelée avec le même
paramètre : La ligne 6.
La ligne 7 : le fichier activity_main.xml est la vue associée à l'activité. La définition XML de cette
vue est la suivante :
i) <TextView
j) android:layout_width="wrap_content"
k)
l) android:layout_height="wrap_content"
m) android:text="Bonjour TDI"
n) android:textColor="@color/colorAccent"
o) app:layout_constraintBottom_toBottomOf="parent"
p) app:layout_constraintLeft_toLeftOf="parent"
q) app:layout_constraintRight_toRightOf="parent"
r) app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Les lignes b-h représentent le gestionnaire de mise en forme. Ici on voit celui par defaut qui est
ConstraintLayout. Ce conteneur permet de placer les composants les uns par rapport aux autres
(à droite de, à gauche de, dessous, au-dessus) ;
Les lignes i-r introduisent un composant de type TextView qui permet l’affichage du texte dans
une vue.
La ligne m concerne le texte affiché. Il est déconseillé de mettre beaucoup de texte dans les
vues. Il est préférable de déplacer ces textes dans le fichier strings.xml qui se trouve dans le
dossier res/values. Le texte affiché sera donc « Bonjour TDI ».
21
Mme JAKJOUD
setContentView(R.layout.activity_main);
R est une classe générée dans le dossier app/build/generated :
Chaque ressource Android (vues, fragments, composants,…) a un identifiant. Par exemple une
vue V.xml qui se trouve dans le dossier res/layout sera identifiée par : R.layout.V
6. Exécution de l’application :
22
Mme JAKJOUD
23
Mme JAKJOUD
7. Manipulation du fichier String.xml :
On modifie le fichier activity_main pour que la valeur de la zone de texte non editable soit
stockée dans le fichier string.xml. Pour cela, on va modifier la ligne android :text
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bonjour TDI"
android:textColor="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:layout_height="wrap_content"
android:text="@string/valeurText"
android:textColor="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
24
Mme JAKJOUD
V. Les ressources :
Dans une application embarquée toutes les ressources doivent être dans le fichier .apk qu’on
télécharge et l’installe dans le Smartphone. Pour cela, toutes les ressources qui concernent
l’application à développer se trouvent dans le répertoire res qui sera mis dans le apk :
• drawable-hdpi (images en haute définition)
• drawable-ldpi (images en basse définition)
• drawable-mdpi (images en moyenne définition)
• layout (description en XML des interfaces)
• values (définitions en XML de constantes : chaînes, tableaux, valeurs numériques …)
• anim (description en XML d’animations)
• menus (description en XML de menus pour l’application)
• xml (fichiers XML utilisés directement par l’application)
• raw (tous les autres types de ressources : sons, vidéos, …)
On peut ajouter d’autres sous répertoires.
Les ressources du répertoire res sont utilisées dans le code au travers de la classe statique R
régénérée automatiquement à chaque changement dans le projet.
Toutes les ressources sont accessibles au travers de R, dès qu'elles sont déclarées dans le fichier
XML ou que le fichier associé est déposé dans le répertoire adéquat. Les ressources sont
utilisées de la manière suivante:
android.R.type_ressource.nom_ressource
Ce qui retourne une valeur entière (de type int). Il s'agit en fait de l'identifiant de la ressource.
Afin de récupérer les objets graphiques à partir de leur id (widgets du fichier activity_main.xml)
, on utilise la méthode findViewById(identifiant issu de la classe R).
Exemple :
25
Mme JAKJOUD