Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes...

75
Avril 2006 Net Innovations Cours sur J2ME

Transcript of Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes...

Page 1: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Avril 2006

Net Innovations

Cours sur J2ME

Page 2: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Présentation des contraintes de développement

Présentation générale du marché

SOMMAIRE

L’API J2ME

Page 3: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 4: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

PARTIE 1

Présentation générale du marché

Page 5: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 6: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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é

Page 7: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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é

Page 8: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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é

Page 9: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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é

Page 10: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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é

Page 11: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 12: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

PARTIE 2

Présentation des contraintes de développement

Page 13: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 14: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 15: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 16: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 17: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 18: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 19: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Couches : Profiles Configurations Machines virtuelles Système d’exploitation de hôte

Concepts de base

Page 20: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 21: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 22: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 23: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 24: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 25: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 26: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 27: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 28: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 29: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 30: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 31: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 32: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 33: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 34: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 35: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 36: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 37: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 38: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 39: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 40: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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 …

Page 41: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

PARTIE 3

L’API J2ME

Page 42: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 43: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Communication GCF

Generic Communications Framework

Multimedia Sons (musiques + sons naturels) Vibreur Lumière Contrôle de la caméra Vidéo

J2ME - CLDC

Page 44: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 45: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 46: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 47: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 48: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 49: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 50: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 51: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 52: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 53: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 54: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 55: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 56: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 57: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 58: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 59: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Cycle de vie de la midlet : Constructeur startApp() : démarrage et reprise pauseApp() destroyApp()

Sortie :destroyApp (false);

notifyDestroyed ();

Analyse d’une midlet

J2ME - MIDP

Page 60: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 61: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Basculer sur l’écran graphique :public Display display;

Canvas canvas = new MyCanvas();

display = Display.getDisplay(this);

display.setCurrent(canvas);

J2ME - MIDP

Page 62: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 63: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Créer un thread :

implements Runnable

Thread thread;

thread = new Thread (this);

thread.start();

public void run() {

while (true) {

}

}

J2ME - MIDP

Page 64: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 65: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 66: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Mécanisme de rafraichissement de l’écran :

public void run() {

while (true) {

if (!pause) {

repaint();

try {

Thread.sleep (100);

} catch (Exception e) {

}

}

}

}

J2ME - MIDP

Page 67: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 68: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 69: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 70: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 71: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 72: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 73: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 74: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

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

Page 75: Cours sur J2ME - IRIFcd/M2/Cours_J2ME.pdf · 1990 Java est né : technologie pour systèmes embarqués 1995 JDK 1.0 (Java pour le Web) : applets, servlets 1999 Subdivision en J2EE,

Net Innovations

Bruno [email protected]

Web : http://www.netinnovations.frMob : 06 09 35 26 14

Conclusion