NFA022 : Programmation des smart-phones et tablettes tactiles Jean-Ferdy Susini! Maître de Conférences - CNAM! Département Informatique Paris, 09/06/2014
Objectifs:! Structure du certificat CP48 Former des techniciens opérationnels dans tous les aspects de la programmation mobile (smart-phones, tablette tactile...) et possédant les connaissances nécessaires pour leur permettre de s adapter aux évolutions de ces technologies. code UE Intitulé ects Commentaire NFA031 Programmation avec Java : notions de base NFA003 Principes et fonctionnement des systèmes d exploitation 6 Les principes de programmation : oui mais NFA032 est fortement recommandée et probablement aussi NFA035 4 Les rudiments des systèmes d exploitations et leur principaux services NFA008 Bases de données 6 Les rudiments de bases de données NFA016 Développement Web 4 côté client (HTML/JavaScript) NFA022 NFA025 NFA024 Principes et programmation système et réseau pour smartphones et tablettes tactiles Mise en œuvre de la programmation de smart-phones et tablettes tactiles Projet application mobile : mise en pratique 4 Overture générale sur le monde de la programmation mobile. Facilite l adaptation. 6 La programmation mobile sur une plateforme : la plateforme Android 6 Projet UA333G Expérience professionnelle 6 Stage en entreprise ou rapport d activité pro Total 42 2
Organisation de NFA022 3 Équipe Pédagodique! Responsable : Olivier PONS (OP)! Jean-Ferdy SUSINI (JFS)! Samia BOUZEFRANE (SB)! Jérome DUPIRE (JD)! Un élément central pour les personnes suivant l UE en FOD ou en cours du soir :! http://jeanferdysusini.free.fr/cours/cp48/
Organisation de NFA022 3 Équipe Pédagodique! Responsable : Olivier PONS (OP)! Jean-Ferdy SUSINI (JFS)! Samia BOUZEFRANE (SB)! Jérome DUPIRE (JD)! Un élément central pour les personnes suivant l UE en FOD ou en cours du soir :! http://jeanferdysusini.free.fr/cours/cp48/
Organisation de NFA022 03/03/2014 ; 18h00-21h30 (CNAM : 17.02.15) : Introduction (JFS)! 4 10/03/2014 ; 18h00-21h30 (CMG : 4.42) : IOS (JFS)! 17/03/2014 ; 18h00-21h30 (CMG : 4.42) : IOS (JFS)! 24/03/2014 ; 18h00-21h30 (CMG : 4.42) : Android (JFS)! 31/03/2014 ; 18h00-21h30 (CMG : 4.42) : Android (JFS)! 28/04/2014 ; 18h00-21h30 (CMG : 4.42) : WebMobile (OP)! 05/05/2014 ; 18h00-21h30 (CMG : 4.42) : WebMobile (OP)! 12/05/2014 ; 18h00-21h30 (CMG : 4.42) : Carte SIM (SB)! 19/05/2014 ; 18h00-21h30 (CMG : 4.42) : Carte SIM (SB)! 26/05/2014 ; 18h00-21h30 (CMG : 4.42) : Capteurs IHM (JD)! 02/06/2014 ; 18h00-21h30 (CMG : 4.42) : Capteurs IHM (JD)! 30/06/2014 ; 18h00-21h00 (CMG :???????) : Examen.
Petit questionnaire 5 Combien d entre vous ont une expérience (avoir travaillé dans le domaine, avoir suivi des cours, fait des EDs, ou avoir pratiqué en amateur chez soi en s appuyant sur des ressources en ligne ou livresques) :! de la programmation informatique! de la programmation java! de la programmation objet! de la programmation objet java! de la programmation mobile! de la programmation Android! de la programmation Web côté client! de la programmation Web côté serveur! de la programmation Système?
Évolution des smart-devices Sources : Android.com, Wikipedia, developer.apple.com, www.oracle.com et différents autres sites Paris, 09/06/2014
Un peu d histoire 7 Années 90 : téléphonie cellulaire, Programmation propriétaire environnements totalement fermés! Parallèlement apparition des PDA (Psion, Apple, Palm, Microsoft )! Fin des années 90, évolution majeure de Java :version 1.2 rebaptisée un temps version 2.0. Décliné en 3 grandes éditions :! JEE : programmation des serveurs d applications! JSE : programmation des clients lourds! JME : informatique embarquée
Java 8 package optionnels package optionnels Java! Entreprise! Edition! (JEE) Java! Standard! Edition! (JSE) Personal! Profile Fondation! Profile CDC JVM MIDP CLDC JavaCard! API JVM CVM KVM CardVM La technologie J2ME se compose d une machine virtuelle et d un jeu d APIs appropriées pour fournir des environnements d exécution sur mesure aux terminaux mobiles.
Java 2 Micro Edition puis JME 9 Cette édition regroupe en fait différentes incarnations de Java différenciées par la notion de configuration et de profil :! Java Card orienté vers les cartes à puces! CLDC/MIDP : destiné à programmer des applications Java pour terminaux mobiles et PDA! CDC : supporté par les terminaux haut de gamme de l époque et set top box, et autres gateways! DOJA : profil spécifique porté par NTT-DOCOMO (en France c était BT avec i-mode)
J2ME 10 L architecture se découpe en plusieurs couches :! Les configurations : définissent une plate-forme minimale en terme de services, comprenant : (i) une spécification de machine virtuelle dédiée (ii) un ensemble de classes de bases! CLDC (Connected Limited Device Configuration)! CDC (Connected Device Configuration).! Les profiles : spécification des caractéristiques communes d utilisation (affichage, événements d entrées/sorties : pointage, clavier ). Les mécanismes de persistance (base de données légère intégrée)
CDC, Fondation Profile 11 CDC : Connected Device Configuration! gérer une grande variété d IHM, voir pas d IHM graphique! mémoire allouée de 2 à 16 Mo! processeur 16 bits ou 32 bits! connexion réseau! Cible : set-top boxes, Consoles internet, routeurs et équipements réseau, PDA haut de gamme.! Le Fondation Profile sert de brique de base et se focalise sur la gestion du réseau. Les profiles au dessus ajoutent des services (Personnal Profile pour l interface graphique, RMI pour le support de Java-RMI )
CLDC/MIDP 12 Popularise l idée de développer des applications sur téléphone mobile! Le profile le plus déployé, supporté par la plupart des opérateurs! Vocation principale : la programmation de casual games! Définit une notion particulière d application : la midlet, associée à un cycle de vie particulier et un modèle de sécurité
Les profiles sur CLDC pour la téléphonie 13
CLDC 14 Minimum 160 à 500 Ko de (RAM+ROM)! Processeur à 16-32 bits (vitesse 16Mhz ou +)! Alimentation limitée, prise en charge d une batterie! Connexion au réseau (non permanente)! Interface graphique limitée ou inexistante (en général, définie dans les profils)! KVM! Pré-vérification statique du bytecode +vérification à l exécution (au chargement)! Gestion adaptée des classes (jar+jad)
CLDC 15 Pas de support pour les opérations flottantes! Pas de gestion des finalize d objets! Nombre restreint d erreurs (Exceptions)! Pas de JNI (méthodes natives)! Pas de ClassLoader utilisateur! Pas d introspection -> pas de RMI, de serialize! Pas de groupe de threads ou de demons! Pas de Weak-References
CLDC 1.1 16 Support limité des Weak References (java.lang.ref)! Ajout des calculs en flottant (Double, Float) support matériel recommandé! Ajout Calendar, Date et TimeZone! Minimum mémoire 160 -> 192 (principalement pour le support des opérations flottantes)! Support des noms de threads! Introduction de la méthode interrupt sur la classe Thread pour permettre de jouer plus finement avec l ordonnancement
De nos jours : CLDC 8 17 Support d appareils plus conséquents :! Compatibilité ascendante avec les versions antérieures (malgré le saut de version)! 1 Mo de mémoire «non volatile» pour stocker CLDC et ses librairies! 1 Mo de RAM pour le runtime, les piles et le tas! Support étendu d un certains nombre d APIs :! Support des annotations! ajout de gestion réseau : sous ensemble java.net! Support étendu des WeakReferences avec l ajout des Collections (java.util)! Ajout partiel de la gestion des java.nio
CLDC 18 Bibliothèques principales :! java.lang.*! java.util.*! java.io.*! javax.microedition.io! Modèle de sécurité! Opérations d entrée/sorties! Support du réseau! Internationalisation
Mécanismes et classes de base 19 Le package java.lang :! Les interfaces : Runnable! Les classes : Boolean, Byte, Character, Class, Integer, Long, Math, Object, Runtime, Short, String, StringBuffer, System, Thread, Throwable! On retrouve des services de bases de Java mais la plupart des classes ont des méthodes en moins ou une implantation simplifiée des certaines autres.! Pas de gestion de processus externes, pas de clonage d objet, pas de sérialisation, introspection très limitée, gestion simplifiée des propriétés de l environnement
Mécanismes et classes de base 20 Le package java.io :! Les interfaces : DataInput, DataOutput! Les classes : ByteArrayInputStream, ByteArrayOutputStream, DataInputStream, DataOutputStream, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, PrintStream, Reader, Writer! Mécanisme de base de gestion des flux de données de Java (mécanisme de gestion des entrées/sorties)
Mécanismes et classes de base 21 Le package java.util :! Les interfaces : Enumeration! Les classes : Calendar, Date, Hashtable, Random, Stack, Timer, TimerTask, TimeZone, Vector! Gestion des dates et du temps réel (vient étendre le modèle de concurrence à base de threads par des timers)! Collections primitives d objets à l aide de classique Pile, table de hashage et tableau dynamique. Les itérateurs ne sont pas proposé mais on dispose cependant d énumérations du contenu des collections
Mécanismes et classes de base 22 Le package javax.microedition.io :! Les interfaces : Connection, ContentConnection, Datagram, DatagramConnection, InputConnection, OutputConnection, StreamConnection, StreamConnectionNotifier! La classe : Connector! Défini le Generic Connection FrameWork (GCF) adaptation de Java au système mobile à capacité de connexion limité.! Gère les objets de connections en particulier les connexions réseau ; aucune spécification de service à ce niveau
Mécanismes et classes de base 23 Le paramètre String de la méthode Connector.open(String URL) a le format suivant : protocole:adresse:paramètres. Exemples :! Connexion HTTP :! Connector.open("http://java.sun.com/developper?exemple=toto"); Connexion Socket :! Connector.open("socket://129.144.111.222:9000"); Connexion Datagram :! Connector.open("datagram://adress:port"); Communication à travers un port série :! Connector.open("comm:com0;baudrate=9600"); Ouverture d un fichier! Connector.open("file://myFile.txt");
Environnement MIDP Classique 24 Matériel
Environnement MIDP Classique 24 Système natif (OS généralement Linux) Matériel
Environnement MIDP Classique 24 CLDC Système natif (OS généralement Linux) Matériel
Environnement MIDP Classique 24 MIDP CLDC Système natif (OS généralement Linux) Matériel
Environnement MIDP Classique 24 Ajouts Spécifiques MIDP CLDC Système natif (OS généralement Linux) Matériel
Environnement MIDP Classique 24 Applications! MIDP! Standard Applications! Spécifiques Ajouts Spécifiques Applications! Natives! MIDP CLDC Système natif (OS généralement Linux) Matériel
MIDP 25 Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel
MIDP 25 Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! Paused RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel
MIDP Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! 25 L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! Paused startapp Active RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel
MIDP Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! 25 L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! Paused startapp pauseapp Active RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel
MIDP Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! Paused startapp pauseapp Destroyed Active destroyapp RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel 25
MIDP Ciblé pour les téléphones mobiles/pda : une connexion réseau pas si intermittente, un écran pas terrible! L application s appelle la Midlet. 3 états :! Active (startapp)! Suspendue (pauseapp)! Détruite (destroyapp)! Paused startapp pauseapp Destroyed Active destroyapp destroyapp RMS gestion d enregistrements associés aux Mid-lets! MIDP impose au minimum HttpConnection : permettant une communication bidirectionnelle sans fil (non permanente) le support datagramme est optionnel 25
MIDP 26 Version 1 :! 128 Ko pour MIDP persistant! 8 Ko pour stocker le data de la Midlet persistant! 32 Ko pour le fonctionnement du Runtime Java (le tas et la pile)! Version 2 :! 256 Ko persistant! 8 Ko app persistant! 128 Ko heap
MIDP 27 Caractéristiques affichage min :! 96x54 pixels! 1 bit de profondeur! ratio 1:1! Caractéristiques dispositifs d entrées :! QWERTY kbd! ITU-T keyboard (téléphone)! touch pad
MIDP 28 3 packages :! javax.microedition.midlet (~Applet) : Socle technique destiné à gérer le cycle de vie d une application! javax.microedition.lcdui : gestion de l interface homme/machine (IHM).! Javax.microedition.rms : base de données persistante légère.
MIDP 29 Une midlet active a accès à la totalité de l écran, représenté par la classe l'unique instance de la classe Display. (Display.getDisplay(myMidlet))! La midlet affiche à tout moment sur l'écran un objet Displayable : de type Canvas ou Screen! 2 modes d affichage :! une API de haut niveau : fournit des composants simples qui favorise la portabilité (IHM de type formulaire)! une API de bas niveau : permet d exploiter les fonctionnalités du terminal ; accès direct à l'écran et aux événements touches et système de pointage
MIDP 30 Gestion de la persistance (RMS : Record Management System)! Classe : RecordStore! API indépendante des terminaux! Un enregistrement est un tableau de bytes! sauvegarde possible en mémoire permanente! partage entre applications possible! Support pour les énumérations et les ensembles! Mise à jour atomique des enregistrements simples
MIDP les menus de commandes 31
DOJA 32 Concurrent de MIDP développé par NTT DOCOMO au dessus de CLDC intégré à la solution i-mode (HTML adapté au mobile)! Spécifications plus précise de l architecture matérielle et des services nécessaires. On retrouve les caractéristiques suivantes :! Support du HTTP, HTTPS! Composants génériques pour une interface de haut niveau et contrôle de bas niveau du graphisme! Zone de stockage des données (ScratchPad)! Téléchargement, sécurité, gestion des applis (JAM, ADF )
DOJA 33 com.nttdocomo.lang! com.nttdocomo.io! com.nttdocomo.net! com.nttdocomo.ui
CE, Symbian, Palm, Brew, BlackBerry 34 Convergence PDA et téléphone mobile! Les OS pour smart-devices proposent leurs propres solutions pour le développement d applications (SDK, déploiement des applications -signatures-)! Développement assez complexes.! Les interfaces sont perçues comme des interfaces Desktop adaptées aux mobiles (clavier minimal, stylet, molette de défilement )! Réservé longtemps aux devices haut de gamme! orientation vers les milieux professionnels
l iphone d Apple 35 Un démarrage en 2 temps :
l iphone d Apple 35 Un démarrage en 2 temps : juin 2007 : iphone première génération bouleverse les usages et les standards d IHM. Apple promet un kit de dev basé sur les technos Web (HTML 5)
l iphone d Apple 35 Un démarrage en 2 temps : juin 2007 : iphone première génération bouleverse les usages et les standards d IHM. Apple promet un kit de dev basé sur les technos Web (HTML 5) juin 2008 : IOS 2, apparition de l AppStore. Un SDK et un modèle économique très efficace
l iphone d Apple 35 Un démarrage en 2 temps : juin 2007 : iphone première génération bouleverse les usages et les standards d IHM. Apple promet un kit de dev basé sur les technos Web (HTML 5) juin 2008 : IOS 2, apparition de l AppStore. Un SDK et un modèle économique très efficace Fixe certains standards des smart-phones : Grand écran tactile multipoints, GPS, accéléromètres, compas, caméra,wifi, GPRS (connectedless?) Transforme profondément la conception des applications
Android 36 1 an plus tard Google embraye le pas d Apple et lance Android Système ouvert, Open Source (licence Apache) basé sur un noyau Linux et sur le langage Java. Il reprend les grands principes d ios, et offre un environnement très complet à tous les constructeurs Le SDK est disponible pour un grand nombre de plateforme, le langage de prédilection est Java afin de favoriser l adoption par les développeurs. Possibilité de développer en Natif (C/C++) grâce au NDK, mais peu de support de déploiement
L avenir? 37 Évolution extrêmement rapide, difficile à prédire (voir impossible)
Les services de distributions d application AppStore d Apple : sert souvent de référence! GooglePlay (ex Google Market) : en forte croissance, porté par la déferlante de nouveaux terminaux Android! Windows Phone Store (ex MarketPlace) : assez loin derrière ses concurrents, Windows 8 ne semble pas parvenir à changer la donne! Amazon App-Shop for Android : encore jeune mais qui semble très rentable dans le monde android! On peut difficilement ignorer ce nouveau terrain de jeu pour les développeurs 38