Dev J2ME Intro

  • Upload
    ha13

  • View
    226

  • Download
    0

Embed Size (px)

Citation preview

  • 8/9/2019 Dev J2ME Intro

    1/28

    Dveloppement mobile MIDP 2.0

    Frdric BERTIN

    [email protected]

  • 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