Programmation des applications mobiles avec Android 1 Inspiré du cours de Olivier Le Goaer
2 OS mobile : outils de développement D après le cours de Olivier Le Goaer
3 Plateforme de développement MobileApp vs. WebApp
4 Android Startup rachetée par Google en 2005 Open Alliance Handset (OHA) Regroupement de + de 50 entreprises : fabricants de matériel, opérateurs mobiles, développeurs d applications, dont Google. Objectif : développer des normes ouvertes pour des applications de téléphonie mobile Matériel supportant Android Tablette, smartphone, netbook, télévision, embarqué (frigo?)
5 Android Points forts Système linux + java Projet open source Système fonctionnel, intuitif et évolutif SFK complet fourni Versions d Android cupcake donut eclair froyo gingerbread honeycomb Icecream sandwich
6 Architecture Android
7 Architecture Android Linux Kernel Le noyau linux fournit le pilotes matériels, la gestion de processus, la mémoire, le réseau et la gestion de l alimentation Les bibliothèques J2SE (subset) : java.io.*, java.lang.*,... Android : android.view.*, android.telephony.*,... Google : com.google.android.maps.* Le moteur d exécution Android Offre les bases du framework applicatif Utilise la machine virtuelle java Dalvik Le framework applicatif Fournit les classes utiles et des abstractions matérielles La couche applicative IHM (interface graphiques) décrites en XML Modèle de données et controleurs applicatifs écrits en java
8 Machine virtuelle «Dalvik» Offre l'avantage de toute machine virtuelle Couche d'abstraction entre le développeur d'applications et des implémentations matérielles particulières La VM Dalvik n'est pas une VM (Virtual Machine) Java Tient compte des contraintes de CPU et mémoire Exécute des fichiers.dex (Dalvik Executable) optimisés La VM créé une instance Dalvik pour chaque processus (lourd) Les applications sont totalement indépendantes ("sandbox") Espaces protégés (mémoire, disque) Evite un plantage généralisé!
9 Le petit univers java Concepts Paquetage, classe, annotation, héritage, interface... Idiomes Classes anonymes, classes internes, POJO... Bibliothèques(API) J2SE (subset) : java.io.*, java.lang.*... Android : android.view.*, android.telephony.*... Google : com.google.android.maps.*... Design Patterns Singleton, Builder, Observer (Listener), DAO..
10 Outil de développement Plugin Eclipse ADT (Android Development Tools) Assistant à la création de projets Créateur d'interface graphique (WYSIWYG) Vues et perspectives dédiées
11 Outil de développement Plugin Eclipse ADT (Android Development Tools) Arborescence des projets Dossier du projet Fichiers source (.java) Version Android Ressources organisées (layout, icones, texte,...) Fichier source R.java automatiquement généré à partir du répertoire /res Ressources non organisées (.pdf,.zip,.html,...) Fichier Manifest.xml
12 Développement d'une application Code source Ecrit en Java et compilé en Dalvik bytecode (.dex) Packaging Archive.apk Signing Les applications doivent être signées pour être déployées (pas nécessaire en développement) Exécution Sur un support mobile (smartphone par ex) Dans un émulateur
13 L'émulateur AVD (Android Virtual Device) AVD Manager Lent au démarrage et à l'usage Emulation (i.e. couche d'indirection) vs. simulation Noyau Linux + services + composants android Fonctionnalités non-disponibles Appareil photo (Camera Webcam supporté) Vibreur Appels téléphoniques réels Capteurs en général Connexions USB Évolution de la charge de la batterie
14 Développement d'applications Environnement d'exécution contraint Pour vos développements, gardez à l'esprit que les appareils mobiles ont : Une puissance processeur plus faible Une RAM limitée Des capacités de stockage permanent limitées De petits écrans avec de faibles résolutions Des coûts élevés de transfert de données Des taux de transfert plus lents avec une latence élevée Des connexions réseau moins fiables Des batteries à autonomie limitée
15 Applications Android Applications de premier plan Utilisable quand elle est visible et mis en pause lorsqu elle ne l est pas Jeux, mashup de cartes géographiques Applications d arrière-plan Interaction limitée en dehors de sa configuration Filtrage d appels, réponse automatique aux SMS Applications intermittente Interactivé par moment, l essentiel de sa tâche est en arrière-plan Lecteur de musique Widget Composant visuel interactif que les utilisateurs peuvent ajouter à leur écran d accueil Affichage de l heure, prévisions météo
16 Cycle de vie d une application Android Contrairement aux applications classiques, les applications Android n ont pas un contrôle complet sur leur cycle de vie Les composants doivent être à l écoute des changements d états de l application pour être près à une fin intempestive La mémoire et la gestion des processus est prise en charge exclusivement par le moteur d exécution
17 Les ressources chaınes de caracteres, images, audio, presentation visuelle,... dossier res/ Images Interfaces graphiques Valeurs constantes
18 Principe R.java Chaque élément défini dans le répertoire /res impacte le fichier R.java (à ne pas toucher) Génération automatique de classes internes à la classe R, ainsi que des constantes de type entier sur 32bits Chemin d'accès aux ressources via R.java user-defined system-defined Exemple : fr.polytech.tp1.r.color.rose_bonbon : android.r.color.darker_gray : obj.setcolor(r.color.rose_bonbon) Objet java représentant les ressources Instance de la classe : android.content.res.resources Ressources du projet en cours : context.getresources()
19 AndroidManifest.xml Décrit les composants de l application Un point d entrée potentiel dans l application Une application peut lancer un composant différent (pas de main) Quatre types de composants activités (activities) services (services) fournisseurs de contenu (content providers) récepteurs de diffusion (broadcast receivers) Décrit les permissions requises par l application accès a l Internet, lecture-écriture dans la liste de contacts, géo-localisation,... Décrit les besoins matériels et logiciels de l application appareil photo, bluetooth, ecran multitouch,...
20 AndroidManifest.xml <manifest> <application> <activity android:name=".myfirstactivity" android:label="@string/app_name"> <intent filter> <action android:name="fr.polytech.resmob.myfirstactivity"/> <category android:name="android.intent.category.launcher"/> </intent filter> </activity> </application> </manifest> Fichier XML obligatoire, à la racine du projet Seuls les éléments <manifest> et <application> sont obligatoires catégorie LAUNCHER = point d entrée possible pour exécuter l'application http://developer.android.com/guide/topics/manifest/manifest-intro.html
21 Activité Une activité = un écran graphique Incarne souvent un cas d'utilisation (use case UML) IHM structurée par une hiérarchie de vues et de contrôles des éléments définis par du code Java Certains éléments (texte, dimension, couleur) définis dans des fichiers XML (/res) Une application est formée de n activités Sous-classe de android.app.activity
22 Activité 7 méthodes de callback: void oncreate(...) void onstart() void onrestart() void onresume() void onpause() void onstop() void ondestroy()
23 Activité package fr.polytech.resmob; import android.app.activity; public class MyFirstActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); action /* MAIN Allocation = un point des ressources d entrée principal ici */ (pas } d information particulière à fournir) @Override catégorie protected LAUNCHER void ondestroy() = point d entrée { possible pour exécuter super.ondestroy(); l'application } } /* Désallocation des ressources ici */ Le bundle mémorise l'état de l'ui lorsqu'elle passe en arrière-plan
24 Description des interfaces graphiques Description Déclarative (Fichiers XML dans le répertoire /res/layout/) Ou directement dans le code java Vues (View) Composant élémentaire des interfaces graphiques sous Android Instance de la classe View Sensible aux événements tous les composants graphiques (widgets) d Android sont des vues : Button, EditText, TextView, Spinner, CheckBox Regroupement de vues (ViewGroup) Le ViewGroup permet de regrouper des vues Les layouts disponibles sont : LinearLayout, TableLayout, RelativeLayout, FrameLayout, ScrollView,... http://developer.android.com/guide/topics/ui/declaring-layout.html
25 Description des interfaces graphiques Description Déclarative (Fichiers XML dans le répertoire /res/layout/) Ou directement dans le code java Vues (View) Composant élémentaire des interfaces graphiques sous Android Instance de la classe View Sensible aux événements tous les composants graphiques (widgets) d Android sont des vues : Button, EditText, TextView, Spinner, CheckBox Regroupement de vues (ViewGroup) Le ViewGroup permet de regrouper des vues Les layouts disponibles sont : LinearLayout, TableLayout, RelativeLayout, FrameLayout, ScrollView,...
26 Layout communs Linear Layout : organisation horizontale avec barre de défilement si nécessaire Relative Layout : organisation des éléments relativement les uns aux autres (à gauche de, au-dessus de,...) Web view : affiche le contenu d'une page web http://developer.android.com/guide/topics/ui/declaring-layout.html
27 Description des interfaces graphiques Orientation Sens de placement des vues dans un conteneur android:orientation = vertical horizontal Taille Surface prise par la vue android:layout_width =??px fill_parent wrap_content android:layout_height =??px fill_parent wrap_content Gravité Alignement d'une vue dans son conteneur android:layout_gravity = left center_horizontal top bottom right
28 Description des interfaces graphiques <?xml version="1.0" encoding="utf 8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" action android:layout_height="wrap_content" MAIN = un point d entrée principal (pas d information android:text="@string/hello"/> particulière à fournir) <TextView android:layout_width="match_parent" catégorie android:layout_height="wrap_content" LAUNCHER = point d entrée possible pour exécuter l'application android:text="@string/coucou" android:id="@+id/msgtext"/> </LinearLayout> identifiant unique le signe + dans @+id signifie qu il s agit d un nouveau nom de ressource, à créér et a ajouter a la classe R
29 Association des interfaces graphiques import android.app.activity; import android.os.bundle; import android.widget.textview; Associe une hiérarchie de vues ` a une activité public class MyFirstActivity extends Activity { } /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); TextView message = (TextView) findviewbyid(r.id.msgtext); message.settext("hello, World!"); } Renvoie la vue à partir de son identifiant généré dans R.java
30 Gestion des événements Dans le fichier main.xml de /res/layout on peut associer une méthode à un événement via les attributs événementiels <Button... android:onclick="sayhello".../> public class MyFirstActivity extends Activity { private TextView hellolabel; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); hellolabel = (TextView) findviewbyid(r.id.hello_label); } } public void sayhello(view v) { hellolabel.settext(r.string.hello); }
31 Références pour la programmation android http://developer.android.com/training/index.html «Programmation des systèmes mobiles & sans fils», cours de Olivier Le Goaer. «Programmation Android», cours de Etienne Payet wikibook sur programmation android