Développement sur Android
A
Saidi emna
Android
L'écosystème d'Android s'appuie sur deux piliers:
• le langage Java
• le SDK qui permet d'avoir un environnement de
développement facilitant la tâche du développeur
Le kit de développement donne accès à des
exemples, de la documentation mais surtout à
l'API de programmation du système et à un
émulateur pour tester ses applications.
Stratégiquement, Google utilise la licence Apache
pour Android ce qui permet la redistribution du
code sous forme libre ou non et d'en faire un
usage commercial. Le plugin Android Développent
Tools permet d'intégrer les fonctionnalités du SDK
à Eclipse. Il faut l'installer comme un plugin
classique en précisant l'URL du plugin. Ensuite, il
faut renseigner l'emplacement du SDK
(préalablement téléchargé et décompressé) dans
les préférences du plugin ADT.
1
Saidi emna
L'Operating System
Android est en fait un système de la famille des
Linux, pour une fois sans les outils GNU. L'OS
s'appuie sur:
• un noyau Linux (et ses drivers)
• une couche d'abstraction pour l'accès aux
capteurs (HAL)
• une machine virtuelle: Dalvik Virtual Machine
(avant Lollipop)
• un compilateur de bytecode vers le natif Android
Runtime (pour Lollipop)
• des applications (navigateur, gestion des
contacts, application de téléphonie...)
• des bibliothèques (SSL, SQL ite, OpenGL ES,
etc...)
• des API d'accès aux services Google
2
Saidi emna
Architecture d’Android
3
Saidi emna
Android est basé sur un HAL LINUX, fournissant des
une multitude de pilotes existants, la gestion de la
mémoire, gestion des processus/threads, gestion de la
sécurité et des accès réseau La couche Libraires,
écrites en C/C++, composée du Surface Manager, utilisé
pour l’affichage des diverses fenêtres. OpenGL/ES (3D)
et SGL (2D) sont les librairies graphiques du système, le
Media Framework offre les fonctionnalités pour
manipuler les formats media, ainsi que les fonts bitmap
et vector, SQLite est le système de gestion de base de
données, Webkit est le fureteur fournit par Android.
4
Saidi emna
Développement
d’applications pour
Android
5
Saidi emna
Production de logiciel
Chaîne de compilation Constitution de l'application
Android
Code Manifeste
source Bytecode Application .ap
Class Binaire
k
Java
Dalvik .dex
Java
Ressources
Téléchargement
IDE Eclipse ou Machine
Netbeans + Terminal
virtuelle
plugins Dalvik
API Android
SDK Android +
outils
Environnement de développement Environnement d'exécution
6
Saidi emna
Développer pour Android
Les interfaces et les constantes sont définies dans
des fichiers XML
Facilite la modification
Statique
Les ressources sont téléchargées avec l’application
Les fonctionnalités sont dans le code
Lien avec ce qui est défini en XML
Accès aux ressources
L’API n’est pas totalement celle de java (classes
redéfinies (par exemple Color), interfaces,
La syntaxe des fichiers XML est extensible ⇒
écouteurs …)
difficile de savoir ce qui est prédéfini
Les propriétés définies en XML peuvent être
contradictoires
L’interface ne peut être utilisée que par l’activité qui
l’a créée
Difficile de développer sans un environnement
adéquat (Eclipse ou Netbeans) en raison des
fichiers générés
La prévisualisation des interfaces par Eclipse n’est
pas toujours conforme (ascenseurs, contenu défini
dans le code …)
7
Saidi emna
Outils de développement
SDK Android
• SDK Manager : permet de télécharger et de
mettre à jour les composants du SDK
o la plateforme SDK
o un émulateur : adv. (Android Virtual
devise)
o les documentations
o l’API Google (Google maps et Cie)
o des exemples, . . .
o l’outil adb qui permet l’interaction avec
le terminal (virtuel ou non)
Un IDE : éclipse (ou Netbeans, . . .)
8
Saidi emna
o aide à la programmation (si on sait
déjà faire le boulot a la main !)
o Génération automatique de fichiers
o installation et debugge facilites
o plugin
(https://dlssl.google.com/android/eclip
se)
9
Saidi emna
Développer avec Eclipse Espace de travail
l’espace de travail ⇒ nouvel espace nouveaux
Remarque : les paramétrages d’Eclipse sont liés à
paramètres
10
Saidi emna
Développer avec Eclipse Projet Android
(Menu File → New
→ Android Project)
Nom
SDK
11
Saidi emna
Paquetage (au moins 2 niveaux)
Développer avec Eclipse
12
Saidi emna
13
Saidi emna
Créer un terminal virtuel (simulateur)
(Menu Windows → Android SDK and AVD Manager)
14
Saidi emna
Créer un terminal virtuel (simulateur)
Paramétrage:
Nom
SDK
Taille carte SD
Format d’écran
Matériel
15
Saidi emna
Terminal virtuel ou Smartphone
16
Saidi emna
Contrôle du terminal (DDMS)
17
Saidi emna
Structure d’un projet Eclipse
src contient
les fichiers source
gen
contient les fichiers générés par Eclipse
res contient
les ressources (images, descriptions
d’interfaces, valeurs)
– Organisé en sous dossiers par types
AndroidMa
nifest décrit les propriétés de l’application
18
Saidi emna
Le fichier Manifeste
Fichier XML qui contient :
• la description des composants de l’application
• les permissions requises (accès internet,
lecture/écriture)
• les besoins de l’application
• la capacité de chaque composant
• les librairies utilisées
• la version d’Android minimum, . . ..
19
Saidi emna
Le fichier AndroidManifest
• Généré par Eclipse, contient la description
de l’application
20
Saidi emna
Rubriques du fichier AndroidManifest
Manifest
– Nom du paquetage
– Versions
– SDK
Application
21
Saidi emna
– Nom
– Icône7
– Eléments constituant l’application (activités,
services, …)
Permissions
– Accès aux capteurs
– Accès au réseau
– Accès à la téléphonie – …
Instrumentation (pour les tests)
Les ressources
• Application embarquée ⇒ tout doit être dans
le fichier .apk téléchargé
Le répertoire res contient toutes les
ressources qui seront mises dans le
apk :
22
Saidi emna
drawable-hdpi (images en haute
définition)
drawable-ldpi (images en basse
définition)
drawable-mdpi (images en moyenne
définition)
layout (description en XML des
interfaces)
values (définitions en XML de
constantes : chaînes, tableaux, valeurs
numériques …)
anim (description en XML d’animations)
menus (description en XML de menus
pour l’application)
xml (fichiers XML utilisés directement
par l’application)
raw (tous les autres types de
ressources : sons, vidéos, …) On peut
ajouter d’autres sous répertoires
23
Saidi emna
La classe R
• C’est une classe générée par Eclipse qui
permet à l’application d’accéder aux
ressources
• Elle contient des classes internes dont les
noms correspondent aux types de
ressources (id, drawable, layout …)
24
Saidi emna
• Elle est constituée à partir des fichiers
placés dans les sous répertoires du
répertoire res
• Une propriété est créée pour :
– Chaque image placée dans drawable
– Chaque identificateur défini dans des
fichiers XML (objets d’interface, constantes)
– Chaque fichier placé dans les répertoires
xml, raw …
Utilisation des ressources
• Référencement d’une ressource dans un
fichier xml. La forme générale est
"@type/identificateur"
Par exemple :@string/machine
25
Saidi emna
Fait référence à une chaine contenue dans
un fichier XML placé dans le répertoire
res/values et définie comme suit : …
<Resources>
…..
<string Name="machine >Contenu de cette
chaine …
< /String>
</ Resources>
Référencement d’une ressource dans le
code. La forme générale est : R.type.
Identificateur
Par exemple : R.string.machaine Fait
référence à la même chaine
La classe Resources
• Permet l’accès aux ressources
répertoriées dans R
• On obtient une instance de cette classe
par getResources () de l’activité
26
Saidi emna
• Principales méthodes de la classe
Resources (le paramètre est un identifiant
défini dans R de la forme R.type. Nom) :
– Boolean getBoolean (int)
– Int getInteger (int)
– Int [] getArray (int)
– String get String (int)
– String [] getStringArray (int)
– Int getColor (int)
– float getDimension (int)
– Drawable getDrawable (int)
• Exemple: String titre = getResources
().get String (R.string.machaine);
Les
27
Saidi emna
Applications
Structure d’une application
• Activité (android.app.Activity)
Programme qui gère une interface
graphique
28
Saidi emna
• Service (android.app.Service)
Programme qui fonctionne en tâche de
fond sans interface
• Fournisseur de contenu
(android.content.ContentProvider)
Partage d’informations entre
applications
• Ecouteur d’intention diffusée
(android.content.BroadcastReceiver) :
Permet à une application de récupérer
des informations générales (réception
d’un SMS, batterie faible, …)
Eléments d’interaction
– Intention
(android.content.Intent) :
Permet à une application d’indiquer ce
qu’elle sait faire ou de chercher un
savoir-faire
– Filtre d’intentions ( : permet de
choisir la meilleure application pour
assurer un savoir-faire
29
Saidi emna
Application Android
• Une activité = un programme + une
interface
30
Saidi emna
• Un service = un programme sans
interface
• Une application =
– Une activité principale
– Eventuellement une ou plusieurs
activités secondaires
– Eventuellement un ou plusieurs
services
– Eventuellement un ou plusieurs
écouteurs d’intentions diffusées
– Eventuellement un ou plusieurs
fournisseurs de contenu
Activité Android
• Classe qui hérite de Activity ou d’une classe
dérivée de Activity (par exemple de
31
Saidi emna
MapActivity pour utiliser Google maps,
ListActivity ou TabActivity pour des interfaces
particulières)
• On surcharge certaines méthodes qui sont
appelées par Android pour définir le
comportement (même principe que les applets)
:
• onCreate lors de la création
• onDestroy lorsque l’activité se termine
• onStart lorsque l’activité démarre ou
redémarre
• onPause lorsque l’activité n’est plus en
premier plan
• onResume lorsque l’activité revient en
premier plan
• onStop lorsque l’activité n’est plus visible
• onRestart lorsque l’activité redevient visible
Cycle de vie d’une activité
• Android se réserve le droit de tuer le
processus Unix d’une activité s’il n’y a plus
32
Saidi emna
assez de ressources (mémoire). Les règles sont
les suivantes :
– Une activité en premier plan n’est tuée que si
c’est elle qui consomme trop de ressources.
– Une activité en arrière-plan ou non visible
peut être tuée.
• Lorsqu’une activité a été tuée, si on revient
dessus elle est relancée (onCreate – On peut
sauvegarder l’état (c’est-à-dire les propriétés)
d’une activité (dans onPause) pour le retrouver
lorsqu’elle elle est recréée par le paramètre
transmis à onCreate
Pensez vos interfaces pour un smartphone
33
Saidi emna
• Ecran tactile de petite taille
– Eviter les interfaces trop touffues (on ne peut
pas agrandir l’écran comme on agrandit une
fenêtre)
– Eviter les éléments cliquables trop petits (il
faut pouvoir cliquer avec le doigt même si on a
des gros doigts)
– Eviter les élément cliquables trop tassés (il
faut pouvoir cliquer sur le bon élément même
si on vise mal)
• Le défilement se fait par touché/glissé
– Pas trop d’ascenseurs (on ne peut pas faire
défiler un conteneur entier ET des éléments de
ce conteneur dans le même sens)
– Pas d’ascenseurs mal placés (si tous les
éléments sont cliquables comment faire défiler
sans cliquer ?)
• L’écran peut être tourné
• Tous les smartphones n’ont pas la même
définition d’écran
34
Saidi emna
35
Saidi emna
MMerci pour attention
e
r
ci
p
o
u
r
a
tt
e
n
ti
o
n 36
Saidi emna
37