Android: Introduction, présentation

Documents pareils
Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

TP SIN Programmation sur androïde Support : eclipse

Les fondamentaux du développement d applications Java

SOMMAIRE

Créer des applications Android

TP au menu «UI ANDROID»

Projet Android (LI260) Cours 2

NSY102. Conception de logiciels Intranet Introduction

1.3 Gestion d'une application

Warren PAULUS. Android SDK et Android x86

Android 4 Les fondamentaux du développement d'applications Java

Programmation mobile avec Android

Développement sous Android

Tutorial pour une application simple

De Java à Android version 0.1

Programmation Android L3 informatique

Android et le Cloud Computing

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Programmation Mobile Android Master CCI

APPLICATIONS JAVA. 1. Android. Développement d'activités Java sous Android. Android Partie I. L'architecture du système Android. Application Android

Table des matières. Partie I Concepts de base Préface... VII

Android. Présentation d Android. Florent Garin

Introduction ANDROID

Développement Android. J.-F. Couchot

Android 101. Rémi Forax

Education Delivery Intelligent Tool

DÉVELOPPEMENT ANDROID

Développement sous Android

Tutoriel Android - TP de prise en main

TP2 : Client d une BDD SqlServer

Android en action. Abdelkader Lahmadi Université de Lorraine

Architectures Mobiles

Tutoriel Android. Pour démarrer la programmation d'applications Android

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

Messagerie asynchrone et Services Web

Terminaux Mobiles Communicants

Environnements de développement (intégrés)

Point sur les solutions de développement d apps pour les périphériques mobiles

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

République Algérienne Démocratique et Populaire Université Abou Bakr Belkaid Tlemcen Faculté des Sciences Département d Informatique

TD/TP 1 Introduction au SDK d Android

Développement d applications professionnelles avec Android 2

Android UIThread, Thread, Handler et AsyncTask

Encore plus de widgets et de conteneurs

Épisode 2 : Les outils de développement Alain Menu édition 2.1, septembre 2013

Cours Android. Développement et API. Romain Raveaux 1. Mars 06-03, romain.raveaux at univ-tours.fr. Organisation du module

TP1 : Initiation à Java et Eclipse

Prise en compte des ressources dans les composants logiciels parallèles

Projet Active Object

Annexe Android Studio

Présentation du système d exploitation Open Source ANDROID

Surveiller sa maison via son Smartphone sous Android

Alfstore workflow framework Spécification technique

Application de messagerie simple sur Android : Rapport de projet de VAP RSM

Auto-évaluation Programmation en Java

Belgacom Forum TM 3000 Manuel d utilisation

Création d un service web avec NetBeans 5.5 et SJAS 9

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

Web Tier : déploiement de servlets

Network Shutdown Module V3 Extension du Manuel Utilisateur pour architecture Virtualisée Virtual Server de Microsoft

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Approche Contract First

[Projet S9] Rédacteurs & Contributeurs Entité Rédacteurs Contributeurs Imededdine HOSNI Olivier MARTY. Validation du document Nom Date Visa

Travail d'étude et de Recherche

Chapitre 1 Retour en arrière

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Gestion des différentes tailles d écran

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

République Algérienne Démocratique et Populaire Université Abou Bakr Belkaid Tlemcen Faculté des Sciences Département d Informatique

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

Unity. Moteur de jeu 3D et 2D. Cross platform: Windows, Mac, Linux, ios, Android, Blackberry, Xbox, Playstation, Wii

2. DIFFÉRENTS TYPES DE RÉSEAUX

Interfaces graphiques avec l API Swing

Réalisation de SMSMail

as Architecture des Systèmes d Information

Téléphone IP. Téléphone IP aux nombreuses fonctions avancées pour une utilisation professionnelle et au prix abordable FICHE PRODUIT

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

PROGRAMME DETAILLE. Parcours en première année en apprentissage. Travail personnel CC + ET réseaux

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Administration Système & Réseau. Domain Name System Historique & Concepts Fonctionnalités & Hiérarchie Requêtes & Base de donnée DNS

Twixl Portfolio DE INDESIGN VERS LES TABLETTES. Luk Dhondt - Product Manager

Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :

