Net Innovations

Transcription

Net Innovations
Cours sur J2ME
Net Innovations
Avril 2006
SOMMAIRE
Présentation générale
du marché
Présentation des
contraintes de
développement
L’API J2ME
Préambule

2001
2001

2002

2001-2005

2002-2005

Bruno Delb crée Net Innovations
Conviction :
future adoption de J2ME
Auteur du premier livre francophone sur J2ME :
“J2ME, applications Java pour terminaux
mobiles”
Développement d’applications "of proof of concept“,
de démonstrateurs; conférences, évangéliste J2ME
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
PARTIE 1
Présentation générale du marché
Rappel historique

1990

1995






1999
2000/2001
2002 (Q4)
2004 (avril)
2005 (juin)
2006
Java est né :
technologie pour systèmes embarqués
JDK 1.0 (Java pour le Web) :
applets, servlets
Subdivision en J2EE, J2SE, J2ME
Premiers mobiles MIDP 1
Premiers mobiles MIDP 2
250 millions de mobiles Java
700 millions de mobiles Java
Changement de nom de J2ME en JavaME
Eléments clés du marché
Le positionnement de J2ME par rapport à Java

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
Eléments clés du marché
Réseaux mobiles

GSM (Global System for Mobile Communications)



GPRS (General Packet Radio System)


Génération suivant le GSM
EDGE (Enhanced Data GSM Environment)


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
Version plus rapide du GSM
UMTS (Universal Mobile Telecommunications
Service)

Technologie sans il de 3ème génération
Eléments clés du marché
Réseaux mobiles

CDMA (Code-Division Multiple Access)



Largement utilisé en Amérique du Nord
3 standards :
CDMAOne (IS-95) :



CDMA2000 (IS-136)



Technologie sans fil de 2ème génération
De 14.4Kbps à 115K bps
Technologie sans fil de 3ème génération
De 144Kbps à 2Mbps
Utilise les fréquences de 800 Mhz à 1,9 Ghz
Eléments clés du marché
Réseaux mobiles

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
Le 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é

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
Définition de J2ME
Le positionnement de J2ME par rapport à Java

J2EE



J2SE



Java 2 Enterprise Edition
Destiné aux serveurs lourds
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
Définition de J2ME
Serveur
Pager
PDA
Station de travail
Communicator
NC
Set-top box,
net TV
POS
Smartphone
Screenphone
PC, laptop
Profile
Téléphone
cellulaire
Profile
Profile
J2EE
(Java 2
Enterprise
Edition)
Profile
TV
Profile
J2SE
(Java 2
Standard
Edition)
Screen
Phone
Profile
Personal
Profile
Car
Profile
Carte
PDA
Profile
Java 2 Micro Edition
MID
Profile
Smart
Card
Profile
Java Language
HotSpot
JVM
KVM
Card VM
Définition de J2ME
La cible 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
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)
Concepts de base
De nombreuses constraintes

Mémoire limitée





Puissance de calcul limitée
Stockage limité


Autres alternatives : stockage dans le fichier jar, lecture
depuis le réseau
Bande passante 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
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
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
Les configurations


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)
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
Les machines virtuelles

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.
Concepts de base
Les machines virtuelles

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.
Concepts de base
Les configurations

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
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
Quelles sont les différences entre CDC et CLDC ?

CDC :



Destiné aux terminaux puissants.
Implémentation Java complète.
CLDC :


Destiné aux terminaux limités.
Implémentation d’un sous-ensemble de Java.
Concepts de base
Ce qui n’est pas inclus dans CLDC







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
Concepts de base
Et par rapport à J2SE ?


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
La famille J2ME
Les profils

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
La famille J2ME
Que manque-t-il dans MIDP 1 ?





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, …)
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é)


Portage


Commencer avec un mobile limité (par exemple Nokia
Serie40) avant de le porter à des mobiles moins limités
(par exemple Nokia Serie60)
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



SDK & émulateurs





J2SE (compilateur Java)
Wireless Toolkit (émulateur de base, preverifier)
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







Tile Studio
Votre propre éditeur
Graphiques :


