Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes...
Transcript of Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes...
Avril 2006
Net Innovations
Cours sur J2ME
Présentation des contraintes de développement
Présentation générale du marché
SOMMAIRE
L’API J2ME
2001 Bruno Delb crée Net Innovations 2001 Conviction :
future adoption de J2ME 2002 Auteur du premier livre francophone sur J2ME :
“J2ME, applications Java pour terminauxmobiles”
2001-2005 Développement d’applications "of proof of concept“,de démonstrateurs; conférences, évangéliste J2ME
2002-2005 Coopération avec l’ETSI pour organiser les“PlugTests J2ME” Evénements de test d’interopérabilité Pour identifier les problèmes, notre solution
actuelle résolue de nombreux problèmes identifiés
Préambule
PARTIE 1
Présentation générale du marché
1990 Java est né :technologie pour systèmes embarqués
1995 JDK 1.0 (Java pour le Web) :applets, servlets
1999 Subdivision en J2EE, J2SE, J2ME 2000/2001 Premiers mobiles MIDP 1 2002 (Q4) Premiers mobiles MIDP 2 2004 (avril) 250 millions de mobiles Java 2005 (juin) 700 millions de mobiles Java 2006 Changement de nom de J2ME en JavaME
Rappel historique
Principales technologies : Navigation : WAP, iMode Applicatives : J2ME (MIDP), Symbian C++,
DoJa, InFusio, MS, Brew
La seule présente sur > 70 % des téléphones en France : J2ME
Le positionnement de J2ME par rapport à Java
Eléments clés du marché
GSM (Global System for Mobile Communications) Largement répandu en Europe, en Asie et en Australie Utilisé à 3 fréquences différentes : GSM900 et
GSM1800 en Europe, Asie et Australie, GSM1900 en Amérique du Nord et dans d’autres parties du monde
GPRS (General Packet Radio System) Génération suivant le GSM
EDGE (Enhanced Data GSM Environment) Version plus rapide du GSM
UMTS (Universal Mobile Telecommunications Service) Technologie sans il de 3ème génération
Réseaux mobiles
Eléments clés du marché
CDMA (Code-Division Multiple Access) Largement utilisé en Amérique du Nord 3 standards : CDMAOne (IS-95) :
Technologie sans fil de 2ème génération De 14.4Kbps à 115K bps
CDMA2000 (IS-136) Technologie sans fil de 3ème génération De 144Kbps à 2Mbps
Utilise les fréquences de 800 Mhz à 1,9 Ghz
Réseaux mobiles
Eléments clés du marché
iDEN (Integrated Dispatch Enhanced Network) Développé par Motorola Nextel est un des plus grand opérateurs supportant iDEN
PDC (Personal Digital Cellular) Standard Japonais pour les communications sans fil
Réseaux mobiles
Eléments clés du marché
Données sur le marché : Nombre de mobiles en 2003 : 470 millions d’unités / 59
milliards de $ Jeux mobiles :
2003 = 400 millions de $, 2007 = 6 à 8 milliards de $
Déclencheurs du marché : Qualité des produits (c’est un marché de masse) Efficacité de la distribution (opérateurs mobiles) Effort de portage réduit (les applications doivent être
adaptées à chaque mobile)
Le marché
Le marché
Modèle économique : Paiement à l’acte de téléchargement
Paiement à la mise à jour / évolution
Paiement par upload de meilleur score (jeux)
Paiement à la période d’utilisation
Paiement à la requête / à l’événement
PARTIE 2
Présentation des contraintes de développement
J2EE Java 2 Enterprise Edition Destiné aux serveurs lourds
J2SE Java 2 Standard Edition Destiné aux terminaux de bureau et aux postes de travail
J2ME Java 2 Micro Edition Destiné aux terminaux à mémoire réduite et aux
appareils Internet
Le positionnement de J2ME par rapport à Java
Définition de J2ME
HotSpot JVM KVM Card VM
Java Language
J2EE
(Java 2
Enterprise
Edition)
J2SE
(Java 2
Standard
Edition)
Profile
Profile
Java 2 Micro Edition
TVProfile
ScreenPhoneProfile
CarProfile
PersonalProfile
SmartCard
Profile
MID
Profile
PDAProfile
Profile
Profile
Serveur Station de travail
PC, laptop
NC
Set-top box,
net TV
Communicator
Screenphone
PDA
Smartphone
Téléphone
cellulaire
Pager
POS
Carte
Définition de J2ME
Pagers Téléphones cellulaires PDA (notamment le Palm Pilot) Téléphones avec écran Internet Communicateurs (téléphone / PDA) Boîtiers Terminaux de point de vente Electronique du grand public
La cible de J2ME
Définition de J2ME
Java = langage interprété incluant un compilateur en byte-code
A l’origine prévu pour des systèmes embarqués (Oak)
Adoption par le Web avec Servlets / JSP pour les serveurs et Applets / applications Java pour les postes de travail
Nouveau : J2ME = Java pour les terminaux mobiles (retour aux sources)
Définition de J2ME
Mémoire limitée Minimiser la mémoire utilisée Elimiter l’instantiation d’objets dès que possible Marquer comme disponible toutes les grandes allocations de
mémoire
Puissance de calcul limitée Stockage limité
Autres alternatives : stockage dans le fichier jar, lecture depuis le réseau
Bande passante limitée Différents types de connexion (de GSM à UMTS) La connexion peut être intermittente
Taille d’écran limitée Mécanismes possibles : zoom, barres de défilement
De nombreuses constraintes
Concepts de base
Midlet Application écrite pour MIDP
i-appli Aussi appelé “Java pour i-mode” Environnement Java basé sur CLDC Développé avant la fin de la spécification MIDP Incompatible avec MIDP Utilisé dans les mobiles i-mode
Concepts de base
Couches : Profiles Configurations Machines virtuelles Système d’exploitation de hôte
Concepts de base
Configuration = spécifications pour un ensemble de périphériques ayant des caractéristiques similaires
J2ME a deux types de terminaux ciblés : Les terminaux qui sont enfichées dans le mur : téléphones
avec écran Internet, boîtiers, appareils mis en réseau (CDC)
Les terminaux que vous tenez dans votre main : téléphones cellulaires, pagers, PDAs (CLDC)
Les configurations
Concepts de base
Les limites de la configuration : Délimitation entre les configurations floue Limites en général définies par la quantité de mémoire, la
bande passante, la connectivité, la consommation en batterie / puissance et l’interface utilisateur
Concepts de base
KVM (Kilo Virtual Machine) Implémentation runtime extrêmement légère de la
machine virtuelle Java pouvant être utilisée dans les terminaux avec peu de mémoire.
Le K signifie Kilobyte, indiquant que cette machine virtuelle fonctionne avec un total de mémoire de quelque 100 Ko.
Les machines virtuelles
Concepts de base
CVM (Convergence Virtual Machine) Machine virtuelle Java 2 conçue pour les terminaux
ayant besoin de l’ensemble des fonctionnalités de la JVM mais avec des capacités plus réduites.
Les terminaux utilisant CVM sont généralement des terminaux compacts et connectés, orientés consommateur.
Les machines virtuelles
Concepts de base
CLDC Consiste en la machine virtuelle K (KVM) et un ensemble
de bibliothèques de classes noyau appropriées à l’utilisation dans un profil de l’industrie.
Les terminaux concernés sont dotés d’interfaces utilisateur simplifiées, d’au moins 128 Ko de mémoire et de connexions réseau intermittentes à faible bande passante.
Deux versions : CLDC 1.0 (JSR 30) & CLDC 1.1 (JSR 139) avec notamment l’ajout de la virgule flottante
Les configurations
Concepts de base
CDC (JSR 36) Basé sur la spécification de machine virtuelle classique,
qui définit un environnement runtime complet. Destinée aux terminaux plus gros et qui peuvent se
connecter à Internet ou à d’autres terminaux, comme les visiophones fonctionnant sur Internet, les communicateurs et les systèmes de navigation.
Concepts de base
CDC : Destiné aux terminaux puissants. Implémentation Java complète.
CLDC : Destiné aux terminaux limités. Implémentation d’un sous-ensemble de Java.
Quelles sont les différences entre CDC et CLDC ?
Concepts de base
JNI (Java Native Interface) Les chargeurs de classe définis par l’utilisateur La réflexion La finalisation Les références faibles La virgule flottante Bibliothèques de classe plus petites que celles de
J2SE Certaines classes non inclues : File, Properties, Double,
EventObject
Gestion des erreurs limitée Concept de prévérification
Ce qui n’est pas inclus dans CLDC
Concepts de base
Inclut le package javax.microedition Packages noyau java.* (dans certains cas)
modifiés pour inclure uniquement ce qui est nécessaire : java.io, java.lang, java.util
Architecture plus modulaire
Et par rapport à J2SE ?
Concepts de base
MIDP Nécessite l’implémentation de référence CLDC Fournit des classes pour l’écriture d’applications
téléchargeables qui tournent sur des terminaux mobiles comme les téléphones cellulaires et les pagers bidirectionnels
Permet le téléchargement de nouveaux services comme les jeux, les applications de commerce et les services de personnalisation
Cible les téléphones mobiles comme les PalmOS
Les profils
La famille J2ME
Graphismes plein écran Transparence de l’image Son Composants utilisateur dans l’interface
utilisateur de bas niveau Accès à l’environnement (caméra, address
book, …)
Que manque-t-il dans MIDP 1 ?
La famille J2ME
MIDP 2 API pour les jeux Signature des applications Transparence pour les images Amélioration de la gestion des pressions de touche Support du son OTA (Over The Air) obligatoire Push registry Amélioration du graphisme
La famille J2ME
PDAP (JSR 75) Se trouve au niveau supérieur de la spécification CLDC. Fournit une API de stockage de données A l’origine, destiné à une nouvelle famille de terminaux En définitive, simple surcouche de MIDP permettant :
Un accès au système de fichier du mobile Un accès aux fonctionnalités PIM du mobile
(répertoire d’adresse, agenda, …)
La famille J2ME
Foundation Profile (JSR 46) Destiné aux terminaux qui ont besoin de support pour
une plate-forme Java avec un réseau riche mais ne nécessitent pas d’interface utilisateur
Fournit en outre un profil de base pour d’autres profils, qui auraient besoin de construire leurs propres fonctionnalités en ajoutant, par exemple, une GUI
Cible les terminaux suivants : 1 024 Ko de ROM (sans compter les besoins mémoire des
applications) 512 Ko de RAM (sans compter les besoins mémoire des
applications) connectivité à certains types de réseaux aucune GUI
La famille J2ME
Personal Profile (JSR 62) Repackage l’environnement d’application PersonalJava
pour fournir la spécification J2ME aux terminaux qui ont besoin d’un haut niveau de connectivité Internet et d’une fidélité Web.
Conçu pour être compatible avec la spécification de l’environnement d’application PersonalJava.
Cible les terminaux suivants : 2,5 Mo de ROM 1 Mo de RAM connectivité robuste à certains types de réseaux GUI avec un haut degré de fidélité Web et la possibilité de faire
tourner des applets
La famille J2ME
RMI (JSR 66) Supporte le RMI interapplication sur des connexions
TCP/IP pour des applications écrites en Foundation Profile
Interopérable avec l’API J2SE RMI Ouverture ultérieure sur JINI (pour les périphériques)
La famille J2ME
Codage (développeur sur un mobile limité) Commencer avec un mobile limité (par exemple Nokia
Serie40) avant de le porter à des mobiles moins limités (par exemple Nokia Serie60)
Portage Adaptation du code et du contenu (images, sons, …) à
chaque fabricant et à chaque modèle de mobile, parfois à différents firmwares !
Prévérification Le process de vérification des classes est découpée en
deux process : prévérification : fait en dehors du mobile en utilisant
l’outil preverify vérification : fait sur le mobile
La famille J2ME
Obfuscation Rendre le code difficile à comprendre quand il est
décompilé En général, réduit la taille du fichier jar
Test & certification Provisioning
Provisioning = fourniture de services de télécommunications aux utilisateurs
OTA (Over The Air) = technologie de réseau sans fil Bluetooth, câble, IRDA
La famille J2ME
Outils de base J2SE (compilateur Java) Wireless Toolkit (émulateur de base, preverifier)
SDK & émulateurs Wireless Toolkit (très permissif) Emulateurs de fabricants BlackBerry Java Development Kit Wireless Toolkit (émulateur de base, preverifier)
IDE : EclipseME Borland JBuilder Mobile Edition NetBeans Mobility Pack IBM WebSphere Studio Device Developer Metrowerks Codewarrior Wireless Studio
La famille J2ME
Compilation : Nokia Developers Suite Ant + Antenna
Simplification du codage Remplacement des ressources Ajout de code conditionnel à Java Pré-traitement du code avant compilation
Obfuscateur (Pro Guard, Retroguard, …)
Editeur de niveau / de carte : Tile Studio Votre propre éditeur
Graphiques : Photoshop, etc
Test : Emulateurs et téléphones réels
La famille J2ME
Le challenge du portage
Une technologie à part grâce à ses principes : “Write once, run anywhere”
“Standard de fait”
L’interopérabilité reste à ce jour un voeu pieu
J2ME sans l’interopérabilité perd l’essentiel de son sens
J2ME est …
Mais …
Or …
PARTIE 3
L’API J2ME
Stockage local de données : Base de données orientée simple enregistrement pour
stocker de manière persistente des informations MIDP :
RMS (Record Management System) DoJa :
Scratchpad
Interface utilisateur : 2 APIs pour 2 niveaux :
Haut niveau basé sur des widgets Bas niveau basé sur le canvas (niveau des pixels)
MIDP : LCDUI (Liquid Crystal Display User Interface)
Les principaux concepts de MIDP
J2ME - CLDC
Communication GCF
Generic Communications Framework
Multimedia Sons (musiques + sons naturels) Vibreur Lumière Contrôle de la caméra Vidéo
J2ME - CLDC
La classe java.util.Properties n’est pas supportée.
Un jeu limité de propriétés spécifiques à CLDC est supporté.
Pour y accéder, il est nécessaire d’utiliser la méthode System.getProperty(String key).
Les classes supportées
J2ME - CLDC
Les bibliothèques réseau, d’E/S et de stockage de la technologie Java sont trop grosses pour les terminaux CLDC : Plus de 100 classes Taille statique totale des fichiers de clase : plus de 200
Ko
Les classes d’origine n’ont jamais été conçues pour les petits terminaux
Les connexions réseau
J2ME - CLDC
CLDC spécifie une alternative au framework Generic Connection : Plus de cohérence dans le support de différents types
d’E/S Moyen pratique de supporter différents protocoles Portabilité améliorée des applications Compatibilité montante avec les bibliothèques de classe
Java standard (le mapping existe) Consomme moins de mémoire
J2ME - CLDC
Possibilités du Generic Connection Forme générale :
Connector.open("<protocole>://<adresse>:<parametres>"); Fichiers : Connector.open("file://pierre.txt"); HTTP : Connector.open("http://www.yahoo.com"); Sockets :
Connector.open("socket://129.144.111.222:9000"); Ports de communication :
Connector.open("comm://9600:18N");
J2ME - CLDC
MIDP doit être utilisable sur tous les terminaux : La majorité des terminaux sans fil sont utilisés dans une
main Petits écrans Tous les terminaux n’ont pas de terminal de pointage
Doit constamment penser aux utilisateurs finaux : Les terminaux d’information mobile sont des produits
clients, pas des ordinateurs de bureau Unification de l’interface utilisateur parmi les MIDP
L’interface utilisateur
J2ME - MIDP
Deux couches d’API
Les APIs de haut niveau pour la portabilité: Etre exécutables et utilisables sur tous les terminaux
MIDP Aucun accès direct aux fonctionnalités de terminal natif
Une interface utilisateur en deux couches
J2ME - MIDP
Les APIs de bas niveau : Accès aux primitives de dessin natif, des événements sur
les touches du terminal, des terminaux de saisie natifs, … Permet aux développeurs de choisir de compromettre la
portabilité pour des apports pratiques à l’utilisateur, si besoin
Une interface utilisateur en deux couches
J2ME - MIDP
Principes : Les interfaces utilisateur MIDlet sont constituées à
partir de simples écrans Les écrans doivent contenir une quantité minimale
d’informations : en général une seule chose Les écrans doivent ne demander qu’une seule interaction
de l’utilisateur Pas d’opérations complexes
Principes de conception basés sur le Screen
J2ME - MIDP
Le timer gère les files d’attente et les livraisons.
Le timer peut : Déclencher plusieurs tâches par timer Etre périodique Etre déclenché à intervalles fixes Faire du one shot
Le timer
J2ME - MIDP
L’API de haut niveau de saisie est gérée en utilisant des commandes abstraites au lieu d’accès directs aux boutons softs : Chaque implémentation MIDP fait une correspondance
entre les boutons softs et les éléments du menu pour un terminal particulier
Les MIDlets peuvent fournit des conseils sémantiques (comme retour)
L’API de bas niveau donne au développeur le moyen d’accéder aux événements de pression des touches.
La saisie
J2ME - MIDP
Exemple : new Command("Achat", Command.SCREEN, 1); new Command("Info", Command.SCREEN, 2); new Command("Retour", Command.BACK, 1);
Les commandes d’entrée
J2ME - MIDP
Base de données orientée enregistrement léger : API indépendante du terminal ID unique d’enregistrement pour chaque enregistrement
du store Les enregistrements sont des tableaux d’octets Partagés dans une suite MIDlet Mise à jour atomique pour les enregistrements simple Support de l’énumération, du tri et du filtre
RMS
J2ME - MIDP
La plate-forme de terminal est responsable de : L’intégrité des données lors des boots et des
changements de batterie Le stockage en mémoire flash ou d’autre terminal
RMS
J2ME - MIDP
Les méthodes RMS : Stockage : openRecordStore, closeRecordStore,
listRecordStore, deleteRecordStore, getRecordSize, getNumRecords
Données : addRecord, deleteRecord, getRecord, setRecord, getRecordSize
Sélection : RecordEnumeration, RecordFilter, RecordCompare
RMS
J2ME - MIDP
Les terminaux MIDP doivent implémenter le protocole http.
MIDP étend le réseau du framework Generic Connection de CLDC :
Les méthodes HttpConnectioncomprennent : get/setRequestProperty, get/setRequestMethod,
getResponseCode, getResponseMessage, getHeaderField, getURL, getHost, getPort, getFile, getQuery, getRef
La connexion réseau
J2ME - MIDP
Cycle de vie de la midlet : Constructeur startApp() : démarrage et reprise pauseApp() destroyApp()
Sortie :destroyApp (false);
notifyDestroyed ();
Analyse d’une midlet
J2ME - MIDP
Gestion des commande : Mettre en place un listener :
implements CommandListener
Créer la commande :private Command cmdExit;
cmdExit = new Command ("Exit", Command.EXIT, 1);
« Enregistrer » la commande :canvas.addCommand (cmdExit);
canvas.setCommandListener (this);
Gérer les commandes :public void commandAction (Command myCommand,
Displayable myDisplayable) {
if (myCommand == cmdExit) {
destroyApp (false);
notifyDestroyed ();
}
}
J2ME - MIDP
Basculer sur l’écran graphique :public Display display;
Canvas canvas = new MyCanvas();
display = Display.getDisplay(this);
display.setCurrent(canvas);
J2ME - MIDP
Etendre la classe :extends Canvas
Méthode de rafraichissement de l’écran :public void paint(Graphics g)
Etendre la classe : getWidth() & getHeight() pour connaître la taille de
l’écran
J2ME - MIDP
Créer l’écran graphique
Créer un thread :
implements Runnable
Thread thread;
thread = new Thread (this);
thread.start();
public void run() {
while (true) {
}
}
J2ME - MIDP
Gérer le clavier :
public void keyPressed (int keyCode) {
switch (keyCode) {
case Canvas.KEY_NUM1:
break;
default:
switch (getGameAction (keyCode)) {
case Canvas.FIRE:
break;
}
}
}
J2ME - MIDP
Charger et afficher une image :
Image myimage = null;
try {
myimage = Image.createImage ("/monimage.png");
} catch (Exception e) {
}
public void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage (myimage, getWidth() / 2, getHeight() /
2, Graphics.HCENTER | Graphics.VCENTER);
}
J2ME - MIDP
Mécanisme de rafraichissement de l’écran :
public void run() {
while (true) {
if (!pause) {
repaint();
try {
Thread.sleep (100);
} catch (Exception e) {
}
}
}
}
J2ME - MIDP
Jouer un son :
try {
InputStream is =
getClass().getResourceAsStream("music.wav");
Player p = Manager.createPlayer(is, "audio/X-wav");
p.start();
} catch (IOException ioe) {
} catch (MediaException me) {
}
J2ME - MIDP
JSR 75 : accès au système de fichier et aux fonctionnalités PIM du mobile
JSR 82 : accès à la couche Bluetooth du mobile depuis Java
JSR 120 : possibilité d’envoyer et de recevoir des SMS depuis et vers des applications Java
JSR 135 : API multimédia (son, vidéo, caméra, …) JSR 172 : appel de Web services (incluse un parser
XML)
Autres APIs
J2ME - MIDP
JSR 177 : pont entre J2ME et la carte SIM JavaCard
JSR 179 : géolocalisation du mobile JSR 180 : protocole SIP (ex d’application : VoIP) JSR 184 : 3D JSR 205 : possibilité d’envoyer et de recevoir des
MMS depuis et vers des applications Java JSR 226 : support du format SVG en Java
J2ME - MIDP
Fragmentation des caractéristiques des mobiles : Taille de l’écran Taille maximale des jar Taille de la heap memory Taille maximale du RMS, …
Fragmentation des fonctionnalités des terminaux : Bugs d’implémentation APIs : MIDP 1 / MIDP 2 / DoJa / VSCL/ etc …
Fragmentation des caractéristiques des opérateurs mobiles : Passerelles Ports ouverts, …
Le portage se heurte à de gros problèmes
J2ME - MIDP
Développer seulement un code source Un code source automatiquement généré pour chaque
mobile (en utilisant un préprocesseur)
Adapter automatiquement les ressources aux limitations du terminal Images (images plein écran + + sprites) Musiques (format, characteristics, …) Sons (format) Limitations concernant la taille des objets, la taille des
images, la heap memory, la taille maximale du jar, les bugs connus, …
Adapter dynamiquement à la taille de l’écran dès que possible
Guideline de portage
J2ME - MIDP
Traiter dynamiquement les images dès que possible (ex: utiliser le mirroir, …)
Gérer les événements externes (comme les appels entrants)
Supporter la localisation Supporter les fonctionnalités avancées quand elles
sont disponibles (exemple : vibreur, sons naturels, exécution en tâche de fond, appel téléphonique, envoi d’un SMS, …)
J2ME - MIDP
J2ME - MIDP
Nokia 7210Screen size : 128x128
Max jar size : 63 Kb
Heap memory size :
195 Kb
Storage size : 610 KbNokia 6600Screen size : 176x208
Max jar size : no limit («
dynamic allocation »)
Heap memory size : 3 Mb
Storage size : 6 Mb
Nokia E70Screen size : 352x416
Max jar size : no limit (« dynamic
allocation »)
Heap memory size : no limit («
dynamic allocation »)
Storage size : 70 Mb
J2ME Wireless Toolkit 2.1http://java.sun.com/products/j2mewtoolkit/download-
2_1.html
Portail Sun Java :http://java.sun.com
Livres : J2ME, applications pour terminaux mobiles.
Bruno Delb (éditions Eyrolles, juin 2002) Java development on PDAs. Daryl Wilding-
McBride (éditions Addison-Wesley) J2ME in a nutshell. Kim Topley (éditions
O’Reilly)
Ressources
Net Innovations
Bruno [email protected]
Web : http://www.netinnovations.frMob : 06 09 35 26 14
Conclusion