Firewall IDS Architecture. Assurer le contrôle des connexions au. Sécurité 1

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

NOTICE D UTILISATION FACILE

Modèle de cahier des charges pour un appel d offres relatif à une solution de gestion des processus métier (BPM)

Stockage de données sous Android

Android. Android is an environment where the biggest limitation is your imagination. P1 1

Programmation Internet Cours 4

Système Principal (hôte) 2008 Enterprise x64

Formation : WEbMaster

Vers l Internet Synthèse Bibliographique -

Paiement sécurisé sur Internet. Tableau de bord Commerçant

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Transcription:

Android: Introduction, présentation jean-michel Douin, douin au cnam point fr version : 10 février 2016 Notes de cours 1

Sommaire Intergiciel (middleware) Les éléments de base Android OS comme intergiciel Applications et évènements gérés par le middleware Approche déclarative Composants, classes de base Activity, BroadcastReceiver, Service, ContentProvider, Intent. Patrons de conception utilisés Publish/subscribe Chaîne de responsabilités Fabrique méthode MVC, Modèle Vue Contrôleur Façade Procuration Médiateur Stratégie 2

Bibliographie utilisée à compléter Mobile Middleware, Architecture, Patterns and Practice, Sasu Tarkoma,ed. Wiley 2009 [Sheng-De Wang] Le point de départ de ce support Auteur: Prof. Sheng-De Wang http://intw2-2010.cs.pu.edu.tw/a1.ppt http://www.dre.vanderbilt.edu/~schmidt/cs282/pdfs/android-binder-ipc.pdf [Sch06]Le site de douglas Schmidt http://www.cs.wustl.edu/~schmidt/patterns.html ce site http://www.cs.wustl.edu/~schmidt/posa/ [Kra06] La présentation de S. Krakowiak faite à l école d été ICAR 2006 http://sardes.inrialpes.fr/ecole/2006/ http://www2.lifl.fr/icar/chapters/intro/intro.html [VKZ05] le site de Uwe Zdun : http://www.infosys.tuwien.ac.at/staff/zdun/ ce livre : http://www.infosys.tuwien.ac.at/staff/zdun/remotingpatterns/index.html ce support http://www.infosys.tuwien.ac.at/staff/zdun/teaching/evs/evs.pdf informations générales http://www.edlin.org/cs/patterns.html http://www.powershow.com/view/133aa5- MjUxY/Mobile_Middleware_Course_Principles_and_Patterns_Sasu_Tarkoma_powerpoint_ppt_presentation http://developer.android.com/resources/index.html 3

Première partie : Introduction Intergiciel, fonctionnalités attendues Android Un premier aperçu en quelques diapositives Le vocable Architecture logicielle Le simulateur, les API Une démonstration 4

Tendances, historique INTERNETWORKING ARCH RTP TFTP FTP HTTP DNS TELNET UDP TCP IP MIDDLEWARE ARCH Middleware Applications Middleware Services Middleware Fibre Channel Solaris VxWorks Ethernet ATM FDDI 20 th Century Win2K Linux LynxOS 21 st Century [Sch06] 5

Fonctions attendues de l intergiciel de [Kra06] Proposer une API de haut Niveau Masquer l hétérogénéité Rendre la répartition invisible Faciliter la programmation répartie Fonctions orientées: Réseau «fixe», internet, web, SOA (Service Oriented Architecture) 6

Intergiciel et mobile Sécurité Confidentialité, intégrité, contrôle des informations par l utilisateur Mobile comme «Baie d accueil» des applications Installation, au sein d un «sandbox» Liste des applications, annuaire, Éligibilité, sélection de la «bonne» application, Découverte au «run time» d un service Déploiement, mise à jour, maintenance Substitution d une application par une autre Communication Réseaux communications synchrones, asynchrones, interruptions de services Notifications inhérentes: sms, push Persistance Embarquée Consommation Batterie 7

Android Sécurité Linux, processus Mobile comme «Baie d accueil» des applications Un processus une application une DVM (Dalvik Virtual Machine) (Vue logique), «sandbox» inhérent Déploiement, mise à jour, maintenance Prise en charge par l intergiciel Communication Interne, externe -> intergiciel, sms, push Persistance -> intergiciel, SQLLite 8

