Cours de Programmation Mobile
Cours de Programmation Mobile
ISP-KALEMIE/MOBA
NOTES DE COURS DE
PROGRAMMATION
MOBILE
AVANT PROPOS
De nos jours, les smartphones sont devenus des appareils courants et fréquemment
utilisées. Ce support est consacré à l’étude des méthodes de programmation orientées vers la
production des applications utilisées sur des supports mobiles tels que les SmartPhones et les
Tablettes. Il est aussi question dans ce support d’initier les étudiants à l’utilisation de
AppInventor pour le développement des applications Android. Il est destiné aux étudiants 3ère
Bachelier en Informatique de gestion.
Pré requis
- Connaissances générales sur l’algorithmique et la programmation.
- Utilisation des Smartphones.
Objectifs
Objectif général
Ce cours vise à développer chez l’apprenant les compétences adéquates pour planifier et
concevoir des applications Mobiles (Android) en utilisant AppInventor.
Objectifs spécifiques
A l’issu de ce cours l’étudiant doit être capable de savoir utiliser et développer une
application Android avec AppInventor.
Public cible
Etudiants de Troisième bachelier (Bac 3) en Informatique de gestion.
Volume horaire
45 heures.
2
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Introduction
A. AppInventor, qu’est-ce que c’est ?
Avant de préciser ce qu’est AppInventor, il est nécessaire de comprendre la logique
commerciale du système d'exploitation mobile Android. Celui-ci se veut être un maximum
libre. Cette notion se décline sous plusieurs angles :
Le code du système est Open Source : libre redistribution d'accès au code source
et de travaux dérivés
Le SDK (Kit de développement) est disponible gratuitement ainsi, le
développement d’applications est abordable.
Ce système est embarqué sur des smartphones de différents constructeurs : HTC,
Samsung, Acer, LG, etc.
Il est généralement possible d’installer n’importe quelle application sur son
téléphone fonctionnant sous Android sous condition de disposer du fichier
d’installation (.APK).
Nous comprenons alors mieux le dessein d’AppInventor : permettre aux utilisateurs lambda
de créer leurs propres applications.
App Inventor est un outil de développement en ligne pour les téléphones et les tablettes qui
fonctionnent avec le système d'exploitation Android. Il faut donc une liaison internet et un
navigateur internet comme Mozilla Firefox ou Chrome. App Inventor est une application web
open-source à l'origine fournie par Google, et maintenant maintenue par le Massachusetts
Institute of Technology (MIT). Cette plate-forme de développement est utilisable par toutes et
tous à condition de posséder un compte Gmail.
La programmation est réalisée sans taper une seule ligne de code, mais simplement en associant
et en paramétrant des briques logicielles toutes faites (langage Scratch).
Des connaissances en programmation orientée objet peuvent toutefois être nécessaires.
Cependant, on pourra s'affranchir complètement de la connaissance des noms des propriétés et
méthodes liées aux objets. En effet des blocs de propriétés, méthodes et événements seront
directement proposés dès la création d'un objet sans que l'on s'en rende compte ce qui simplifie
la programmation.
La programmation orientée objet ne signifie pas que l'on travaille avec des objets
graphiques mais plutôt que l'on manipule des objets informatiques appelés "objets"
qui ont des propriétés, une classe et peuvent elles-mêmes avoir des héritiers, qui
possèdent des méthodes…
L'utilisation de App Inventor rend assez facile la réalisation d'applications Android (en tout cas
plus facile que l'utilisation du programme Google "Android Studio" qui nécessite de connaître
la programmation en Java) mais les possibilités sont plus limitées.
Vérifions que tout fonctionne avant de nous lancer dans une application :
Pour lancer le logiciel il faut, dans l'ordre :
3
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
• lancer "aiStarter" :
cela doit ouvrir la fenêtre suivante :
4
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
1
[Link]
5
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
6
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Nous continuons sur le projet DEMO commencé précédemment. Tout d'abord nous mettons un
label qui permettra d'afficher la valeur. En cliquant sur le bouton d'aide du composant, une
petite description du composant s'affiche.
7
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
8
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
9
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
10
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Lorsque nous cliquons dessus, l’application est compilée, envoyée au téléphone pour être
installée et lancée dessus, cfFigure 15 : Application en test. Cependant, une fois celle-ci quittée,
elle n’est plus disponible sur le mobile. L’application est donc temporairement installée.
Pour installer son application, il y a trois solutions. Toutes trois démarrent sur l’interface web,
en haut à droite de la fenêtre, via le bouton Package for Phone :
11
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
12
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Il faut penser à faire régulièrement des sauvegardes (menu "Projets" puis "enregistrer
le projet")
13
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Voilà donc le bloc qui signifie "quand le Bouton1 est cliqué on rend le label1 visible"
14
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Si vous voulez enregistrer votre application sur votre ordinateur, allez sans l’onglet "Construire"
puis choisissez “App (enregistrer .apk sur mon ordinateur)”
La compilation de votre application s’exécute et vous obtenez un fichier APK qui s'enregistre
dans votre dossier téléchargement.
Deuxième application : des images, du son et du temps
Version N°1 :
Cette deuxième application va afficher une image/bouton. Quand on cliquera dessus un son sera
émis et un texte s'affichera. Vous disposez de 2 fichiers (gong.mp3 et photo_lamache.jpg)
Description de l'interface :
Vous allez donc insérer un bouton, du son (menu "média" puis "son") et un texte
(Label) Pour le paramétrage (propriétés) du bouton vous allez ajouter l'image :
Pour le Label vous y mettrez le texte : "Bienvenue au Lycée LaMache" et le rendrez invisible.
Pour le paramétrage du son vous allez ajouter le fichier son ("Propriétés" puis "Source"):
15
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
16
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Pour placer nos différents éléments correctement les uns par rapport aux autres nous allons les
mettre dans un tableau :
Label1 Zone de texte 1
Label2 Zone de texte 2
Label3 Zone de texte 3
Le tableau se trouve dans le menu de gauche "Disposition" et
s'appelle "arrangement tableau"
On choisira donc 2 colonnes et 3 lignes (dans le menu "propriétés")
Pour les zones de texte il faudra préciser "nombres uniquement" et
pour la 3ème zone de texte ne pas l'activer (en effet elle ne doit pas
pouvoir être modifiée manuellement).
Il peut être très utile de renommer les éléments utilisés afin de rendre leur
utilisation plus facile dans la partie programmation.
Ainsi vous renommerez les 2 boutons par "bouton_plus" et "RAZ" (ce qui est quand
même plus intelligible que "Bouton1" ou "Bouton2"!).
Le programme sera le suivant :
A prendre dans le menu
de droite qui s'appelle
"Math"
17
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
18
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Sauvegarde de données
Vous allez maintenant créer une nouvelle application dont le but est de mémoriser quelque
chose que nous appellerons un "mémo" (petite phrase) dans une base de données située dans le
téléphone.
L'interface doit ressembler à :
et doit contenir :
• 5 labels
• une zone de texte
• 2 boutons
• une base de données
(TinyDB)
• une horloge
• un notificateur
Le fonctionnement :
Quand on rentre une phrase à
mémoriser et que l'on appuie sur
le bouton "Enreg.", cette phrase
(mémo) est sauvegardée dans la
base de données (avec la date et
l'heure de l'enregistrement) et un
message signalant
l'enregistrement s'affiche
(notification) sur fond rouge.
Si on appuie sur le bouton
"Memo", le dernier mémo
s'affiche ainsi que le jour et la
date d'enregistrement
Le programme sera le suivant :
19
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
20
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
21
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
22
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Ce bloc "logique" renvoie "vrai" si la case a été validée et "faux" s'il elle n'est pas validée
23
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
24
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
• Si l'on veut effacer un mémo, il faut choisir celui que l'on efface et si l'on efface le mémo
1, le mémo 2 prend sa place. Si l'on se trompe un message nous le signale :
25
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Vous remarquerez la présence d'une variable debug. Celle-ci est le nombre de mémo
mémorisés et a servi à tester le programme. Elle sera enlevée une fois l'application
testée et validée (vous n'êtes pas obligé de la mettre si vous n'en ressentez pas le
besoin).
Astuces ou aide :
• on peut avoir besoin d'une variable globale "nombre_memo" que l'on sauvegardera dans
la base de données avec le tag "nombre"
• il faut penser à tous les cas possibles et pour cela réaliser avant toute chose un algorithme
(sous la forme que vous voulez) pour bien avoir la structure du programme.
Faites le programme et testez-le. Quand tout fonctionne faites valider par le professeur.
A. ShareAccelerometer
1. But du projet
Le dessein de ce projet était de prendre en main l’interface et de voir les possibilités d’une
multitude de composants. Parmi eux : la reconnaissance vocale, l’envoie et la réception de
SMS, le notifieur, etc.
L’application devait permettre d’envoyer un SMS à un contact pour lui montrer les valeurs
maximums que nous avons atteint sur l’accéléromètre. La personne doit être sélectionnée dans
la liste de contacts du téléphone et une partie du contenu du SMS sera rédigé à la voix. Des
sons et notifications viendraient illustrer l’application.
2. Réalisation
Au début, nous avions ajouté beaucoup de composants à cette application. Par la suite, nous
avons nettoyé la liste pour arriver à cette dernière :
- Screen1
26
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
- VerticalArrangement1
- HorizontalArrangement1
- Label
- Button1
- TextBox
- PhoneNumberPicker1
- Button
- Button
- SpeechRecognizer
- Texting1
- AccelerometerSensor1
- Sound1
- Notifier1
Le développement de cette application nous a permis de mettre en valeur de bons et de
mauvais points pour AppInventor.
Le côté positif est qu’il permet un accès extrêmement simple aux composants graphiques
(boutons, etc.) et à quelques services très amusant (SMS, reconnaissance vocale). Grace aux
blocks, il est très simple d’envoyer un SMS (trois lignes). Un autre point fort est que nous
pouvons facilement personnaliser les boutons et jouer des sons en ajoutant des fichiers
image et son dans l’interface web.
Malheureusement, nous avons aussi trouvé quelques faiblesses à ce type de développement. Il
n’est pas possible de créer de variables locales. Nous sommes toujours obligés, même dans
les procédures créées par nos soins, d’utiliser des variables globales. Aussi, pour des fonctions
assez simples, les tailles de celles-ci prennent vite de la place. On remarque cependant qu’il
est possible de réduire les fonctions et de réorganiser les éléments.
B. MoveTheBall
1. But du projet
Nous nous sommes mis dans la peau d’un enfant souhaitant réaliser une petite application
simple : faire bouger une balle sur l’écran grâce à l’orientation du télé[Link] but de ce
scénario est d’établir si un enfant peut utiliser AppInventor seul pour faire ne serait-ce qu’une
application très simple.
Nous avons eu l’idée de cet application car les composants Canvas et Ball d’AppInventor sont
spécifiquement faits pour ce type de développement : la balle se déplace sur ce qui pourrait
être appelé « un plateau », représenté ici par le canvas.
2. Réalisation
Dans un premier temps, nous avons créé l’interface. Voici son architecture :
- Screen1
- Canvas1
- Ball1
- OrientationSensor1
27
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Le canvas est la zone où la balle peut se déplacer. Il remplit l’écran en largeur et possède une
hauteur de 200 pixels.
Ensuite, avec l’éditeur de blocks, nous avons utilisé une fonction très pratique :
[Link](). Cette fonction est appelée à
chaque changement d’orientation du téléphone. Elle est donc très sollicitée.
Après quelques tests, le résultat est concluant. Lorsque le téléphone s’incline sur la droite ou
sur la gauche avec un angle supérieur à 10°, la balle se déplace sur l’axe X. Lorsque le
téléphone s’incline vers l’avant ou vers l’arrière avec un angle supérieur à 10°, la balle se
déplace sur l’axe Y.
La conception de cette petite application n’a posé aucun problème particulier. Nous avons
juste perdu quelques minutes à déterminer à quoi correspondaient les angles Pitch, Roll et Yaw
du capteur d’orientation et à connaître leurs valeurs lorsque le téléphone est à plat.
Voici l’algorithme que nous avons pu mettre en place après quelques minutes sur l’interface
Scrach :
28
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
des concepts de base en programmation mais, si ils sont inconnus, peuvent être difficiles à
utiliser pour un enfant.
C. MessageDirectory
1. But du projet
Les applications précédentes se voulaient assez accessibles. Pour cette dernière, nous avons
voulu augmenter la difficulté. Le principe de cette application est de pouvoir poster un
message à un endroit, à un moment donné. Ce message ne doit être accessible en lecture que
si on se trouve près de là où il a été posté.
Nous allons voir quels problèmes se sont posés et comment nous avons pu y faire face.
2. Réalisation
Dans un premier temps, nous souhaitions qu’un utilisateur A partage seulement avec un
utilisateur B un message visible uniquement dans le rayon où il se trouve. Ce processus devait
utiliser les mails ou les SMS pour partager le message (sans l’afficher) et la localisation.
29
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
2
[Link]
30
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
les blocks en rapport, alors qu'en programmation classique, il faut forcement passer par la
documentation et les tests pour faire marcher des composants inconnus convenablement.
Cependant, plus les fonctionnalités d'une application sont nombreuses, plus les blocks seront
nombreux sous AppInventor. En effet, alors que sous Eclipse le code est divisé en fichiers,
classes et méthodes, sur AppInventor toutes les méthodes utilisées sont regroupées au même
endroit. Quand les blocks deviennent massifs et nombreux, il est difficile de s'y retrouver,
même en les organisant entre eux. De plus, même si nous avons la possibilité de commenter
les blocks, cela rajoute du contenu graphique et de l’illisibilité.
3
[Link]
asbest-we-can/
31
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
32
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
Les widgets sont en quelques sortes des icônes à placer sur le « bureau » du téléphone et mis à
jour (à un délai déterminé) pour afficher diverses informations ou permettre des fonctionnalités.
Les fonds d'écran animés sont, comme leur nom l'indique, des fonds d'écrans, qui sont en
arrière-plan du bureau, et animés. Ils sont codés comme une application Android, ce qui leur
permet d'utiliser des fonctionnalités du téléphone pour influer sur l'animation – afficher la carte
en fonction de l'endroit où vous êtes géolocalisé, changer si on secoue le téléphone, etc.
33
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
AppInventor est cependant très facilement utilisable, on retrouve les components que l'on
connait et leurs méthodes. Pour un programmeur ne connaissant pas Android, il est tout aussi
utilisable – car il s'abstrait de la programmation Java et se concentre sur la programmation
logique par blocks, commune à la plupart des langages de programmation –, mais il devient
également plus utile, par exemple pour découvrir rapidement une grande partie des
fonctionnalités disponibles. Pour un programmeur, AppInventor est donc très utilisable et cela
même si il est peu utile pour faire une application finalisée, on peut lui trouver d'autres usages
comme nous le démontrerons plus loin.
B. Pour un novice
Nous avons vu que AppInventor était très limité pour un programmeur désireux de créer une
« vraie application », mais qu'en est-il des non informaticiens qui veulent s'essayer à la
programmation ? AppInventor a était conçu pour eux et nous allons voir dans cette partie si il
est utilisable et utile pour un novice.
Nous avons trois cobayes qui vont essayer de réaliser deux petits exercices de programmation
avec l’outil de Google. Les trois cobayes ont des profils forts différents :
1. Quentin – 21 ans – étudiant en DUT biologie – profil scientifique.
2. Emilie – 23 ans – diplômée d’une licence d'anglais – profil littéraire.
3. Lise – 8 ans – possède de bonnes notes en maths et en français.
Les exercices sont les suivants :
1. Réaliser une application comportant une zone de saisie de texte (TextBox), un
bouton et une zone d’affichage de texte (Label, non éditable). Après avoir saisi
un texte, si on clique sur le bouton, il faut que le texte s’affiche dans le label.
TextBox TextBox
Label
34
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
9.10
9.10
9.10
On secoue le
téléphone
Dans l’ensemble, aucun des cobayes n’a réussi à réaliser ces exercices seul. Tout d’abord
lors de la phase de design, la première contrainte est le vocabulaire, à la fois la langue et les
termes utilisés. En effet, AppInventor est en anglais, ce qui pose problème aux non
anglophones. Même pour les anglophones, certains termes ne sont pas familiers aux non
informaticiens – par exemple : le terme « label » qui se traduit par « étiquette », représente une
zone de texte non éditable.
Une fois les différents composants expliqués, la phase de design est généralement réussie. Le
fait d’effectuer des Drap-and-Drop de composants puis de voir l'écran tracer un trait de
positionnement en temps réel aide à la compréhension. Néanmoins, l’utilisation de composants
non visibles n’est pas claire au début. Ici, le fait de placer un AcceleratometerSensor sur l'écran
pour y avoir accès par la suite dans l’éditeur de blocks n’est pas évident à comprendre pour
des non informaticiens qui ne sont pas habitués à faire des importations dans leur code.
Une fois l’interface désignée et tous les composants ajoutés, les choses se gâtent.
Effectivement, bien que la programmation par blocks via l’interface Scratch soit beaucoup
plus abordable que la programmation en classiques lignes de code, elle reste complexe à
assimiler. Elle reste basée sur l’appel de méthode, le passage de paramètres, … cette logique
n’est pas intelligible pour les non informaticiens. Ils comprennent le fonctionnement de code
assemblé quand on leur explique mais ont beaucoup de mal à en composer par eux même.
Trouver les bons blocks et savoir comment les utiliser leur prend du temps et encore une fois
la langue n’aide pas.
La première application qui consiste à transférer le texte du TextBox vers un label lorsque l’on
clique sur un bouton a été réussie (avec aide) par tous les cobayes, à l’exception de Lise. On
ne peut pas faire d’un cas d’étude une généralité. Mais en essayant de faire comprendre le
fonctionnement d’AppInventor à cette enfant de 8ans, nous nous sommes aperçus qu’un grand
35
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
nombre d’obstacles se dressaient face à elle – la langue dans un premier temps ainsi que le
concept des composants. Ils sont difficilement surmontables pour quelqu’un n’utilisant pas de
téléphone/Smartphone. S’agissant des autres testeurs, la conception de la première application
a aussi nécessité notre aide : pour expliquer le rôle et le fonctionnement des composants, les
méthodes à utiliser dans la partie éditeur de blocks et, plus globalement, les étapes à suivre
pour faire fonctionner AppInventor.
La deuxième application nécessite plus de logique. Elle utilise des variables et des conditions.
Ici aussi ces concepts logiques propres aux informaticiens ne sont pas connus de tous. Il a donc
fallu expliquer le système de IF ELSE THEN, le type booléen, etc.
Pour conclure, on peut dire qu’AppInventor est inutilisable sans aide par des non
informaticiens ; ceci à cause de la langue, des termes techniques et des logiques propres à la
programmation. Cependant avec l’aide de quelqu’un, cela permet d’avoir une première
approche de cette logique ainsi que d’avoir un résultat immédiat de son travail puisqu’on
peut rapidement tester sur son téléphone et créer des applications assez intéressantes
(utilisation de TextToSpeech, GPS, …).
C. Quels usages pour AppInventor ?
Nous avons vu dans les parties précédentes qu’AppInventor était utilisable mais peu utile pour
les informaticiens et à l’inverse utile mais peu utilisable par les non informaticiens. On peut
donc se demander quels sont les usages d’AppInventor ? En fait, il y en a quelques-uns, pour
les différents types d’utilisateur.
Tout d’abord pour les informaticiens, même si l’outil est limité en matière de développement
d’applications entièrement fonctionnelles, il peut être utilisé pour créer rapidement des
maquettes d’applications en partie fonctionnelles. En effet, l’interface visuelle peut être
employée pour designer des applications : il est rapide à prendre en main, facilement
modifiable ; on peut établir des comportements grâce aux blocks et enfin on peut tester et
exporter rapidement sur le téléphone. Cela peut donc permettre de créer rapidement une
maquette, pour tester des concepts ou présenter une idée à ses collaborateurs.
Pour les informaticiens, non-initiés à Android, AppInventor donne l’occasion de découvrir les
composants. Ils peuvent alors s’en servir pour créer rapidement de petites applications
correspondant à un besoin facilement réalisable avec AppInventor, donc relativement limité
en fonctionnalités.
Concernant les non informaticiens, AppInventor se trouve être difficile à utiliser. Ils
peuvent tout de même s’en sortir s’ils comprennent l’anglais et qu’ils suivent à la lettre les
tutoriaux disponibles4.
Pour finir, avec l’aide d’un professeur, cela permet de découvrir les bases de la
programmation, ou tout du moins ses logiques. La programmation par blocks ressemble
beaucoup à la programmation « en pseudocode » qui peut être vue lors de premières années
d’études informatiques. Utiliser AppInventor offre en prime la possibilité d’apprendre les
4
[Link]
36
Cours de Programmation Mobile/Troisième Bachelier en I.G [Link]@[Link]
37
Cours de Laboratoire Informatique/L1 I.G [Link]@[Link]
Bibliographie
[1] Christophe Porteneuve, Bien developers pour le Web 2.0, ©Groupe Eyrolles, 2007.
[2] Pierre-Baptiste Naigeon, Tutos «Notion de base, CSS» , 2 Mai 2006
Webographie
[3] Christophe MAGDELAINE [Link]
[4] Nicolas Chu [Link]
[5] [Link]
[6] [Link]
your-app-asbest-we-can/
38