Obfuscateur (Pro Guard, Retroguard, …)
Editeur de niveau / de carte :


Simplification du codage
Remplacement des ressources
Ajout de code conditionnel à Java
Pré-traitement du code avant compilation
Photoshop, etc
Test :

Emulateurs et téléphones réels
Le challenge du portage
J2ME est …

Une technologie à part grâce à ses principes :


“Write once, run anywhere”
“Standard de fait”
Mais …

L’interopérabilité reste à ce jour un voeu pieu
Or …

J2ME sans l’interopérabilité perd l’essentiel
de son sens
PARTIE 3
L’API J2ME
J2ME - CLDC
Les principaux concepts de MIDP

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)
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
Les classes supportées



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).
J2ME - CLDC
Les connexions réseau

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
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 - MIDP
L’interface utilisateur

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
J2ME - MIDP
Une interface utilisateur en deux couches

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
J2ME - MIDP
Une interface utilisateur en deux couches

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
J2ME - MIDP
Principes de conception basés sur le Screen

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
J2ME - MIDP
Le timer


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
J2ME - MIDP
La saisie

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.
J2ME - MIDP
Les commandes d’entrée

Exemple :



new Command("Achat", Command.SCREEN, 1);
new Command("Info", Command.SCREEN, 2);
new Command("Retour", Command.BACK, 1);
J2ME - MIDP
RMS

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
J2ME - MIDP
RMS

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
J2ME - MIDP
RMS

Les méthodes RMS :



Stockage : openRecordStore, closeRecordStore,
listRecordStore, deleteRecordStore, getRecordSize,
getNumRecords
Données : addRecord, deleteRecord, getRecord,
setRecord, getRecordSize
Sélection : RecordEnumeration, RecordFilter,
RecordCompare
J2ME - MIDP
La connexion réseau



Les terminaux MIDP doivent implémenter
le protocole http.
MIDP étend le réseau du framework
Generic Connection de CLDC :
Les méthodes HttpConnection
comprennent :

get/setRequestProperty, get/setRequestMethod,
getResponseCode, getResponseMessage, getHeaderField,
getURL, getHost, getPort, getFile, getQuery, getRef
J2ME - MIDP
Analyse d’une midlet

Cycle de vie de la midlet :





Constructeur
startApp() : démarrage et reprise
pauseApp()
destroyApp()
Sortie :
destroyApp (false);
notifyDestroyed ();
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
Créer l’écran graphique

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 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
Autres APIs





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)
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
Le portage se heurte à de gros problèmes

Fragmentation des caractéristiques des mobiles :





Fragmentation des fonctionnalités des terminaux :



Taille de l’écran
Taille maximale des jar
Taille de la heap memory
Taille maximale du RMS, …
Bugs d’implémentation
APIs : MIDP 1 / MIDP 2 / DoJa / VSCL/ etc …
Fragmentation des caractéristiques des
opérateurs mobiles :


Passerelles
Ports ouverts, …
J2ME - MIDP
Guideline de portage

Développer seulement un code source


Adapter automatiquement les ressources aux
limitations du terminal





Un code source automatiquement généré pour chaque
mobile (en utilisant un préprocesseur)
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
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
Nokia 7210
Nokia 6600
Screen size : 128x128
Max jar size : 63 Kb
Heap memory size :
195 Kb
Storage size : 610 Kb
Screen size : 176x208
Max jar size : no limit («
dynamic allocation »)
Heap memory size : 3 Mb
Storage size : 6 Mb
Nokia E70
Screen size : 352x416
Max jar size : no limit (« dynamic
allocation »)
Heap memory size : no limit («
dynamic allocation »)
Storage size : 70 Mb
Ressources

J2ME Wireless Toolkit 2.1
http://java.sun.com/products/j2mewtoolkit/download2_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 WildingMcBride (éditions Addison-Wesley)
 J2ME in a nutshell. Kim Topley (éditions
O’Reilly)
Conclusion
Net Innovations
Bruno Delb
[email protected]
Web : http://www.netinnovations.fr
Mob : 06 09 35 26 14

Documents pareils