Android les grandes lignes Composants Android Outils de Développement Architecture Logicielle Développement en java avec quelques directives et configurations en syntaxe XML Un exemple, une démonstration Un exemple en quelques lignes de java et d XML 9

Composants Android Linux Processus / DVM / Application Framework de déploiement d applications De nombreuses librairies, Navigateur intégré, WebKit ( webkit utilisé par safari, Google Chrome ) SQLite En natif, pilotes Dépendant du matériel GSM Bluetooth, EDGE, 3G, WiFi Caméra, GPS, boussole et accéléromètre Température, 10

Outils de développement SDK Android En ligne de commandes Plug-in sous eclipse Émulateur Débogueur Traces fines d exécution Tests unitaires Outils de mise au point Mesure de mémoire et performance 11

Framework ou baie d accueil des applications Source : http://www.linuxjournal.com/ 12

Architecture et API http://developer.android.com/guide/basics/what-is-android.html 13

Développement Développement En java, configurations en syntaxe XML Une configuration de l application AndroidManifest.xml Une déclaration de ressources en XML comme l IHM ou des String» res/layout/hello_web_view.xml» res/values/strings.xml 14

Développement 1/2 Fichier de configuration, AndroitManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.biblio" android:versioncode="1" android:versionname="1.0"> <uses-permission android:name="android.permission.internet" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".demo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> 15

Premier exemple support Sheng Wang package com.android.webviews; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.webkit.webview; import android.webkit.webviewclient; public class HelloWebView extends Activity { /** Called when the activity is first created. */ WebView webview; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); webview = (WebView) findviewbyid(r.id.webview); webview.getsettings().setjavascriptenabled(true); webview.loadurl("http://www.cnam.fr"); } 16

Démonstration Démonstration Puis Les composants essentiels 17

Vocabulaire Les Essentiels Activity Une activité est associée à une IHM BroadcastReceiver Réception d un message transmis par un émetteur via Android Service Une tache de fond sans IHM ContentProvider La persistance des données Intent Les notifications IntentFilter Les filtres des notifications candidates 18

Introduction Classes Activity Associée à une interface utilisateur Cycle de vie (démarrée, en pause, arrêtée, détruite ) Peut démarrer d autres activités, peut émettre des évènements(intentions, intent) Une configuration de type XML, permissions, librairies, BroadcastReceiver Réception des évènements systèmes ou d une autre application Émission et réception d intentions (intent) Service Pas d interface, un service à rendre, en tâche de fond Intention de servir, langage commun aux clients et au service ContentProvider Données rendues persistantes ( pour d autres applications) Un fichier, base SQLite Intent Notifications, IntentFilter Critères de sélection, éligibilité, mécanisme de résolution 19

Activity, Service, ContentProvider, BroadcastReceiver Source : https://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf 20

Application Une application peut être constituée de plusieurs écrans, A chaque écran lui correspond une activité, Une activité hérite et redéfinit certaines méthodes oncreate, ->, onpause, ->, onstop, -> ondestroy, -> Android se charge des appels de ces méthodes Un état de l activité est donc induit par l exécution de ces méthodes -> Inversion de contrôle (cf. M.Fowler) http://martinfowler.com/articles/injection.html Android impose un cycle de vie, un état de l activité 21

Architecture, vocabulaire Source : http://developer.android.com/guide/topics/fundamentals.html Application Activity Service ContentProvider BroadcastReceiver 22

