Dev J2ME Intro
Transcript of Dev J2ME Intro
-
8/9/2019 Dev J2ME Intro
1/28
Dveloppement mobile MIDP 2.0
Frdric BERTIN
-
8/9/2019 Dev J2ME Intro
2/28
Intro : panorama des
plateformes mobiles
-
8/9/2019 Dev J2ME Intro
3/28
Panorama des plateformes mobilesPlateformeLangages
Positif Ngatif
Windows MobiledotNET C++
Performance (code natif c++) Standard ferm.
Symbian OS S60
C++
Performance (code natif c++) Trs peu portable, mme sur des versions
diffrentes Symbian.(A suivre PIPS=POSIX)
MIDPJava
Standard ouvert(Nokia, Sony-Ericsson, Samsung,Motorola, ).Le plus grand parc de tlphones
Non homogneDe + en + de versions 1.0, 2.0, 2.1, 3.0, Librairies supplmentaires.
DoJaJava
HomogneSpec Hardware
Standard ferm (DoCoMo, iMode alliance)trs peu doprateurs (Bouygues)
Androd(Open Handset Alliance)
C++ - Java
Performance (code natif c++)Open Source (Licence Apache v2)
1 device : HTC G1
iPhoneC Objective C (Java ?)
HomognePerformances
2 devices : iPhone et iPhone 3G
-
8/9/2019 Dev J2ME Intro
4/28
Plateformes : les outils de dveloppement
Plateforme Environnement dedeveloppement
SDK
Windows Mobile Visual Studio Pocket PC SDK (WM5),Smartphone SDK (WM5),Windows Mobile 6 SDK :http://msdn.microsoft.com/windowsmobile
Symbian OS S60 CarbideC++(bas sur Eclipse)
Symbian SDKhttp://forum.nokia.com
MIDP Eclipse + MTJ Sun WTK :http://java.sun.com/products/sjwtoolkit/
DoJa Eclipse iAppli Tools :http://www.doja-developer.net/
Androd(Open Handset Alliance)
Eclipse Androd SDK :http://code.google.com/intl/fr/android/download.html
iPhone Xcode iPhone SDK :http://developer.apple.com/iphone/
http://msdn.microsoft.com/windowsmobilehttp://forum.nokia.com/http://java.sun.com/products/sjwtoolkit/http://www.doja-developer.net/http://code.google.com/intl/fr/android/download.htmlhttp://code.google.com/intl/fr/android/download.htmlhttp://developer.apple.com/iphone/http://developer.apple.com/iphone/http://code.google.com/intl/fr/android/download.htmlhttp://code.google.com/intl/fr/android/download.htmlhttp://www.doja-developer.net/http://java.sun.com/products/sjwtoolkit/http://forum.nokia.com/http://msdn.microsoft.com/windowsmobile -
8/9/2019 Dev J2ME Intro
5/28
Prsentation J2ME / MIDP
-
8/9/2019 Dev J2ME Intro
6/28
Midp 1.0 : Limitations Pas de support de virgule flottante (FPU) : CLDC 1.0
Pas de support audio (beeps, et cest tout)
Graphiques : pas de support de la transparence
Graphiques : faiblesse du design GUI pour les jeux
Rseau : ne supporte que le HTTP
-
8/9/2019 Dev J2ME Intro
7/28
Midp 2.0 : Nouveauts Support multimdia (MMAPI)
Package ddi aux jeux (game API)
Rseau : HTTP, HTTPS, socket, port srie, .
Architecture Push (PUSH registry)
OTA Provisioning
Scurit
-
8/9/2019 Dev J2ME Intro
8/28
J2ME / MIDP : les API
-
8/9/2019 Dev J2ME Intro
9/28
MIDP 2.0 : Les MIDlets Package javax.microedition
La classe de base de toute application MIDP.
Toutes les applications MIDP hritent de la classeabstraite javax.microedition.MIDlet
Trois mthodes sont appeles pour prendre encharge le cycle de vie de la MIDlet
startApp()
pauseApp()
destroyApp()
Similitude avec le cycle de vie dune applet Java
-
8/9/2019 Dev J2ME Intro
10/28
MIDP 2.0 IHM : Les composants graphiques Package javax.microedition.lcdui
API haut niveau
Formulaires
Look and feel minimal, pris en charge par la JVM
Indpendant du tlphone
API bas niveau
Contrle prcis de laffichage et de la position
Trs dpendant du tlphone
-
8/9/2019 Dev J2ME Intro
11/28
MIDP 2.0 Game API API ddie aux jeux
Augmentation des performances
Rduction de code : prise en charge de la logique du jeu Bass sur des lments graphiques bas niveau (Graphics, Image,Canvas).
Package javax.microedition.lcdui.game, 5 classes connaitre par cur: GameCanvas
Gre laffichage du jeu, sa logique
Layer Couche graphique (transparence)
LayerManager Gre une srie de layers
Sprite Gre les animations
TiledLayer
Utile pour les maps
-
8/9/2019 Dev J2ME Intro
12/28
MIDP 2.0 Game API
Sprite
TiledLayer
LayerManager
-
8/9/2019 Dev J2ME Intro
13/28
MIDP 2.0 : Push Registry Lance une midlet sans interaction utilisateur
Activation par rseau
Activation par timer
Une seule classe :
Javax.microedition.io.PushRegistry
Avec lAPI PushRegistry on peut :
Enregistrer une midlet sur des vnements Push
Connection entrante (Socket TCP, UDP)
SMS
Timer
Dcouvrir si une midlet a t active par Push
Retrouver des paramtres dactivation Push
-
8/9/2019 Dev J2ME Intro
14/28
MMAPI (JSR 135) Permet lenregistrement et la lecture de fichiers
multimedias Lecture de fichiers packags avec la midlet (wave, midi,videos, )
Lecture de fichiers internes au mobile
Lecture de fichiers accessible via le rseau (streaming)
Prise de photos,
Package javax.microedition.media, les classesprincipales :
Player
Control
Manager PlayerListener
Package javax.microedition.media.control
VolumControl
ToneControl
VideoControl
Diagramme Etat / transition du player
-
8/9/2019 Dev J2ME Intro
15/28
Bluetooth (JSR 82) API daccs aux priphriques bluetooth
Specs bluetooth 1.1
Dcouvrir des priphriques BT
Senregistrer auprs de peripheriques BT
Etablir une connexion BT, et changer des donnes
Package javax.bluetooth Core bluetooth API
Package javax.obex Object Exchange (pas spcifique bluetooth)
Programmation dune application bluetooth
1. Initialisation stack BT
2. Device management
3. Device discovery
4. Service discovery
5. Communication (OBEX, RFCOMM, L2CAP)
-
8/9/2019 Dev J2ME Intro
16/28
Localisation (JSR 179)
Offre des services bass sur la localisation du tlphone Ou je suis ?
Quy a-t-il autour de moi ?
Ncessite CLDC 1.1 (FPU)
Utilise plusieurs techniques pour localiser le tlphone GPS
Cell ID (rseau mobile)
Bluetooth
Package javax.microedition.location Enregistre la positions
Enregistre la direction(boussoles)
Peut sauvegarder, et enregistrer des POI sur le tlphone
-
8/9/2019 Dev J2ME Intro
17/28
Mobile 3D Game API (JSR 135)
Requiert CLDC 1.1 (pour le FPU)
Fournit une interface de bas et haut niveau 3D
Cration de jeux,
Cration dIHM, Messagerie, avatars,
Package javax.microedition.m3g
-
8/9/2019 Dev J2ME Intro
18/28
J2ME / MIDP :
Le dveloppement
-
8/9/2019 Dev J2ME Intro
19/28
Dploiement dune midlet suite Le .jad (fichier de description) est tlcharg, prcisant
LURL de tlchargement du .jar La taille de lapplication Le nom du jeu La midlet de dmarrage (qui tend MIDLet)
La version Les resssouces, les protocoles utiliss,
Le .jar est tlcharg Un seul .jar Ne peut utiliser que les bibliothque prsentes dans le tlphone
Pas de partage de ressources entre MIDlets tlcharges
3. Si lapplication a besoin daccder des ressources (rseau), promptutilisateur
5. Lapplication se lance
-
8/9/2019 Dev J2ME Intro
20/28
MIDP 2.0 : Scurit Packages ncessitant des autorisations spciales :
javax.microedition.io.Connector.http
javax.microedition.io.Connector.socket
javax.microedition.io.Connector.https
javax.microedition.io.Connector.ssl
javax.microedition.io.Connector.datagram
javax.microedition.io.Connector.serversocket
javax.microedition.io.Connector.datagramreceiver
javax.microedition.io.Connector.comm
javax.microedition.io.PushRegistry
Ncessite de spcifier les permissions de la midlet dans le .jad, exemple :MIDlet-Permissions: javax.microedition.io.Connector.http
MIDlet-Permissions-opt: javax.microedition.io.Connector.socket
Dfinissions de domaines trusted et untrusted Signature du code souvent ncessaire
Bas sur la notion de certificats
-
8/9/2019 Dev J2ME Intro
21/28
Java Mobile, les piges
Write Once, Run Everywhere : A OUBLIER !! :o)
Les JVM sont souvent exotiques
Les JSR sont souvent implmentes partiellement
Secrire un logger sur le tlphone peut aider dbugger.
Le comportement de lapplication sur lemulateur peut tre diffrent sur le device
Tester, tester, re-tester (sur tous les tlphones cibles)
-
8/9/2019 Dev J2ME Intro
22/28
Tips J2ME : Attention la mmoire
Limiter le nombre de classes (pas plus de 10 !), les regrouper.
Sortir les constantes du code dans un fichier de conf (binaire), viter lesstatic final
Bannir les string au maximum, elles apparaissent en clair dans les .class,donc augmentent leur taille.
Obfusquer le code (le compresser) Rcritures des noms de classe, des mthodes, des champs
Ex : MaFonction() devient 1()
Mais garde les noms des packages !
Exemples doutils ProGuard (outil open source)
RetroGuard
-
8/9/2019 Dev J2ME Intro
23/28
Tips J2ME : mnager le processeur
Regrouper les crations dobjets ( new ) linitialisation de lapplication.
Recycler les objets :
On cr au dmarrage de lapplication un pool dObjets, et on les cast Travail mmoire constante
Eviter au maximum le dclenchement du garbage collector.
Le garbage collector est couteux !
Un lancement du
garbage collectorpeut freezer lapplication !!
-
8/9/2019 Dev J2ME Intro
24/28
Dveloppement : Sun WTK Environnement de dveloppement minimal :kToolbar
Compilation, packaging, excution dans un emulateur
Suffisant pour des tests
1 projet kToolbar = 1 midlet suite
Possibilits de profiling (mmoire, appels systme)
Inconvnients Na pas de possibilits de debug fin (breakpoints)
Possibilits ddition minimales (type notepad)
-
8/9/2019 Dev J2ME Intro
25/28
Dveloppement : Eclipse + MTJ
-
8/9/2019 Dev J2ME Intro
26/28
Questions / Rponses
-
8/9/2019 Dev J2ME Intro
27/28
TP MIDP 2 : API graphique Haut niveau
Crer une Midlet
Crer un formulaire
Bouton Exit (Command, CommandListener) Saisie password (TextField)
Affichage String (StringItem)
Au changement du password, lafficheren clair (interception dvnements sur lechamp Password)
-
8/9/2019 Dev J2ME Intro
28/28
TP MIDP 2 : API graphique Bas niveau
Crer une Midlet
Crer un canvas
Dans le paint() du canvas Remplir lcran dune couleur
Tracer un carr au milieu de lcran
Afficher une string au dessus du carr