Professional Documents
Culture Documents
net/publication/355904199
CITATIONS READS
0 1,204
1 author:
Kabou Salheddine
University Ahmed Draia - Adrar
10 PUBLICATIONS 12 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Kabou Salheddine on 04 November 2021.
Polycopié de Cours :
Préparé par:
Dr: KABOU Salheddine
Kabou.salaheddine@yahoo.fr
2020/2021
Avant- propos
L’objectif majeur du module est de présenter les systèmes d’exploitation mobiles ainsi que
les plateformes de développement des applications mobiles. L’étudiant, à travers ce
polycopié, aura l’occasion de découvrir le développement d’applications dédiées aux réseaux
sans fil.
- Le premier chapitre contient une généralité de tous ce qui concerne le concept d’une
application mobile.
- Le deuxième chapitre est consacré à voir les notions du système embarqué, système
d’exploitation mobile et plus particulièrement le système Android.
- Le troisième chapitre est dédié à l’étude sur les principaux composants constitutifs
d'une application Android.
- Le quatrième chapitre illustre le principe et l’utilité des ressources ainsi que les
éléments principaux qui construisent une interface graphique.
- Le cinquième chapitre traite la création et l’utilisation des bases des données sous le
système d’exploitation mobile Android.
- Le sixième chapitre est réservé aux différentes étapes et moyens pour le déploiement
d’une application mobile.
- Le dernier chapitre vise à donner un exemple pratique pour le développement d’une
application sous le système d’exploitation mobile Android.
Table des matières
1 Généralités 6
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Terminaux mobiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Les assistants personnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2 Les téléphones intelligents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.3 Les tablettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.4 Les montres intelligentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Application mobile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 Les types d’application mobile . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.3 Comparaison entre les types d’application mobile . . . . . . . . . . . . . . 9
1.3.4 Les domaines d’application d’une application mobile . . . . . . . . . . . . . 10
1.3.5 Les statistiques sur le marché mondiale . . . . . . . . . . . . . . . . . . . . 10
1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1
TABLE DES MATIÈRES 2
4
TABLE DES FIGURES 5
Généralités
1.1 Introduction
De nos jours, et après l’innovation de l’Internet, les nouveaux terminaux mobiles ( Téléphones
intelligents, tablettes,..etc) ont occupé une place importante dans notre vie quotidien. Cet afflux
technologique change radicalement notre rapport à l’informatique en affranchissant de l’utilisation
d’un micro-ordinateur classique.
Le présent chapitre porte ce contexte. Dans la première partie, on va aborder une généralités
sur les différents types des terminaux mobiles. La deuxième partie sera consacré à présenter une
description générale de tous ce qui concerne la notion d’une application mobile.
6
CHAPITRE 1. GÉNÉRALITÉS 7
La plupart de ces appareils fonctionnent sur l’un de ces systèmes d’exploitation mobiles popu-
laire : Android, Symbian, IOS, BlackBerry OS et Windows.
offre des caractéristiques comparables à celles d’un Smartphone (la figure 1.4).
Une application mobile peut être soit installée directement sur l’appareil dès sa construction en
usine soit téléchargée depuis un magasin d’applications dit « application store » telles que Google
Play, l’App Store ou encore le Windows Phone Store. Une partie des applications disponibles sont
gratuites tandis que d’autres sont payantes. Il existe plusieurs systèmes d’exploitation mobile dont
les plus répondu sont :
• iOS (Apple) utilisé sur iPhone et iPad.
• Android (Google) qui anime un grand nombre de smartphones tels que Samsung, HTC, LG,
Motorola. . .
• Blackberry OS.
• Windows Phone (Microsoft)
• Symbian (Nokia)
Remarque 1.3.1.1 Dans le deuxième chapitre, on va présenter une description détaillée sur le
système d’exploitation mobile le plus célèbre au monde (Android).
Application native
Il s’agit d’application conçue pour une grande partie de systèmes d’exploitation fiables par les
Smartphones en se référant à un langage particulier à chacun d’eux. Ce mode d’application est
accessible seulement sur les plateformes d’applications (AppStore IOS, PlayStore pour Android,
CHAPITRE 1. GÉNÉRALITÉS 9
...) et qui retirent 25 % du prix de vente pour une application native payante.
Application web
Contrairement à une application native, une application web est une application mobile dé-
veloppée avec les outils de développement web actuel : HTML5, CSS3 et JavaScript. C’est une
application qui une fois développée est accessible et exécutable sur tous les smartphones via leur
navigateur web.
L’avantage de ces applications est : le gain de temps et d’argent réalisé grâce à leur déve-
loppement unique et leur déploiement multiplateformes. Dans un cas, vous développez une seul
application alors que dans l’autre (application native), vous développez trois applications (pour
Android, IOS et Windows Phone).
Application hybride
Une application hybride est une application qui combine les deux types d’applications précé-
dentes. Elle sert essentiellement de faire une passerelle entre le langage web et le natif.
L’avantage de ces applications c’est qu’elles nous permette d’utiliser un seul et même outil
pour le développement et les langages issus du développement Web pour tous les mobiles (IOS,
Android et Windows Phone). Notons que les applications hybrides sont accessibles exclusivement
sur iPhone et Android.
Le nombre de téléchargement des applications issues des deux plateformes Play Store et App
Store a atteint un record de plus de 120 milliards seulement pour l’année 2019 sachant que les
réinstallations et les mises à jours n’ont pas été prises en considération lors du statistiques. La
figure 1.7 présente les applications les plus téléchargées sur Android et iOS entre 2010 et 2019.
CHAPITRE 1. GÉNÉRALITÉS 11
1.4 Conclusion
Le premier chapitre de ce cours est dédié à l’illustration tous ce qui touche le concept de l’in-
formatique mobile. Dans la première partie, on a montré les différents supports physique sur la
quelle, une application mobile va s’exécuter tels que les assistants personnelles et les tablettes.
La deuxième partie est réservée à présenter une généralité sur l’application mobile. Au début,
on a commencé par définir la notion d’une application mobile, ensuite on a classifié les trois types
d’applications mobiles et les comparé selon certains critères. Enfin on a étudié les dernières sta-
tistiques sur le marché mondiale par rapport au nombre de téléchargement pour les différentes
plateformes.
2.1 Introduction
Un système d’exploitation mobile (SEm) joue le rôle d’une passerelle entre les composants
matériels d’un terminal mobile et les composants logiciels qui représentent les applications mobile.
Il est considéré comme une plateforme sur laquelle, une application mobile va s’exécuter. Le présent
chapitre va se baser sur tous ce qui touche le concept d’un SEm et plus particulièrement le système
Andrdoid. Ce chapitre vise également une étude sur les différents méthodes de développement
d’une application mobile sous le SEm Andrdoid.
13
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 14
2.2) :
• Équipements permanents : qui représentent l’unité centrale qui est formée de :
- CPU : microprocesseur(s) ou des microcontrôleurs.
- RAM : mémoire centrale.
• Équipements supplémentaires : ces équipements ne sont pas exhaustives et elles dé-
pendent toujours de l’application dédiée.
- Mémoire de masse : le disque dur, la mémoire flash, l’utilisation de ROM, le disque à
distant,. . . ,etc.
- Entrées : les capteurs/convertisseurs, le clavier, télécommandes (infrarouge, Bluetooth,
radio...),. . . ,etc.
- Sorties : les écrans et afficheurs LCD, le système d’alarme ou synthèse vocale. L’impri-
mante en tous genres comme papier, étiquettes, photos,. . . ,etc.
- IHM (Interface Homme Machine) : c’est un dispositif qui sert à communiquer entre
l’humain et la machine (exemple : les dispositifs «TouchScreen») [7].
Remarque 2.3.1.1 un système d’exploitation embarqué ne doit pas avoir toutes les fonctionnalités
et caractéristiques d’un système d’exploitation pour ordinateur.
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 16
2.3.2 Définitions
• Un système d’exploitation mobile est un ensemble de programmes responsable de la gestion
des opérations, du contrôle, de la coordination, de l’utilisation du matériel et du partage
des ressources d’un dispositif entre divers programmes tournant sur ce dispositif.
• Un système d’exploitation mobile est une plateforme logicielle sur laquelle les autres pro-
grammes appelés « programmes d’applications » peuvent s’exécuter sur des appareils mo-
biles tels que les PDA (personnal digital assistant), les téléphones cellulaires, smartphones,. . . ,etc.
Remarque 2.3.2.1 Les systèmes d’exploitation mobiles se diffèrent en fonction des fonctionnali-
tés qu’ils soutiennent. Par exemple un système d’exploitation pour PDA est différent d’un OS pour
Smartphone
2.4.2 Historique
En 2003, la création d’une entreprise américaine nommée : Android Incorporated qui était ra-
chetée par Google en 2005 dans le but de s’introduire sur le marché des produits mobiles.
le défi essentiel d’Android n’était pas de développer un système d’exploitation mobile qui permet
uniquement de transmettre des appels et d’envoyer des SMS, mais qui devait offrir à l’utilisateur la
possibilité d’interagir directement avec son environnement (particulièrement avec son emplacement
géographique). Les systèmes d’exploitation mobile les plus répondus à l’époque étaient Windows
Mobile et Symbian. C’est pourquoi, contrairement à une croyance populaire, il n’est pas possible
de dire qu’Android est une réponse de Google à l’iPhone d’Apple, puisque l’existence de ce dernier
n’a été révélée que deux années plus tard.
En janvier 2007, l’entreprise Apple a dévoilé un nouveau produit ( téléphone intelligent) qui est
tout simplement révolutionnaire pour l’époque. L’annonce représente une apparition d’une nou-
velle concurrence pour les autres fabricateurs. Le problème étant que pour atteindre le niveau
d’iOS (iPhone OS, le système d’exploitation pour iPhone), il aurait fallu des années de recherche
et développement à chaque constructeur.
En novembre 2007 et par l’initiative de Google, 35 entreprises évoluant dans l’univers du mo-
bile, dont Google ont créé l’Open Handset Alliance (OHA). Le but primordiale de cette alliance
est de développer un nouveau SE mobile open source qui doit concurrencer les autres systèmes
propriétaires, en particulier iOS. OHA compte à l’heure actuelle 80 membres.
C’est au quatrième trimestre 2010 qu’Android devient le système d’exploitation mobile le plus
utilisé au monde cite2013-android.
• Facile à développer : Le développement sous l’univers d’Android est très simple grâce
aux différentes API mises à disposition qui facilitent et accélèrent grandement le travail. Le
point fort de ces APIs c’est qu’ils sont très complètes et très faciles d’accès.
• Facile à vendre : Une application dédiée au plateforme Play Store a plus d’opportunités
d’être téléchargée et diffusée grâce au nombre croissant de visiteurs qui utilisent et profitent
de cette plateforme
• Flexible : Le système est extrêmement portable, il s’adapte à beaucoup de structures
différentes. Android est construit de manière à faciliter le développement et la distribution en
fonction des composants en présence dans le terminal (si une application nécessite d’utiliser
le Bluetooth, seuls les terminaux équipés de Bluetooth pourront la voir sur le Play Store).
Il faut noter qu’il y a aussi des versions alternatives qui s’appellent : ROM Custom. Il s’agit
d’un nouveau logiciel créé à partir du code source d’un logiciel existant lorsque les droits accordés
par les auteurs le permettent. Ces systèmes modifiés offrent de nouvelles fonctions (photos, écran
d’accueil, apparence de l’interface, autonomie, etc.). Le développement sous ce contexte est appelé
un développement participatif où un ensemble de développeurs décident de concevoir leur propre
système.
Le noyau (Kernel)
Le système d’exploitation Android se base sur un noyau Linux (Kernel), régulièrement mis à
jour selon les versions du système : si les anciennes versions utilisaient la version 2.6.x du noyau
Linux, les actuelles dernières versions (Android 10) sont basées sur la version 4.14 de Linux. Le
noyau est l’élément du système d’exploitation qui représente la passerelle entre la partie matérielle
et la partie logicielle.
Cette première couche prend en charge la gestion des couches basses (gestion des processus, de
la mémoire, de la couche matérielle) ainsi que les droits utilisateurs ( comme montré dans la figure
2.4, la couche Kernel est la seule couche qui gère le matériel). Il faut noter que la version du noyau
utilisée avec Android est une version développée spécialement pour l’environnement mobile, avec
une gestion avancée de la batterie et une gestion particulière de la mémoire.
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 19
Les bibliothèques utilisées dans Android sont open sources ( écrites en C et/ou C++ ). Elles
offrent des services de qualité tels que la bibliothèque d’affichage en 2D (SGL) et de 3D (OpenGL),
la bibliothèque de base de données (SQLite), la lecture et l’enregistrement audio et vidéo (Media
Framework), un moteur de navigation Web (WebKit),...,etc.
l’environnement d’exécution d’Android, qui est basé sur une technologie Java et sur le concept
de machine virtuelle, se trouve dans le même niveau que l’ensemble des bibliothèques. Vue que
les contraintes matériels des dispositifs mobiles (peu de mémoire et la vitesse du processeur), il
était difficile d’utiliser une machine virtuelle Java standard. Google a pris la décision de créer une
nouvelle machine virtuelle Dalvik, afin de mieux répondre à ces limitations.
Les applications Java, développées pour Android, doivent être compilées au format Dalvik
exécutable (.dex) avec l’outil (dx). Cet outil compile les (.java) en (.class) et ensuite il convertit
ces (.class) en (.dex).
Les fonctionnalités fournis par les bibliothèques d’Android sont ensuite utilisées par cette couche
sous forme de bibliothèques Java. Celles-ci offrent des composants réutilisables spécifiques à des
domaines particuliers qui permettent aux développeurs de créer des applications riches. À ce niveau
on distingue deux types de service :
• Les services cœurs de la plateforme (Core Plateform Services) : Un service est une
application, qui s’exécute en arrière-plan et qui n’a aucune interaction avec l’utilisateur (
voir le chapitre 03). Les services cœurs de la plateforme (Core Plateform Services) apportent
des services importants au fonctionnement de la plateforme :
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 21
- Activity Manager : il prend en charge de la gestion du cycle de vie des applications ainsi
que le maintien de la pile de navigation qui permet d’aller d’une application à une autre.
- Package Manager : il est utilisé, par l’Activity Manager, pour charger les informations
provenant des fichiers (.apk) (Android package file).
- Window Manager : il s’occupe de la gestion des fenêtres des applications (quelle fenêtre
doit être affichée devant une autre à l’écran).
- Resource Manager : Il s’intéresse pour la gestion de tous ce qui n’est pas du code, toutes
les ressources (images, fichier audio, etc.).
- Content Provider : Il gère le partage de données entre applications.
- View System : Il fournit tous les composants graphiques : listes, grilles, boutons,etc...
• Les services matériels (Hardware Services) : ce type de service fournit un accès vers les
API matérielles :
- Telephony Service : il permet d’accéder aux interfaces téléphoniques (GSM, 3G, etc.).
- Location Service : il permet d’accéder au GPS.
- Bluetooth Service : il permet d’accéder à l’interface Bluetooth.
- Wi-Fi Service : il permet d’accéder à l’interface Wifi.
- USB Service : il permet d’accéder aux interfaces USB.
- Sensor Service : il permet d’accéder aux capteurs (capteur de luminosité, de proximité,
d’accélération,etc.).
Il s’agit d’un ensemble d’applications que l’on peut trouver sur Android. Ces applications
peuvent être, soit téléchargées à partir du magasin d’application officiel, soit installées par défaut
telles que l’application d’accueil (aussi appelée Launcher), le navigateur web, les applications de
SMS et téléphonie, etc.
Les applications développées sous Android sont essentiellement écrites en langage Java qui est
un langage de programmation orienté objet et qui se caractérise par la portabilité ( signifie qu’une
application écrite en Java, s’exécutant sur Windows (par exemple), pourra facilement tourner sur
Mac ou GNU/Linux ).
Cette particularité ( portabilité) vient du fait que l’exécution d’une n’importe quelle application
écrite en Java a besoin d’une machine virtuelle appelée JVM. Pour avoir une JVM sur un ordina-
teur, il faut télécharger le JRE qui contient, en plus de la JVM, des bibliothèques Java standards [3].
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 22
La JVM ne lit pas directement le code Java. Elle lit un code compilé (le byte code). Pour
passer du code Java, que le développeur écrit, au code compilé, lu par la JVM, des outils spéciaux
sont nécessaires. Ces outils sont inclus dans le JDK. De plus, le JDK contient le JRE (et donc la
machine virtuelle), ce qui est bien pratique. Pour résumer, on dira que :
- Pour un simple utilisateur de Java : il doit avoir le JRE.
- Pour un développeur : il aura besoin des outils du JDK.
Un SDK (un kit de développement logiciel), est un ensemble d’outils que met à disposition un
éditeur afin de permettre de développer des applications pour un environnement précis. Le SDK
Android permet, donc, de développer des applications pour Android et uniquement pour Android.
Au premier lancement du SDK, un écran semblable à la figure 2.6.
En regardant bien le nom des paquets, on remarquera qu’ils suivent tous un même motif.
Il est écrit à chaque fois : Android [un nombre] (API [un autre nombre]). La présence de ces
nombres s’explique par le fait qu’il existe plusieurs versions de la plateforme en circulation. Le
premier nombre correspond à la version d’Android et le second à la version de l’API Android
associée. Quand on développe une application, il faut prendre en compte ces numéros, puisqu’une
application développée pour une version précise d’Android ne fonctionnera pas pour les versions
antérieures [3].
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 23
Eclipse
Eclipse IDE est un environnement de développement intégré libre, extensible, universel et po-
lyvalent, permettant potentiellement de créer des projets de développement mettant en œuvre
n’importe quel langage de programmation. Eclipse IDE est principalement écrit en Java (à l’aide
de la bibliothèque graphique SWT d’IBM), et ce langage, grâce à des bibliothèques spécifiques, est
également utilisé pour écrire des extensions.
De plus, Eclipse est conçu pour pouvoir être complété avec des plugins (extension) tel que ADT
(Android Development Tools), la fonction principale de ce plugin est de créer un pont entre Eclipse
et le SDK Android.
Andriod studio
Jusqu’au debut de Mai 2013, pour développer des applications Android, Google mettait en
avant l’utilisation d’Eclipse couplé avec le Plugin ADT (Android Development Tools). Cette pre-
mière solution a tout de même permis à Google de posséder le Store d’application le plus riche. Le
15 mai, Google a montré la première version d’Android Studio. En Access preview au départ pour
sa version 0.1, puis passé en bêta en juin 2014 pour la version 0.8, jusqu’à l’arrivée à la version 3.5
utilisée dans nos séances de TP.
Android studio n’a pas été développé de zéro mais il est basé sur l’IDE de JetBrains, IntelliJ
IDEA. Cette société propose de nombreux IDE pour différents langages (PHP Storm, RubyMine,
...) mais qui sont tous payant. Dans sa dernière version, Android Studio offre toutes les possibilités
nécessaires pour développer une application Android complète (la figure 2.7).
Android Studio permet principalement d’éditer les fichiers Java/Kotlin et les fichiers de confi-
guration XML d’une application Android. Il propose entre autres des outils pour gérer le dévelop-
pement d’applications multilingues et permet de visualiser rapidement la mise en page des écrans
sur des écrans de résolutions variées simultanément. Il intègre par ailleurs un émulateur permettant
de faire tourner un système Android virtuel sur un ordinateur [3].
Le répertoire App
Tout comme bon nombre de technologies actuelles, les sources d’une application Android pos-
sèdent une structure bien définie qui doit être respectée (la figure 2.8). Ces arborescences permettent
non seulement de rendre les projets plus lisibles et organisés, mais aussi de simplifier le dévelop-
pement. Lors de la création d’un nouveau projet, il existe trois principaux répertoires constituant
l’arborescence globale d’un projet Android :
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 24
Gradle Scripts
Un projet Android Studio est un projet java basé sur Gradle. Gradle est un outil qui permet
l’automatisation des opérations de construction d’une application java comme e Make (projets
C++ sur Unix), Ant (projets Java dans Eclipse).
De même que make se sert d’un fichier Makefile, Gradle se sert d’un fichier nommé build.gradle
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 25
pour construire le projet. Au moment de la compilation du projet, l’application finale est générée
au format APK, dans le répertoire bin de l’arborescence. C’est ce fichier qu’il faut ensuite déployer
sur les équipements, afin de pouvoir faire tourner l’application (la figure 2.9).
2.6 Conclusion
En premier lieu et avant de commencer à montrer le principe d’un système d’exploitation mo-
bile, on a abordé une généralités sur le système embarqué qui représente la notion de base d’un
SEm. Ce dernier est présenté d’une façon détaillée dans la seconde partie de ce chapitre. La troi-
sième partie était consacré à illustrer le chemin du lancement d’Andrdoid, ses différentes versions
ainsi qu’une présentation simplifié de son architecture. Dans la dernière partie, on s’est focalisé sur
l’environnement de développement sous Android, les différentes méthodes pour pouvoir développer
une application sous Andrdoid, ainsi qu’une description générale des deux répertoires construisant
la structure d’un projet Android Studio.
Le troisième chapitre sera consacré à l’étude des éléments essentiels qui composent une appli-
cation mobile. Ces éléments sont considérés comme le noyau principale qui permet de construire
CHAPITRE 2. LES SYSTÈMES D’EXPLOITATION MOBILE 26
3.1 Introduction
Les composants de l’application représentent les objets constitutifs d’une application Android.
Chaque composant est chargé d’une mission bien défini dans l’application Android et sert un objec-
tif distinct par rapport aux autres composants. La description de chaque composant et l’interaction
entre eux est déterminée dans le fichier de manifestation de l’application AndroidManifest.xml (voir
le chapitre précédant).
Les composants élémentaires qu’une application Android peut utiliser sont les suivants :
• Activité
• Service
• Récepteur de diffusion
• Fournisseur de contenu
3.2 Activité
La plupart des applications Android ont des architectures similaires. Penons par exemple, l’ar-
chitecture de l’application PlayStore qui est composée de plusieurs fenêtres, une fenêtre pour la
recherche des applications stockées dans PlayStore, une autre fenêtre, qui s’est ouvert une fois on
clique sur le résultat d’une recherche pour la description de l’application sélectionnée. Au bout
du compte, on peut dire qu’une application est un assemblage de fenêtres entre lesquelles il est
possible de naviguer.
Ces différentes fenêtres sont appelées activités. Pour pouvoir différencier une activité par rapport
à une autre, il faut juste comparer leurs interface graphique : si elles ont des interfaces différents,
c’est qu’il s’agit d’activités différentes (la figure 3.1). Il faut noter qu’une application ne peut jamais
afficher plus qu’une activité à la fois [5].
Il est très important de signaler que ce n’est pas la tâche de l’activité de créer les objets
27
CHAPITRE 3. LES COMPOSANTS FONDAMENTAUX DES APPLICATIONS MOBILES 28
graphiques, elle n’est que l’outil qui sert à faire le lien entre l’interface graphique et la logique
programmatique.
En outre, une activité comporte des informations sur l’état actuel de l’application : ces infor-
mations s’appellent le context. Ce context représente un lien avec le système Android ainsi que les
autres activités de l’application (la figure 3.2).
Comme illustrée dans la figure 3.3, quand une application se lance, elle se positionne tout en
haut de ce qu’on appelle la pile d’activités.
L’activité qui se trouve toujours au-dessus de la pile est celle que l’utilisateur interagit avec.
Lorsqu’une nouvelle activité qui a une priorité supérieure arrive, elle se place directement au som-
met de la pille et c’est elle qui va s’afficher à la place de l’application courante, qui n’est plus qu’à la
CHAPITRE 3. LES COMPOSANTS FONDAMENTAUX DES APPLICATIONS MOBILES 29
deuxième place. L’ancienne activité ne réapparaîtra qu’à partir du moment où toutes les activités
qui se trouvent au-dessus d’elle seront arrêtées et sorties de la pile [5].
Une activité peut se présenter dans trois états qui se distinguent surtout par leur visibilité :
• Active : dans cet état, la position de l’activité est sur le dessus de la pile et elle peut être
utilisée en globalité. Une activité active doit être visible en totalité et elle représente l’appli-
cation qui possède tout le focus ( c’est à dire l’application courante sur-laquelle l’utilisateur
agit).
• Suspendue (paused) : les utilisateurs n’agissent pas directement sur une activité suspen-
due. Généralement, elle est partiellement visible pour l’utilisateur ( par exemple quand on
reçoit un SMS et qu’une fenêtre semi-transparente se pose devant notre activité pour afficher
le contenu du message et nous permettre d’y répondre). Dans cet état, l’application n’a plus
le focus, c’est l’application au-dessus qui l’a. Pour que l’application reprenne le focus, l’uti-
lisateur devra se débarrasser de l’application qui se trouve au-dessus et il pourra à nouveau
par la suite interagir directement avec l’activité. Si le système a besoin de mémoire, il peut
très bien tuer l’application.
• Arrêtée (stopped) : l’activité est complètement invisible à l’écran et certainement, l’ap-
plication n’a plus le focus. Le système retient son état pour pouvoir reprendre, mais il peut
arriver que le système tue l’application pour libérer de la mémoire système.
Lors du démarrage d’une activité, la première méthode qui est lancée est appelée onCreate.
Elle représente l’endroit privilégié pour initialiser les vues et pour démarrer les tâches d’arrière-plan
qui s’exécuteront pendant toute la durée de vie de l’activité. Cette méthode prend en paramètre
un Bundle (pile) qui contient l’état précédent de l’activité.
Cet appel est suivi par la méthode onStart afin d’indiquer le démarrage effectif de l’application
(pendant cet appelle, l’activité est visible). Cette méthode peut aussi être appelée par la méthode
onRestart.
Puis la méthode onResume est appelée dans le but d’exécuter tous les traitements nécessaires
au fonctionnement de l’activité (thread, processus, traitement), initialiser des variables et les lis-
teners. Ces traitements devront être coupées lors de l’appel à la méthode onPause et relancés si
besoin lors d’un futur appel à la méthode onRésume.
Après l’exécution de ces trois méthodes, l’activité devient exploitable et peut être en interaction
avec les utilisateurs. Si une autre activité passe au premier plan, l’activité en cours d’exécution
passera en pause. Il faut noter que juste avant l’appel à la méthode onPause, la méthode on-
SaveInstanceState doit être appelée dans le but de sauvegarder les informations importantes
portées par l’activité. Ces informations pourront être utilisées aux prochains démarrages de l’acti-
vité lors de l’appel à la méthode onRestoreInstanceState ou de l’appel à onCreate.
La méthode onPause permet d’arrêter tous les traitements réalisés (traitement non nécessaire
si l’activité n’est pas visible) par l’activité (traitement, thread, processus). Si l’activité devient
visible à nouveau, cela correspondra à un appel à la méthode onResume. Le passage de l’activité
à l’état “stopper” correspond à un appel à la méthode onStop. Dans cette méthode, il faut arrêter
tous les traitements restants. Une fois stoppée, l’activité peut :
• Soit être relancée : cela s’effectue par un appel à la méthode onRestart suivi du cycle de
vie normal de l’activité.
• Soit être tuée : cela s’effectue par un appel à la méthode onDestroy, dans laquelle vous
devez arrêter tous les traitements restants, fermer toutes les connexions à la base de données,
tous les threads, tous les fichiers ouverts, etc [5].
• les services locaux (started ou unbound service) : sont les services les plus courants, où
l’activité qui lance le service et le service en lui-même appartiennent à la même application.
• Les services distants (bound service) : Il s’agit d’un service qui est lancé par un composant
qui appartient à une autre application. Dans ce cas, il existe toujours une interface qui
permet la communication entre le processus qui a appelé le service et le processus dans
lequel s’exécute le service. Cette communication permet d’envoyer des requêtes ou récupérer
des résultats.
Il est aussi possible d’avoir un service qui applique les deux orientations à la fois. Ainsi, on peut
démarrer un service local et lui permettre d’accepter les connexions distantes par la suite.
Le lancement d’un service local est fait à travers une activité en utilisant la méthode startSer-
vice(). C’est la méthode onCreate() qui permet de créer un service dans le cas où il n’existait
pas. Une fois le service est crée, la méthode onStartCommand () est appelée pour permettre le
lancement de ce service.
Juste comme le cas d’activité, Un service poursuivra son fonctionnement jusqu’à son arrêt, soit
à travers la décision de l’utilisateur, soit à travers l’Android qui décide de l’arrêter pour libérer
la mémoire RAM. Les services sont plus susceptibles d’être stoppés qu’une activité qui se trouve
au premier plan, mais plus favorisés que les autres processus qui ne sont pas visibles. La priorité
a néanmoins tendance à diminuer avec le temps : plus un service est démarré depuis une longue
période du temps, plus il est susceptible d’être arrêté.
Pour utiliser un service distant, il faut prendre en considération d’avoir une connexion persis-
tante avec le service. Pour réaliser cette connexion, on appel la méthode bindService en utilisant
un paramètre de type ServiceConnection qui représente une interface pour le contrôle de l’exé-
cution du service.
CHAPITRE 3. LES COMPOSANTS FONDAMENTAUX DES APPLICATIONS MOBILES 33
Pour qu’un client puisse se libérer d’un service, il est possible utiliser la méthode onUnbind()
[5].
Pour accéder aux données d’un fournisseur de contenu, l’objet ContentResolver qui est uti-
lisé et qui permet de faire la communication en tant que Client avec le fournisseurs. Les tâches
essentielles réalisées d’un fournisseur sont les suivants :
• La réception des demandes de données pour les Clients.
• La réalisation des actions demandées.
CHAPITRE 3. LES COMPOSANTS FONDAMENTAUX DES APPLICATIONS MOBILES 34
Remarque 3.4.0.1 Il faut juste noter qu’il n’est pas nécessaire de développer un fournisseur des
données dans le cas où l’application à réaliser ne partage pas ses données avec d’autres applications.
Les récepteurs de diffusion jouent généralement le rôle d’une passerelles vers d’autres com-
posants de l’application, principalement des activités et des services. Ils sont implémentés sous
la forme d’une sous-classe de la classe BroadcastReceiver et chaque message est un diffuseur
comme objet Intent.
3.6 Conclusion
Dans ce chapitre, on a présenté une explication détaillée sur les principaux composants d’une
application Android. D’abord, on a clarifié la notion de l’activité qui représente l’élément basique
CHAPITRE 3. LES COMPOSANTS FONDAMENTAUX DES APPLICATIONS MOBILES 35
d’une application mobile, ensuite on a passé à présenter le concept de service qui se caractérise par
son exécution en arrière plan. Le composant fournisseur de contenu a été aussi présenté comme
étant le gestionnaire des données d’application partagée, en enfin on s’est mis l’accent sur l’élément
récepteur de diffusion qui est le responsable pour la notification d’événements au niveau de système
Android.
Construction de l’interface
utilisateur
4.1 Introduction
Selon les statistiques présentées dans le premier chapitre, Android est le système le plus utilisé
au monde et par conséquent il s’est installé sur plusieurs supports ayant des volumes différents.
Le défi qui se pose à ce niveau est comment faire pour adapter les applications sous le système
Android à ces différents supports.
Exemple 4.2.1.1 Étant donnée l’application Galerie qui contient un ensemble d’album pour l’af-
fichage des photos. Il faut adapter la taille de chaque photo de l’album à l’écran de chaque terminal
36
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 37
utilisant cette application. Si par exemple la photo est très petite, il faudra l’agrandir et par consé-
quent, elle va perdre totalement sa qualité.
4.2.2 Définition
Les ressources sont des fichiers structurés d’une sorte qu’Android ait la possibilité de choisir
une ressource, parmi d’autres, qui va être utilisée pour s’adapter au matériel sur lequel s’exécute
l’application. L’objectif est de faciliter l’exécution des applications pour toutes les situations diffé-
rentes.
Le seule moyen qui permet aux ressources d’être adaptées aux différentes types de terminaux est
l’utilisation du langage de description XML [5].
4.2.3 XML
Définition
Le principe d’un langage de programmation (Java, C++, etc.) est de donner des instructions
au terminal pour qu’il puisse réaliser des calculs, et par la suite, mettre en forme le résultat de ces
calculs dans une interface graphique.
La syntaxe d’XML
Similairement au format HTML, un fichier XML commence par une déclaration signifiant l’uti-
lisation d’un langage XML. La première ligne dans la figure 4.1 permet d’indiquer que :
• On utilise la version 1.0 de XML.
• On utilise l’encodage des caractères qui s’appelle utf-8 qui est une façon de décrire les
caractères que contiendra le fichier.
la balise représente la composante la plus basique dans un format XML. Elle débute par le signe
< et se termine par >. On peut avoir deux types de balises :
• Une balise ouvrante : par exemple <bibliotheque>.
• Une balise fermante : Il faut noter que chaque balise ouvrante doit être fermée. Il existe
deux façon pour fermer une balise ouvrante :
- Soit par une balise fermante (exemple </bibliotheque>), auquel cas on peut avoir du
texte ou d’autres balises entre la balise ouvrante et la balise fermante.
- Soit on ferme la balise directement dans son corps :<bibliotheque />. La seule différence
est qu’on ne peut pas mettre de contenu entre deux balises puisqu’il n’y en a qu’une.
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 38
Ce type d’informations, qu’il soit fermé par une balise fermante ou qu’il n’en n’ait pas besoin,
s’appelle un nœud. On remarque dans la figure 4.1, que l’on a un nœud appelé bibliotheque, deux
nœuds appelés livre, etc.
la racine représente le nœud qui fait rejoindre tous les autres nœuds ( le nœud <bibliotheque>).
Dans le fichier XML, on peut avoir au moins une racine et au plus une racine dans laquelle on peut
établir toute une hiérarchie. Pratiquement, il est possible d’ajouter d’autres nœuds entre la balise
ouvrante et la balise fermante d’un nœud. Ces nœuds s’appellent des enfants, et le nœud encapsu-
lant s’appelle le parent. Les nœuds aussi peuvent avoir des attributs pour décrire des informations.
Dans la figure 4.1, le nœud <prix> a l’attribut devise (dans le douzième ligne).
Les ressources sont classifiées dans une hiérarchie particulière de répertoires selon leurs types.
Pour qu’Android puisse retrouver facilement ces ressources, il faut que chaque type de ressource
soit associé à un répertoire particulier. Ces différents répertoires sont rassemblés dans un répertoire
globale nommé res. Ce répertoire est structuré de la manière suivante :
• Dessin et image (res/drawable) : contient les ressources de type image ( les images de
type PNG, JPEG et GIF) ainsi que des fichier XML décrivant des dessins ( ce qui donne
des images vectorielles qui ne se dégradent pas quand on les agrandit).
• Interface graphique (res/layout) : contient des fichiers XML qui représentent la dispo-
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 39
En d’autres termes, en partant du nom du répertoire par défaut, il est possible de créer d’autres
répertoires qui permettent de déterminer à quels types de matériels les ressources contenues dans ce
répertoire sont destinées. Les restrictions sont représentées par des quantificateurs qui permettent
de préciser le matériel pour lequel les fichiers dans ce répertoire sont destinés. La syntaxe des
quantificateurs est présentée dans la figure 4.3 [5].
Remarque 4.2.5.1 On n’a pas besoin de créer des quantificateurs si on veut utiliser uniquement
l’emplacement par défaut.
Ces quantificateurs sont séparés par un tiret. Si Android n’arrive pas à trouver l’emplacement
dont le nom corresponde exactement aux spécifications techniques du terminal, il cherchera parmi
les autres répertoires ayant la solution la plus proche. Les principaux quantificateurs avec leurs
priorités sont les suivants :
• Langue et région (priorité 2) : Ce quantificateur représente la langue du système. Il faut
au debut indiquer une langue, ensuite, il y aura le choix d’ajouter une région en utilisant le
symbole « -r », voici quelques exemples :
- En pour l’anglais ;
- Fr pour le français ;
- Fr-rFR pour le français mais uniquement celui utilisé en France ;
- Fr-rCA pour le français mais uniquement celui utilisé au Québec ;
- ect
• Taille de l’écran (priorité 3) : Il s’agit de la taille de la diagonale de l’écran :
- Small pour les écrans de petite taille ;
- Normal pour les écrans standards ;
- Large pour les grands écrans (par exemple les tablettes tactiles) ;
- Xlarge pour les très grands écrans (par exemple téléviseurs).
• Orientation de l’écran (priorité 5) : Il existe deux valeurs :
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 40
Exemple 4.2.5.1 Si un utilisateur a un terminal avec une grande résolution, Android cherchera
dans le répertoire res/drawable-hdpi !. Si il a un terminal avec une résolution moyenne, le système
cherchera dans le répertoire res/drawable-mdpi/. Si il a un terminal avec une petite résolution,
Android cherchera dans le répertoire res/drawable-ldpi puisqu’il s’agit de la solution la plus
proche de la situation matérielle réelle.
• res/drawable-small : pour avoir des images spécifiquement pour les petits écrans.
• res/drawable-large : pour avoir des images spécifiquement pour les grands écrans.
• res/layout-fr : pour avoir une mise en page spécifique destinée à tous ceux qui ont un
système en français.
• res/layout-fr-rFR : pour avoir une mise en page spécifique destinée à ceux qui ont choisi
la langue Français (France).
• res/values-fr-rFR-port : pour des données qui s’afficheront uniquement à ceux qui ont
choisi la langue Français (France) et dont le téléphone se trouve en orientation portrait.
• res/values-port-fr-rFR : n’est pas possible, c’est à ça que servent les priorités : il faut
impérativement mettre les quantificateurs par ordre croissant de priorité (La priorité de la
langue est 2, celle de l’orientation est 5).
• res/layout-fr-rFR-en : n’est pas possible puisqu’on a deux quantificateurs de même prio-
rité et qu’il faut toujours respecter l’ordre croissant des priorités. Il nous faudra créer un
répertoire pour le français et un répertoire pour l’anglais.
Il faut noter que tous les répertoires de ressources qui sont différenciés par des quantificateurs
devront avoir le même contenu.
La réponse est tout simplement grâce à la classe R qui se trouve dans le fichier R.java. Cette
classe est définit comme :
• Classe en lecture seule : il s’agit de générer automatiquement le code java (le code est définit
automatiquement par Android).
• Classe statique : il s’agit de déclarer des constantes dont les valeurs représentent des iden-
tifiants des ressources [2].
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 42
Comme la figure 4.4 montre, la classe R se compose d’un ensemble des classes internes qui
représentent les ressources crées dans le répertoire res.
Grâce au langage XML qu’une application mobile peut s’adapter facilement au volume de
chaque écran. À titre exemple, si une application est destinée à être utilisée dans les terminaux
ayant des petits écrans, les utilisateurs de tablettes ne pourront pas l’utiliser à cause de l’illisibilité
de l’application. Dans la deuxième partie de ce chapitre, on va mettre l’accent sur les composants
fondamentaux (les vues et les layouts) d’une interface graphique, la façon avec laquelle on peut
créer, récupérer et manipuler ces composants à partir du code Java.
L’utilisation du langage XML dans la partie interface doit être séparée par rapport au code
Java ( partie traitement). Toutes les opérations concernant la création d’interface graphique en
utilisant XML pourront être faite à travers l’utilisation du code Java, cependant le code sera plus
complexe à maintenir. Il existe essentiellement deux types d’éléments qui construisent une interface
graphique (la figure 4.5) :
• Layout(View groupe) : des éléments qui mettent en forme un contenu
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 43
4.3.1 Layout
Un layout (gabarit) est une vue particulière qui n’a pas l’objectif d’offrir un contenu, mais qui
peut contenir d’autres vues. Il s’intéresse pour l’organisation des vues (un bouton, un texte, une
image, etc...) et permet aussi de les positionner d’une manière cohérente.
Les vues contenues sont les enfants, la vue englobante est le parent. Une vue qui ne peut pas
en englober d’autres est appelée un widget (composant).
Il existe plusieurs types de layout, dans ce cours ,on va présenter les principaux layout qui sont
les plus utilisés dans la construction d’une interface graphique sous Android (la figure 4.6).
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 44
LinearLayout
Ce type de Layout permet de mettre les vues les unes après les autres ( sur une même ligne) selon
une certaine orientation ( verticalement ou horizontalement). L’attribut qui permet de préciser la
façon dont les éléments contenus ( les vues) seront alignés est appelé android :orientation. Deux
options sont disponibles :
• Vertical : permet d’orienter les vues sur une ligne verticale.
• Horizontal : permet d’orienter les vues sur une ligne horizontale.
Il existe aussi deux autres attributs qui fournissent une taille de largeur et hauteur pour les
vues contenues dans ce type de layout, les attributs sont :
• android :layout_width : fournit une taille de largeur
• android :layout_height : fournit une taille de hauteur
Ces deux attributs peuvent prendre trois types de valeurs :
• wrap_content : la taille de layout dépend directement de la taille des composants qu’il
contient. Pour demander au Widget d’occuper une taille naturelle (la taille de son contenu
pour le texte par exemple). S’il est trop gros par rapport à la taille disponible. Android
s’occupera par exemple de couper le texte s’il n’y a plus de place.
• fill_parent : dans ce cas on demande au composant d’occuper tout l’espace disponible chez
son layout (après le placement des autres widgets).
• Une taille fixe : par exemple 50 px (pixels). Donc quel que soit la taille de l’écran, l’élément
occupera exactement 50 px [5].
RelativeLayout
Il permet d’organiser les vues les unes par rapport aux autres. Elles peuvent également être
placées par rapport au RelativeLayout parent. Par exemple, on peut centrer une vue dans le
RelativeLayout à l’aide des attributs suivants :
• android :layout_centerInParent="true" : permet de placer une vue au centre d’un Relati-
veLayout
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 45
TableLayout
Le TableLayout défini un tableau (sans bordures), dans lequel on peut rajouter des lignes (Ta-
bleRow) qui contiendront les composants (vues). La figure 4.9 représente un exemple d’utilisation
de ce type de Layout
FrameLayout
Il permet d’afficher une seule vue. Il n’est destiné à afficher qu’un élément, mais il est possible
d’en mettre plusieurs dedans puisqu’il s’agit d’un ViewGroup.
Exemple 4.3.1.1 Quand on veut faire un album photo, il suffit de mettre plusieurs éléments dans
le FrameLayout et de ne laisser qu’une seule photo visible, en laissant les autres invisibles grâce à
l’attribut android :visibility
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 46
Remarque 4.3.1.1 Tous ces type de Layout seront pris d’une façon détaillée dans la séance de
TP.
Il existe plusieurs types de widgets, dans ce cours , on va présenter les principales vues qui sont
les plus utilisées dans la construction d’une interface graphique sous Android (la figure 4.10).
Textview
Il permet d’afficher une chaîne de caractères que l’utilisateur ne peut modifier. La figure 4.11
présente un exemple d’un fichier XML qui décrit une vue de type Textview. Le fichier contient
la syntaxe @stringtextView qui implique l’utilisation d’une ressource de type string. L’attribut
android :textSize permet de préciser la taille des caractères, et l’attribut android :textColor permet
également de préciser la couleur du texte. Cette notation avec un ] permet de décrire des couleurs
à l’aide de nombres hexadécimaux.
EditText
L’utilisation de ce type de widget permet aux utilisateurs d’interagir avec des textes ( ce sont
des TextView éditables). Un EditText hérite de TextView ce qui implique d’avoir les mêmes attri-
buts en XML et ils peuvent utiliser les mêmes méthodes Java.
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 47
D’après la figure 4.12, on constate que l’utilisation de l’attribut android :hint est faite au lieu
de l’attribut android :text qui est utilisé dans la figure 4.11. La différence essentielle entre ces deux
attributs c’est qu’avec android :text le remplissage de EditText est fait par le text demandé, alors
qu’avec android :hint le remplissage doit être accompagné par un autre attribut android :inputType
qui permet de préciser le type de texte à remplir dans l’EditText et permet aussi d’adapter le clavier
selon ce type de text.
Exemple 4.3.2.1 Si on précise dans le fichier XML que l’attribut EditText va servir à écrire une
adresse e-mail en utilisant l’attribut android :inputType , alors l’arobase sera proposé tout de suite
à l’utilisateur sur le clavier.
Button
Un simple bouton, même s’il s’agit en fait d’un TextView cliquable (la figure 4.13).
CheckBox
Une case qui peut être dans deux états : cochée ou pas. Dans la figure 4.14, l’attribut an-
droid :checked="true" signifie que la case est cochée par défaut.
RadioButton RadioGroup
Les RadioButton ont la même base que la CheckBox, à la différence que l’utilisateur n’a la
possibilité de cocher qu’une seule case à la fois. Il est toujours conseillé de les regrouper dans un
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 48
RadioGroup.
Un RadioGroup est pratiquement un layout, mais il n’est utilisé qu’avec des RadioButton. Son
objectif est de faire en sorte qu’il puisse n’y avoir qu’un seul RadioButton sélectionné dans tout le
groupe.
Pour pouvoir associer un listener à une vue, il est recommandé d’utiliser une des méthodes
suivantes :
• Héritage : à travers une implémentation de l’interface au niveau de la classe, auquel cas il
faudra réécrire les méthodes de callback directement dans la classe.
• Classe anonyme : en donnant directement une implémentation unique à la vue.
• Attribut : cette méthode est utilisée dans le cas, où un utilisateur veut réutiliser un listener
sur plusieurs vues.
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 49
Figure 4.15 – Fichier XML d’un RagioGroup qui englobe des Radiogroup
4.4 Conclusion
La première partie de ce chapitre vise à illustrer le concept de ressource, la raison pour laquelle
ce concept a été réalisé, ses différents types ainsi que la notion de quantificateur qui est le respon-
sable pour l’organisation des ressources. Enfin, on a expliqué l’utilité de la classe R qui représente
le moyen permettant de récupérer une ressource à partir du code Java.
La deuxième partie de ce chapitre porte sur les éléments de base qui construisent une interface
graphique (les vues et les layouts), la façon avec laquelle on peut créer, récupérer et manipuler ces
éléments à partir du code Java.
Dans le chapitre suivent, le concept d’une base des données sous Android va être abordé, la
notion du moteur SQlite ainsi que la projection de cette notion sur l’univers Android.
CHAPITRE 4. CONSTRUCTION DE L’INTERFACE UTILISATEUR 50
5.1 Introduction
De nombreuses applications mobiles manipulent des données complexes et il est souvent né-
cessaire de trouver un moyen efficace de stocker ces données et d’y accéder. Par exemple une
bibliothèque qui contient plus de 100 000 ouvrages et on doit chercher en moins d’une seconde un
ouvrage bien précis. C’est pour cela qu’il est indispensable d’avoir une base des données qui est
optimisée pour ce type de traitements.
Les bases de données pour Android sont réalisées à l’aide d’un SGBD très efficace pour les
applications embarquées dénommé SQLite ( Il est aussi utilisé dans d’autres applications telles que
Skype, Adobe Reader, Firefox, etc).
Exemple 5.2.0.1 Une table peut contenir le prénom, le nom et le métier de plusieurs utilisateurs,
on aura donc pour chaque utilisateur les mêmes informations. Il est possible de représenter une
51
CHAPITRE 5. LES BASES DES DONNÉES SOUS ANDROID 52
table par un tableau, où les champs seront symbolisés par les colonnes du tableau et pour lequel
chaque ligne représentera une entrée différente (la figure 5.1).
Une base de données relationnelle est une base de données où l’information est organisée dans
des tableaux à deux dimensions.
Pour pouvoir manipuler les données, il est nécessaire d’avoir un système appelé SGBD ( Sys-
tème de Gestion de Base des Données) : un logiciel moteur qui permet de manipuler la base des
données et de diriger l’accès à son contenu en utilisant des règles bien précises .
Pour utiliser un SGBD et pour avoir la possibilité d’interroger une base des données, il est
indispensable d’utiliser un langage SQL (Structured Query Language). Ce langage permet de faire
des opérations telles que La recherche, l’ajout, la modification et la suppression des données dans
les bases de données.
5.3 SQLite
5.3.1 Introduction
A la base, SQLite est un moteur de base de données relationnelle, sa particularité par rapport à
d’autres moteurs est qu’il est indépendant d’un système de gestion de base de données. Cela dit une
base de données SQLite peut être intégrée facilement dans le code d’un programme, d’où l’usage
récurrent de cette base dans le contexte des applications mobiles sous Android , iOS ou Windows
Phone. Intégrer cette base dans les applications peut donc se faire dans un fichier appartenant au
programme et indépendant de la plateforme en question. SQLite est open source et écrit en C.
L’élément le plus essentiel dans cette architecture est le compilateur SQL . C’est là ou ré-
side toute la magie de SQLite. Le séquenceur Tokenizer récupère les commandes à traiter et les
organisent en des ensembles de requêtes traitables. Le parseur analyse quant à lui s’occupe de
parser les requêtes en différents objets du langage SQL. Le générateur de code ensuite va créer
le code bas niveau correspondant qu’on appelle le bytecode. L’objectif fondamental de SQLite est
CHAPITRE 5. LES BASES DES DONNÉES SOUS ANDROID 53
de surtout créer une base de donnée indépendante qui est facile à utiliser et qui peut en même
temps fonctionner sur n’importe quelle plateforme ou environnement. Pour cette raison, SQLite
dépasse en fait les autres bases de données mais seulement lorsqu’il s’agit de petites ou moyennes
applications. Et cela se manifeste surtout en termes de vitesse d’exécution. En termes de langages,
SQLite s’incorpore avec n’importe quel langage pratiquement. Même si ce dernier est écrit en C, il
en existe plusieurs extensions permettant de l’utiliser avec d’autres langages. Ces extensions vont
du coup fournir des curseurs ou des objets de connections spécifiques au langage en question. Ce
qui facilite encore plus l’usage de SQLite [9].
On retrouve dans ce package en premier lieu la classe SQLiteOpenHelper qui est l’élément de
base pour créer une instance de base de donnée. Ensuite , on retrouve toutes les objets permettant
la manipulation et la gestion des requêtes vis à vis de la base en question. Parmi ces objets, on
cite le SQLiteDatabase avec les méthodes de manipulation (insert(), delete() ...), le Cursor qui
récupère le résultat d’une requête a un objet SQLiteDatabase et aussi surtout le SQLiteQuery qui
représente la requête en question [9].
CHAPITRE 5. LES BASES DES DONNÉES SOUS ANDROID 54
Les curseurs sont des objets qui contiennent les résultats d’une recherche dans une base de
données. Ce sont en fait des objets qui fonctionnent comme les tableaux .Ils contiennent les colonnes
et les lignes qui ont été renvoyées par la requête. Un objet de type Curseur possède un pointeur
sur l’enregistrement courant. À la réception de cet objet, le pointeur se trouve devant le premier
enregistrement.
Un Cursor est capable de retenir la position du dernier élément que l’utilisateur a consulté, il
est donc possible de naviguer d’avant en arrière parmi les lignes grâce aux méthodes suivantes :
• boolean moveToNext() : pour aller à la ligne suivante. Par défaut on commence à la ligne
-1, donc, en utilisant un moveToNext() sur un tout nouveau Cursor, on passe à la première
ligne.
• boolean moveToPrevious() pour aller à l’entrée précédente.
Les booléens utilisées avec ces méthodes valent true si l’opération s’est déroulée avec succès,
sinon false (auquel cas la ligne demandée n’existe pas).
5.6 Conclusion
Ce cinquième chapitre porte sur tous ce qui concerne la base des données sous Android. Dans
ce chapitre, on a commencé à présenter quelques notions de bases (généralités) sur les bases des
données, ensuite on a donné une explication générale du monteur SQlite ainsi que son architecture.
Après avoir expliqué le concept de SQlite, on s’est focalisé sur la projection de ce moteur par rap-
port au système Android, le principe de base du package android.database.sqlite qui est chargé du
regroupement de l’implémentation de SQlite, ainsi que la classe SQLiteOpenHelper qui représente
l’élément de base pour créer une instance de base de donnée.
Le prochain chapitre visera à résumer toutes les étapes et les recommandations nécessaires pour
un déploiement fiable d’une application Android.
<
Chapitre 6
6.1 Introduction
Une fois les différentes étapes de développement et de test sont réalisées, il est le moment de
présenter l’application aux différents utilisateurs qui vont télécharger et utiliser cette application.
La manière dont l’application est présentée au publique joue un rôle crucial dans l’augmentation
du nombre de téléchargement. C’est pour cette raison que cette étape représente une partie indis-
pensable, celle pour laquelle un développeur d’application mobile a tant travaillé.
Un APK est un format de fichier qui permet de distribuer (déployer) et d’installer des appli-
cations Android. Pratiquement, un APK est une archive (comme les ZIP ou les RAR) qui porte
tous les fichiers essentiels pour l’exécution d’une application. Ces fichiers doivent s’organiser d’une
manière particulière.
56
CHAPITRE 6. DÉPLOIEMENT D’UNE APPLICATION MOBILE 57
6.2.3 Le nettoyage
Il se peut parfois qu’il existe des fichiers qui ne sont pas nécessaires pour la version finale, et qui
ne feront qu’alourdir l’application. Les répertoires les plus susceptibles d’avoir des fichiers inutiles
sont souvent les répertoires : res ou encore assets.
Comme, il est illustré dans les figures 6.1 et 6.2, il existe deux attributs : android :versionName
et android :versionCode. Le premier attribut permet de définir la version d’application en utilisant
une chaîne de caractères (par exemple « 1.0 alpha » ou « 2.8.1b »). Cet attribut sera celui qui
est visible pour l’utilisateur, à l’opposé de android :versionCode qui ne sera pas visible pour l’uti-
lisateur et qui ne peut contenir que des nombres entiers. Ainsi, si l’ancien android :versionCode
de l’application était « 1 », le nouveau code doit avoir un nombre supérieur à « 1 » pour que le
marché d’applications sache qu’il s’agit d’une version plus récente.
6.3.2 E-mail
Ce type de distribution est rarement utilisé par ce qu’il est très possible de pirater une ap-
plication déployée par un e-mail (l’utilisateur doit accepter les applications provenant de sources
inconnues). Il n’est pas recommandé d’utiliser la distribution par e-mail que pour des personnes
confiants. Il est aussi important de savoir que Google a fait le possible pour anticiper cette situation
en incluant un module qui détecte si un e-mail contient un APK en fichier joint.
6.3.3 Un site
C’est une solution qui permet de toucher un plus large public : il suffit de mettre l’APK de
l’application à disposer sur le site, gratuitement ou contre une certaine somme, et l’utilisateur
pourra l’installer. Cette méthode souffre des mêmes défauts que la distribution par e-mail, puisque
l’utilisateur devra accepter les applications provenant de sources inconnues et que le risque de
piratage est toujours aussi élevé.
Une fois le compte développeur est crée, une signature virtuelle de l’accord de distribution des
applications Android est obligatoire pour pouvoir par la suite payer les frais d’enregistrement (une
somme de 25 $) (la figure 6.3). Le nom du développeur sera affiché aux utilisateurs, comme il y a
la possibilité d’ajouter d’autres informations de contact telles que : email de contact, site web,...,etc.
En outre, si l’application à disposer est considérée comme une version payante, il est nécessaire
de configurer un profil de paiement qui va permettre d’administrer tous les opérations de paiements
mensuels ainsi qu’avoir la possibilité d’accéder aux différents rapports de ventes à partir de Play
Console [8].
Pour faire cela, il faut sélectionner "Toutes les applications" (all aplications) dans le menu, et
cliquer par la suite sur "Créer une application" (create application) (la figure 6.4). Il est aussi
indispensable de choisir une langue et mettre un titre de l’application qui va être affiché dans la
plateforme PlayStore (la figure 6.5).
CHAPITRE 6. DÉPLOIEMENT D’UNE APPLICATION MOBILE 61
Il est recommandé de remplir tous l’ensemble d’informations même si quelques champs ne sont
pas obligatoires. Plus, les informations sont riches, plus il sera facile que l’application soit affichée
lors d’un résultat de recherche.
Détails du produit
Il joue un rôle très intéressant dans le point de vue commerciale. Il faut mettre d’abord un
titre de l’application qui ne doit pas dépasser 50 caractères, une description abrégée qui doit se li-
miter à 80 caractères et une description détaillée qui ne dépasse pas 4 000 caractères (la figure 6.6).
Pour que l’application soit attirante et par conséquent elle aura plus de visiteurs, il est recom-
mandé de faire une étude qui permet de choisir un mot-clé qui doit générer plus de trafic dans
le titre de l’application. Il est déconseillé de mettre des mots-clés qui n’ont aucune relation avec
l’application, sinon l’application sera suspendue complètement sur Google Play [8].
Il faut faire attention aux différentes captures d’écran et aux vidéos utilisées dans la description
détaillée de l’application. Il est possible d’utiliser jusqu’à 8 captures d’écran, une pour chaque type
d’appareil compatible (la figure 6.7). Il faut prendre en considération que ces captures doivent
présenter les caractéristiques essentielles de l’application et être attrayants afin d’attirer l’attention
de l’utilisateur.
CHAPITRE 6. DÉPLOIEMENT D’UNE APPLICATION MOBILE 63
Langues
l’Anglais est la langue utilisée par défaut, mais il est possible de la personnaliser et même de
l’annexer avec des traductions pour l’application. Il est préférable d’ajouter une traduction pour
assurer une bonne expérience surtout dans le cas où l’application sera utilisable dans différents
pays.
Catégorie
Dans cette phase, il faut choisir le type d’application à disposer et la catégorie selon laquelle elle
s’est classifiée ( météo, jeux, outils,..,etc) (la figure 6.8), comme Il est possible aussi de sélectionner
une catégorie supplémentaire ( information facultative).
Coordonnées de contact
Pour avoir la possibilité de contacter avec les utilisateurs, il est indispensable de mettre au
moins une adresse électronique. Il est recommandé d’ajouter d’autres moyens de contacts pour que
les utilisateurs puissent avoir plus de l’aide par rapport à l’utilisation de l’application (la figure
CHAPITRE 6. DÉPLOIEMENT D’UNE APPLICATION MOBILE 64
6.9).
Politique de confidentialité
À ce niveau, il faut assurer une URL avec une politique de confidentialité bien déterminée afin
que les utilisateurs aient une connaissance concernant l’utilisation de leurs données sensibles et
celles de leur appareil (la figure 6.10). De plus, le lien vers la politique de confidentialité doit être
placé à la fois sur la liste de PlayStore et dans l’application dans le cas où l’application exige un
accès à des contenus sensibles.
en application gratuite et impossible de faire l’inverse. À ce niveau, on peut choisir les pays dans
lesquels l’application sera disponible (la figure 6.13).
6.5 Conclusion
Dans ce chapitre, on s’est focalisé sur une phase qui est importante pour un développeur
d’application mobile. Le fait d’avoir une bonne application ne signifie pas forcement qu’elle sera
téléchargées et utilisées par un très grand nombre d’utilisateurs. En plus, le défis n’est pas seule-
ment que l’application soit téléchargée par le plus grand nombre d’utilisateurs possible, mais aussi
qu’ils continuent à l’utiliser au fil du temps.
C’est pour ces raisons qu’on s’est intéressé par cette étape dans le cycle de vie du développement
d’une application Android. Au début, on a montré quelques vérifications qui sont obligatoires avant
la distribution de l’application dans le but d’assurer une fiabilité du produit. Ensuite on a passé
à présenter quelques supports de déploiement qui représentent les moyens les plus utilisés pour
distribuer une application Android. Enfin on a conclu par une description de différentes phases
nécessaires pour la distribution d’une application Android sur Google Play.
Chapitre 7
7.1 Objectif
L’objectif de cette partie est de guider l’étudiant à maîtriser les processus essentiels permettant
de créer une simple application mobile. L’application à créer, est un simple jeu qui permet de :
• Générer un nombre secret aléatoire entre 1 et 100.
• L’utilisateur doit deviner le nombre secret en plusieurs tentatives.
• Pour chaque tentative, le jeu répond par l’une des indications suivantes :
- Votre nombre est plus petit
- Votre nombre est plus grand
- BRAVO
• Le numéro de la tentative est affiché et aussi indiqué par une ProgressBar
• Pour chaque partie gagnée, le score incrémente de 5 points
• L’historique des essais est affiché dans ListView
La deuxième étape porte sur la configuration du projet. Durant cette étape, l’étudiant doit
spécifier un ensemble d’informations (la figure 7.2) :
• Name : le nom de l’application
• Package name : identifier l’organisation dans laquelle vous travaillez
• Save location : le chemin de l’application.
• Langague : Le langage de programmation choisi pour le développement de l’application.
Une fois la configuration du projet est faite avec succès, il apparaitra une figure similaire à la
67
CHAPITRE 7. DÉVELOPPEMENT D’UNE APPLICATION MOBILE (CAS PRATIQUE) 68
figure 7.3 qui est considérée comme la première page qui va être affichée indiquant le premier code
source généré de l’activité choisi lors de la première étape.
Il faut noter que pour pouvoir exécuter une application android, il faut utiliser un émulateur.
Pour faire ça, en suivant le chemin (Tools/AVD Manager), il apparaitra une fenêtre similaire à
celle présentée dans la figure 7.4. Vous devez cliquer sur le bouton Create Virtual Device (Créer un
périphérique virtuel) pour avoir la possibilité de choisir le type de terminal mobile sur lequel vous
devez exécuter l’application. Dans la partie gauche de la figure 7.5, il y a un ensemble de catégories
des terminaux mobiles à choisir avec leurs caractéristiques et la partie droite le nombre de pixel
approprié pour le terminal choisi.
Après avoir choisi le type de terminal, il apparaitra une fenêtre indiquée dans la figure 7.6 et qui
présente le démarrage d’un émulateur qui va nous permettre par la suite d’exécuter l’application
comme si elle est exécutée dans un terminal physique.
Pour pouvoir réaliser l’interface finale de l’application, qui doit être similaire à celle indiquée
dans la figure 7.9, il faut suivre les étapes suivantes :
Comme on a vu dans la deuxième partie du chapitre 04, pour avoir la possibilité d’ajouter les
différents composants de l’interface d’une application mobile, il faut d’abord insérer un Layout, qui
est considéré comme un conteneur qui se charge de faire l’organisation de différents composants
(vues). Suivant, les différents types de Layout ainsi que leurs caractéristiques et leurs particula-
CHAPITRE 7. DÉVELOPPEMENT D’UNE APPLICATION MOBILE (CAS PRATIQUE) 70
rités, expliqués dans le chapitre 04, dans cet exemple on va utiliser le conteneur RelativeLayout
qui va nous donner la possibilité de faciliter l’organisation des vues, les unes par rapport aux autres.
Généralement le layout généré par default est ConstraintLayout ( voir la partie gauche de la
figure 7.7). Pour changer le type de conteneur, il suffit de cliquer à droite sur l’interface de l’ap-
plication et de faire convertir le conteneur généré vers le conteneur RelativeLayout (la figure 7.10 ).
Une fois le conteneur RelativeLayout est ajouté, il est le moment d’insérer les différents com-
posants (vues) formant l’interface de notre application. On commence par les étiquettes : Deviner,
score et la zone où la valeur de score va être affichée. Ces trois étiquettes sont considérées comme
des vues de type TextView qu’on peut les insérer par un simple glissement via la palette qui se
trouve dans la partie gauche de la figure 7.11. Il faut noter que la partie droite de la même figure
(attributes) présente les différentes caractéristiques des composants telles que : l’identificateur du
composant, la zone d’édition, la couleur, la taille....etc.
Après avoir ajouté les TextView, on doit insérer une vue de type EditText qui représente le
CHAPITRE 7. DÉVELOPPEMENT D’UNE APPLICATION MOBILE (CAS PRATIQUE) 73
composant sur lequel l’utilisateur devine le nombre secret. Pour y faire, il faut glisser le composant
Number qui se trouve dans l’onglet Text dans la palette . En suite et avec la même façon, on ajoute
un composant de type Button qui se trouve dans l’onglet Common dans le quel l’utilisateur valide
le nombre qu’il vient de deviner ( la figure 7.12 ).
En suivant les mêmes étapes pour finaliser l’interface finale de l’application. La figure 7.13
présente les emplacements des vues : ProgressBar et ListView.
Au début il faut créer une fonction qu’on l’appelle initialisation (figure 7.14) qui permet de :
• Générer un nombre aléatoire entre 1 et 100 qui sera stocké dans la variable secret et qui
sera incrémenté à chaque appel de la fonction ( première instruction).
• Accéder au nombre de tentatives en fonction de la variable compteur nommée conter (troi-
sième instruction).
• Faire avancer le ProgresBar à chaque tentative via l’incrémentation de la variable conter
(quatrième instruction).
Une fois la fonction initialisation est crée, on passe directement à la phase qui permet de tester
le nombre deviné par l’utilisateur. Les instructions qui font ce test sont présentées dans la figure
CHAPITRE 7. DÉVELOPPEMENT D’UNE APPLICATION MOBILE (CAS PRATIQUE) 75
7.15.
Premièrement, on doit récupérer le nombre saisie par l’utilisateur qui est stocké dans la variable
number. En suite on fait le test par rapport au nombre secret qui a été crée dans la fonction
initialisation et selon le résultat du test, on affiche le message approprié qui est soit :
• Le nombre est inférieur par rapport au nombre secret
• Le nombre est supérieur par rapport au nombre secret
• Le nombre est égale au nombre secret, qui signifie que l’utilisateur a gagné le jeu. Dans ce
cas le score doit s’incrémenter de 5 et stocké dans la variable score.
Le score doit être affiché dans un textView et aussi dans le ProgressBar.
Une fois l’interface de l’application est faite avec succès et après avoir complété le code source
de l’application, l’étudiant sera prêt à exécuter l’application à travers l’émulateur et il devra avoir
une fenêtre équivalente à celle de la figure 7.16.
CHAPITRE 7. DÉVELOPPEMENT D’UNE APPLICATION MOBILE (CAS PRATIQUE) 77
[1] Hébuterne, S. (2018). Android Guide de développement d’applications Java pour Smartphones
et Tablettes. 4ème édition.
[2] Nazim, B. (2017). Android 7, Les fondamentaux du développement d’applications Java. Édi-
tions ENI.
[3] Hébuterne, S. (2017). Développez une application Android programmation en Java sous An-
droid Studio. 2ème édition.
[4] Michel, M. (2013). Créez des applications iPhone, iPad et iPod Touch. Édition OpenClass-
Rooms.
[5] Frédéric, F. (2013). Créez des applications pour Android. Édition OpenClassRooms.
[6] Patrice, K. (2010). Les systèmes embarqués complexes. Note de cours. École Nationale Supé-
rieure d’électronique, Informatique, Télécommunications, Mathématique et Mécanique. Bor-
deaux.
[7] Pierre, F. (2005). Linux embarqué 2ème édition. Éditions EYROLLES
[8] https ://fr.yeeply.com/blog/publier-application-google-play-store/. Consulté le 15/10/2020.
[9] http ://tutorielandroid.francoiscolin.fr/bdd.php. Consulté le 05/04/2020.
[10] https ://www.statista.com/statistics/271644/worldwide-free-and-paid-mobile-app-store-
downloads/. Consulté le 18/03/2020.
78
ANNEXE
Annexe
- Natives
- Web (*)
- Hybrides
Q2. Quelles sont les types d'applications mobiles les plus couteuses ?
- Natives (*)
- Web
- Hybrides
Q3. Quelle est la couche la plus haute dans l'architecture des systèmes Android ?
- Librairies
- Application Framework
- Autres (*)
Q4. Quelle est la couche responsable pour la mise à jour des versions Android ?
- Librairies
- Application (*)
- Autres
- Manifest : un répertoire qui contient le fichier AndroidManifest.xml qui estle premier fichier
qui va être lu dans le démarrage d’Android et qui est considéré comme une carte d’identité
d’une application mobile.
- Java : un répertoire qui contient l’ensemble du code source de l’application.
- Res : un répertoire qui contient toutes les ressources nécessaires de l’application ( layout,
valeurs,…etc.)
Q8. Expliquez la différence entre les termes suivants : JDK, SDK, JRE.
ANNEXE
Q9. Quelle est la différence entre une version Android et une version ROM Custom ?
La version ROM Custom est un système créé à partir du code source d'un système Android
existant à condition que les droits accordés par les auteurs le permettent.