package android.app; public class android.app.activity public class Activity extends ApplicationContext { protected void oncreate(bundle savedinstancestate){ protected void onstart(); protected void onrestart(); protected void onresume(); protected void onpause(); protected void onstop(); protected void ondestroy(); etc } induit un cycle de vie imposé par le «framework» 23

Inversion de Contrôle Rappel Activités activité_1 Activité 2 Activité 3 oncreate(..) onstart(); activité_1 = new Activité_1(); activité_1.oncreate(); activité_1.onstart();. Android, middleware public class Activity extends ApplicationContext { protected void oncreate(bundle savedinstancestate); protected void onstart();..} http://developer.android.com/reference/android/app/activity.html 24

Le cycle de vie d une activité Séquencement des appels imposé par le système 25

Activité son état http://inandroid.in/archives/tag/activity-lifecycle Attention une application dans l état Paused ou Stopped peut être supprimé par Android 26

En diagramme de séquences https://thamilandroid.files.wordpress.com/2013/04/activitylifecycle1.png 27

Un exemple: une très petite IHM Une «IHM» Un bouton, un écouteur, un clic et l heure est affichée! 1. En approche traditionnelle Tout est codé en Java IHM comprise 2. En approche déclarative Usage : d XML pour la configuration, de java pour l utilisation 28

Activity Un Click et l heure est actualisée import android.app.activity; import android.os.bundle; import static android.view.view.onclicklistener ; import android.widget.button; import java.util.date; public class Now extends Activity implements OnClickListener { private Button buttonnow; @Override public void oncreate(bundle bundle) { super.oncreate(bundle); buttonnow = new Button(this); // <- un bouton buttonnow.setonclicklistener(this);// <- un écouteur auprès de cette vue } setcontentview(buttonnow); // <- le bouton devient la vue, (l écran) } public void onclick(view view) { // <- à chaque click buttonnow.settext(new Date().toString()); } Est-ce une vue apparentée swing Et ici un MVC à lui tout seul? discussion 29

Activity-bis Un Click et l heure est actualisée Approche «déclarative», res/layout/activity_now.xml Balise XML <Button attribut android:onclick Le fichier res/layout/activity_now.xml <Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttonnowid" android:layout_width="match_parent" android:layout_height="match_parent" android:text="now" android:onclick="onclickbuttonnow" /> onclickbuttonnow: le nom de la méthode déclenchée à chaque clic public void onclickbuttonnow(view v){..} 30

L activity devient (version déclarative) public class NowActivity extends Activity { private Button buttonnow; protected void oncreate(bundle bundle) { super.oncreate(bundle); // Vue issue du fichier XML, le fichier R.java est généré automatiquement // R.java représente un accès en java aux ressources décrite en XML setcontentview(r.layout.activity_now); } // Button, identifié par un Id, est issu du fichier XML buttonnow = (Button)findViewById(R.id.buttonNowId); // l attribut XML onclick a ce nom de méthode comme valeur public void onclickbuttonnow(view view) { buttonnow.settext(new Date().toString()); } } 31

Discussion MVC? Démonstration Discussion MVC? Modèle? Vue? Contrôleur? 32

MVC discussion suite http://java.sun.com/blueprints/guidelines/designing_enterprise_applications/introduction/summary/index.html 33

Retour sur les API Android: un ensemble d API Activity Manager View System listes, boutons, navigateur (WebView) http://developer.android.com/guide/basics/what-is-android.html 34

View System Un usage du patron composite 35

View (Component), ViewGroup (Composite) Source: [Sheng-De Wang] C est bien un composite 36

Détaillé: Composite Source: [Sheng-De Wang] Exemple précédent setcontentview(buttonnow); 37

Une calculette: Layout, View, Button LinearLayout TextView EditText TableRow Button ProgressBar Description de cette interface en XML Fichier res/layout/main.xml 38

Interface, IHM : Approche déclarative./res/ Chaque composant possède un id (android:id= "@+id/push") 39

Architecture: la calculette, un classique Le Modèle La calculette munie de ses opérations (+,-,/,*, ) Les sources du modèle sont ici http://douin.free.fr/tp4calculette/ La calculette hérite de la classe java.util.observable La Vue L IHM affichage, zone de saisie, boutons Le Contrôleur Le comportement de l IHM 40

MVC nouvelle discussion Classes déjà écrites Calculette Modèle extends java.util.observable implements CalculetteI update(.. enter, add, sub, «XML» IHM CalcActivity Contrôleur Listeners extends android.app.activity implements java.util.observer Android L activity Android est une vue du Modèle Calculette (implements Observer) L activity Android est le contrôleur de l IHM décrite en XML (extends Activity) 41

Résumé: Application, Activity Un processus linux contient une application, Une application, peut contenir une ou plusieurs activités, Une activité se trouve dans un certain état, cf. cycle de vie Une activité possède sa vue (View) 42

Communication inter applications Intent, comme notification Souscription/Publication Appeler, déclencher une autre activité Avec éventuellement des paramètres et des résultats attendus L intergiciel/ Android sélectionne la «bonne application» Selon les critères exigés par le souscripteur Critères précisés lors de la publication Nécessaire adéquation à l exécution services fournis / services requis 43

Head First Android O Reilly https://books.google.fr/books?id=qkzrcqaaqbaj&lpg=pr24&dq=head%20first%20andro id%20book%20android&hl=fr&pg=pa82#v=onepage&q=head%20first%20android%20book%20 android&f=false 44

Patron Publish-Subscribe/Intent & Context Source: http://roboticswikibook.org, rappel 45

Sous Android Mediator, classe Context http://developer.android.com/reference/android/content/context.html Subscriber, classe BroadcastReceiver http://developer.android.com/reference/android/content/broadcastreceiver.html X,Y les thèmes, classe Intent http://developer.android.com/reference/android/content/intent.html IntentFilter http://developer.android.com/reference/android/content/intentfilter.html 46

3 Exemples 1. Un publisher s adresse à l intergiciel Une activité souhaite téléphoner À la recherche d une application prédéfinie 2. Un subscriber de SMS entrants Une activité souhaite filtrer le contenu des SMS entrants Installation d un Receiver 3. Un publisher et un subscriber Une activité souhaite publier un résultat à l intention d autres activités Le publisher d adresse à l intergiciel qui sélectionne les abonnés 47

Intent Publisher: Un mobile à l Intention de téléphoner Démarrer une activité prédéfinie : téléphoner, légitime public class TelephonerActivity extends Activity { } @Override protected void oncreate(bundle bundle) { super.oncreate(bundle); setcontentview(r.layout.activity_now); } public void onclick(view view) { Intent intent = new Intent(); intent.setaction("android.intent.action.dial"); this.startactivity(intent); } android.app.activity extends.. extends android.content.context 48

Publisher : Téléphoner Le souscripteur a dû déjà souscrire Discussions Intent intent = new Intent(); intent.setaction("android.intent.action.dial"); À la recherche de la bonne application effectuée par Android Ici un nom ("android.intent.action.dial"); Plusieurs élus possibles Composant logiciels, Maintenance Le patron chaîne de responsabilités est utilisé 49

Subcriber : Recevoir un SMS, le souscripteur Le souscripteur hérite de android.content.broadcastreceiver Et implémente ce qu il faut faire lors de la notification public class ReceiverSMS extends BroadcastReceiver{ // à chaque SMS reçu public void onreceive(context ctxt, Intent intent) { // } } // à chaque SMS reçu? Adéquation intention (Intent) ReceiverSMS par un filtre (IntentFilter) Réalisation : tout en java ou directives XML 50

Subcriber : Recevoir un SMS, le souscripteur Tout java: un receveur/souscripteur au sein d une activité public class SMSActivity extends Activity { private static class ReceiverSMS extends BroadcastReceiver{ // à chaque SMS reçu public void onreceive(context ctxt, Intent intent) { // }} protected void oncreate(bundle bundle) { super.oncreate(bundle); final String SMS_RECEIVED = "android.provider.telephony.sms_received"; IntentFilter filter = new IntentFilter(SMS_RECEIVED); registerreceiver(new ReceiverSMS(), filter); } setcontentview(r.layout.activity_now); 51

Publish/Subscribe Plusieurs Receveurs/souscripteurs, l un deux peut arrêter la propagation, une priorité peut être affecté à chaque receveur La liste des souscripteurs serait-elle : une Chaîne de responsabilités avec priorités? 52

L intent peut contenir des paramètres Les extras, un Bundle, une Map! Une table de couples <clé, valeur>, la clé est de type String Intent i = new Intent(); // i.setaction i.putextra("fichier","hello.mp3"); i.putextra("compteur",2); Des paramètres à l intention de 53

L activité lit les paramètres transmis Les extras, un Bundle, une Map! Une table de couples <clé, valeur>, la clé est de type String Intent i = getintent(); String f = i.getstringextra("fichier"); Des paramètres reçus par l activité sélectionnée 54

Conclusion Ce n est qu une introduction 55