2. Plan
Présentation de la plateforme Android
– Composants la plateforme Android
Outils de développement d’applications
pour Android
– SDK, ADT, AVD, DDMS …
Application HelloWorld
3. La plateforme Android
La plate-forme Android est une pile logicielle.
Elle a été conçu principalement, mais pas exclusivement pour le soutien
des appareils mobiles tels que les téléphones et les tablettes.
Cette pile a plusieurs couches :
Un système d'exploitation open-source
Un intergiciel (middleware)
et des applications clés.
Android est également livré avec un kit de développement, ou SDK, qui
fournit des outils et des APIs nécessaires pour le développement
d’applications Android en utilisant le langage de programmation Java.
Documentation, cours, des blogs, et des exemples
5. Pile logiciel d’Android – Noyau Linux
S'appuyant sur le noyau Linux 2.6 pour les services système de base
Offre une architecture d'autorisations
Mémoire et processus de gestion des
Fichier, et d'IO réseau.
Pilotes :
●
Gestion du matériel (écran clavier …)
●
Gestion des capteurs (appareil photo, GPS, accéléromètre …)
sécurité
Fournir une couche d'abstraction entre le Hardware et le reste de la pile logiciel
6. Android inclue un ensemble de bibliothèques C/C++ utilisées par les
composants.
Graphisme
Médias
Web
Etc
Exposée aux développeurs à travers le Framework d'application Android
Pile logiciel d’Android – Bibliothèques
SSL,
SQLite,
OpenGL
ES, etc.
7. Bibliothèques de base
Fournir la plupart des fonctionnalités disponibles
dans les bibliothèques de base du langage Java
APIs
Structure de données
Utilitaires
Accès aux Fichiers
Réseau
Graphiques
Etc
Pile logiciel d’Android – Runtime
8. Dalvik Virtual Machine
Permet d’exécuter des applications spécifiques
Sur n’importe quelle smartphone Android.
Chaque application Android s'exécute dans son propre processus, avec
sa propre instance de la machine virtuelle Dalvik
Dalvik a été écrit de telle sorte qu'un dispositif peut exécuter plusieurs
machines virtuelles de manière efficace.
Elle utilise le noyau Linux sous-jacent de l’appareil pour gérer
l’interaction de bas-niveau avec le matériel.
[Dalvik] n'est pas compatible avec une JVM du type Java SE ou même
Java ME. La librairie d'accès est donc redéfinie entièrement par Google
Pile logiciel d’Android – Runtime
9. Dalvik Virtual Machine
Exécution de l’exécutable Dalvik (format .dex)
Le format .dex est optimisé pour un minimum
occupation mémoire.
Compilation
S'appuyant sur le noyau Linux pour gestion de
la mémoire de bas niveau et threads.
Pile logiciel d’Android – Runtime
10. Pile logiciel d’Android – Application Framework
Des gestionnaires pour les applications + une API en java
Gestion des fenêtres, des activités, des ressources…
API pour développement des programmes
Permettent l’activation et la simplification de la réutilisation de composants
Les développeurs ont l’accès complet aux mêmes Framework APIs utilisés
par les applications de base.
11. Fonction Rôle
View
System
Utilisé pour construire une application, y compris les listes,
grilles, texte, Boîtes, des boutons, et le navigateur Web
intégré
Content
Provider
Permettant aux applications d'accéder aux données d'autres
applications ou pour partager leurs propres données
Resource
Manager
Fournir un accès à des ressources non-code (chaînes
localisées, les graphiques et les fichiers de mise en page)
Notification
Manager
Permettre à toutes les applications d’afficher des alertes de
clients dans la barre d'état
Activity
Manager
Gestion du cycle de vie des applications en fournissant une
navigation commune de "pile de retour (back stack).
Pile logiciel d’Android – Application Framework
Les activités sont disposés dans une pile (la "pile de retour"), dans l'ordre dans lequel chaque activité est ouverte.
12. Pile logiciel d’Android - Application
Android fournit un ensemble d'applications de base:
Client de messagerie
Programme de SMS
Calendrier
Maps
Navigateur
L'annuaire des contacts
etc
Toutes les applications sont développées en Java.
Les utilisateurs sont autorisés à remplacer les composants.
14. Environnement de développement
Chaine de production d’application
AndroidManifest
AndroidManifest
Code
source
.java
Code
source
.java
Bytecode
.class
Bytecode
.class
Binaire
Dalvik
.dex
Binaire
Dalvik
.dex
Machine virtuelle Dalvik
IDE
+
plugins
SDK Android
+
outils
Environnement d'exécution
Chaîne de compilation
Application
.apk
Application
.apk
Ressources
Ressources
API
Android
API
Android
Constitution de l'application
Terminal
Téléchargement
15. SDK Android
Le kit de développement Android(SDK) fournit l’environnement
de travail pour développer, tester et déboguer des applications
Android.
Dans le SDK on trouve:
Les API Android qui sont le coeur du SDK. Composés de
bibliothéques d’API Android, ils donnent au développeur
accès à la pile Android.
Des outils de développement qui permettent de compiler
et déboguer vos applications.
Le virtual Device Manager et l’Emulateur qui fournit un
meilleur environnement de test.
Des exemples de code et un support en ligne.
16. Versions Android et SDK
Nom Version Date Caractéristique
Android 1.0 09/2008 USA
Petit Four 1.1 02/2009 France
Cupcake 1.5 04/2009
prise en charge de la détection de rotation, de
l'accéléromètre, enregistrement vidéo, App Widgets
Donut 1.6 09/2009 apporte le support de plusieurs résolutions
Gingerbread 2.3 12/2010 HTML5, Wifi, stockage externe, NFC, VoIP, SIP, …
Honeycomb 3.0 02/2011 conçue spécifiquement pour les tablettes
Ice Cream
Sandwich
4.0.1 10/2011
fusion entre téléphones, tablettes et
télévisions
Jelly Bean 4.1 07/2012
Le système Android évolue très vite
ce qui est une marque de dynamisme
ce qui provoque une fragmentation importante des plateformes
nécessite un développement basé sur une version minimale répandue
17. Versions Android et SDK
Il coexiste actuellement deux branches
de versions
versions 3 pour les tablettes
version 2 pour les smart phones
versions 4 : fusion entre téléphones, tablettes
et télévisions
– versions 5
– versions 6
20. Quelques outils du SDK Android (tools)
Accessibles à partir d’une ligne de commande (fenêtre DOS)
adb permet la connexion au terminal (smartphone ou
simulateur) pour :
Transférer des fichiers (push / pull)
Travailler en ligne de commande unix (shell)
Installer une application (install)
Paramétrer le réseau (forward)
Déboguer une application (logcat)
dx transforme le bytecode java en code Dalvik
apkbuilder constitue un fichier .apk téléchargeable sur le
terminal
Remarque : Eclipse utilise ces outils directement mais on est
parfois obligé d’y recourir (transfert de fichiers, installations
directes d’applications …)
21. Installation du plugin ADT
Eclipse → Help → Install New Software
Cliquer sur le bouton Add
Ajouter le repository
remplir les deux champs
Name : ADT Plugin
Location :
https://dl-ssl.google.com/android/eclipse/
puis OK
Une fois que les outils sont affichés
Select All
attention : il faut que CDT soit installé
pour que le NDK puisse être installé
puis Next
Accepter les licences
puis cliquer sur Finish
Accepter l'alerte de sécurité
Puis redémarrer Eclipse
22. Installation du plugin ADT
Au redémarrage la version du plugin est vérifié
accepter l'éventuelle mise à niveau
Ou sélectionner le répertoire d'installation du plugin
puis Finish
23. Installation des API (SDK Manager)
Dans la barre d'outils sélectionner le "SDK Manager"
Dans la fenêtre suivante, sélectionner les niveaux d'API souhaités
Une fois l'installation terminée le répertoire d'installation du SDK comporte
l'ensemble des outils, documentations, exemples, plateformes cibles
L'installation étant relativement lente, ce répertoire peut être copier sur les autres machines
24. Émulateur AVD
AVD : Android Virtual Device
émulateur de matériel
complètement configurable
Avant d'utiliser un
émulateur il faut le créer
Via Eclipse
Exécuter en
cliquant sur
ou par
command
emu
25. Émulateur AVD
L'émulateur Android peut être lancé
via Eclipse
via la ligne de commande
emulator -avd <avd_name> [-<option> [<value>]]
>>… Androidandroid-sdktoolsemulator.exe -avd emu
C:UsersRedouaneAppDataLocal
Androidandroid-
sdktoolsemulator.exe -avd emu
pause
C:UsersRedouaneAppDataLocal
Androidandroid-
sdktoolsemulator.exe -avd emu
pause
Mon fichier emu.bat
26. Changer l’apparence de l’émulateur
Sur la page
http://jsharkey.org/blog/2008/10/10/leveraging-the-android-emulator/
Télécharger http://jsharkey.org/downloads/G1.zip
Décompresser le dossier dans le dossier d’installation d’android
…Androidandroid-sdkplatformsandroid-8skins
Créer un nouveau AVD par Eclipse nommé (emuG1)
Editer le fichier .android/avd/emuG1.avd/config.ini en mettant les
deux propriètées suivantes :
skin.name=G1
skin.path=platformsandroid-8skins
Sauvegarder et lancer l’émulateur
CTRL + F11 pour rotation
27. Emulator Control dans Eclipse
Window ==> show views==> Other ==> android==> Emulator
Control
Emuler
un
appel
ou
SMS
Emuler
un
appel
ou
SMS
28. Dalvik Debug Monitor Server
Dalvik Debug Monitor Server
outil de debug
Intégré à Eclipse
perspective DDMS
Ligne de commande
tools/ddms
29. DDMS
DDMS permet
de suivre l'utilisation du tas
de suivre les allocations d'objets et mémoire
de travailler sur le système de fichier de l'émulateur
de voir les threads executés sur l'émulateur
d'effectuer du profiling de méthode
Utiliser « Emulator Control » pour
envoi de SMS
émulation d'appel Téléphonique
envoi de points de géolocalisation
30. Gestion des logs
L’outil logcat permet de visualiser les logs du système de
logs Android
logcat est utilisable via adb ou DDMS
Par défaut les logs sont dirigés vers /dev/log/main
deux autres journaux de logs existent
/dev/log/radio pour les activité réseau et téléphone
/dev/log/events pour les événements système
Les sorties vers les flux out et err sont redirigés vers
/dev/null
utilisation de System.out ou System.err
31. VERBOSE
méthode Log.v(...)
DEBUG
méthode Log.d(...)
INFO
méthode Log.i(...)
WARN
méthode Log.w(...)
ERROR
méthode Log.e(...)
ASSERT
méthode Log.wtf(...)
"What a Terrible Failure" :
erreur ne devant jamais
arrive
Gestion des logs
Niveaux de log et méthodes
33. Structure d’un projet Eclipse
New projet ==> Android application project
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
AndroidManifest décrit les
propriétés de l’application
34. Le fichier AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activities"
android:installLocation="auto"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
<uses-sdk android:minSdkVersion="8 » android:targetSdkVersion="8" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.activities.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="InternalActivity" />
</application>
</manifest>
Généré par Eclipse, contient la
configuration principale de l'application
Généré par Eclipse, contient la
configuration principale de l'application
On modifiera ce fichier pour déclarer
les composants applicatifs, point
d'entrée principal, les permissions, etc.
On modifiera ce fichier pour déclarer
les composants applicatifs, point
d'entrée principal, les permissions, etc.
35. Les ressources
Le répertoire res contient toutes les ressources qui
seront mises dans le apk :
drawable-hdpi (images en haute définition)
drawable-ldpi (images en basse définition)
drawable-mdpi (images en moyenne définition)
layout (description en XML des interfaces)
values (définitions en XML de constantes : chaînes, tableaux,
valeurs numériques …)
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
36. Créer des ressources valeurs
Les ressources de type valeur sont décrites
dans des fichiers XML ayant la forme suivante:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Activity Example</string>
<string name="action_settings">Settings</string>
<string name="hello">Hi Activities!</string>
</resources>
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
37. 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 …)
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é dans drawable-xxxx
Chaque identificateur défini dans des fichiers XML (objets d’interface,
constantes)
Chaque fichier placé dans les répertoires xml , raw …
38. Utilisation des ressources
Référencement d’une ressource dans un fichier xml.La
forme générale est : "@type/identificateur"
Référencement d’une ressource dans le code java. La
forme générale est : R.type.identificateur
Par exemple : R.string.hello
Fait référence à la chaine « Hi Activities! »
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="@string/action_settings"/>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Activity Example</string>
<string name="action_settings">Settings</string>
<string name="hello">Hi Activities!</string>
</resources>
"@+id/id_foo signifie que vous créez un identifiant appelé
id_foo dans l'espace de noms de l’application.
"@+id/id_foo signifie que vous créez un identifiant appelé
id_foo dans l'espace de noms de l’application.
39. Utilisation des ressources
Accès aux ressources dans l’application
Mise en place de l’interface principale
setContentView(R.layout.nom_du_fichier_xml);
Mise en place d’interfaces supplémentaires
Par les classes LayoutInflater ou MenuInflater
Accès direct à une valeur ou à une ressource :
String titre = getResources().getString(R.string.texte_titre);
Drawable monImage =
getResources().getDrawable(R.drawable.nom_de_l_image)
40. Uri (Uniform Resource Identifiers)
Désigne des ressources locales ou distantes (plus
général que les URL car non lié à un protocole
réseau)
Création
Ressource locale
Uri.parse("android.resource://activity_package" + R.chemin.mon_son);
Ressource distante
Uri.parse("http://URL/nom_du_fichier");
Uri.fromFile(File)
42. Structure d’une application
Activité (android.app.Activity) : Programme qui gère une interface graphique
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ées (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 (<intent-filter> : permet de choisir la meilleure application pour
assurer un savoir-faire
43. 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
44. Déclaration dans AndroidManifest.xml
<activity>
<intent-filter>
…les savoir-faire
</intent-filter>
</activity>
Activité Ecouteur d’intention diffusée
<receiver>
<intent-filter>
… les savoir-faire
</intent-filter>
</receiver>
Service
<service>
<intent-filter>
… les savoir-faire
</intent-filter>
</service>
Fournisseur de contenu
<provider>
<grant-uri-permission …/>
<path-permission …/>
</provider>
<application
</application>
45. Activité Android
Classe qui hérite de Activity ou d’une classe dérivée de Activity (par exemple de
MapActivity pour utiliser Google maps, ListActivity ou TabActivity pour des
interfaces particulières)
La classe Activity hérite de l'interface Context dont le but est de représenter tous
les composants d'une application
On surcharge certaines méthodes qui sont appelées par Android pour définir le
comportement :
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
46. 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 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
47. Etats principaux :
Active
Après l’exécution de
onResume
Suspendue
Après l’exécution de
onPause
Arrêtée
Après l’exécution de
onStop
Terminée
Après l’exécution de
onDestroy
Cycle de vie d’une activité
48. Première application android
Créer un projet HelloAndroid sous
eclipse
Une Activité HelloActivy
Le fichier res/values/strings.xml
< ?xm lversi
on= "1.
0" encodi
ng= "ut
f
-
8"?>
< r
esour
ces>
< st
ri
ng nam e= "hel
l
o"> Hel
l
o W orl
d,H el
l
oAct
i
vi
t
y!< /
st
ri
ng>
< st
ri
ng nam e= "app_nam e"> Hel
l
oAndroi
d < /
st
ri
ng>
< /
r
esour
ces>
@ O ver
ri
de
protected voi
d onD estroy() {
Log.
i
(
"",
"onD est
roy")
;
super.
onD estroy();
}
@ O ver
ri
de
protected voi
d onStart() {
Log.
i
(
"","O n St
art
")
;
super.
onStart();
}
@ O ver
ri
de
protected voi
d onPause() {
Log.
i
(
"","onPause!
")
;
super.
onPause();
}
@ O ver
ri
de
protected voi
d onR esum e() {
Log.
i
(
"",
"onResum e")
;
super.
onR esum e();
}
@ O ver
ri
de
protected voi
d onStop() {
Log.
i
(
"","O nSt
op!
")
;
super.
onStop();
}