Développement avec   Java Micro EditionToulouse JUG, 12 mai 2009        Sylvain Wallez      sylvain@bluxte.net
Sylvain Wallez p   CTO de Goojet     Découvrir et partager le web mobile     → http://goojet.com/ p   Anciennement archite...
Agendap   Panorama du monde mobile    p   Parts de marché    p   Typologie des téléphonesp   JavaME    p   Aperçu des APIs...
Panorama : parts de marchép   En unités vendues (millions)      Nokia ≈ 40% du marché     Marque             Q4 2008   Q3 ...
Panorama : tailles décran              Résolution : de 38k à 380k pixels176 x 220   240 x 320   320 x 480    480 x 640    ...
Panorama : modes dinteraction                        Touches (ou pas) et joystick             D-Pad ou joystick,          ...
Panorama : systèmes dexploitationp   Symbian                   p   iPhone OS    p Smartphones Nokia,          p iPhone, iP...
JavaME - Introductionp   JavaME = Java pour les petits appareils    p   Téléphones mobiles    p   Matériel embarqués    p ...
JavaME - Introductionp   Architecture : la "stack" JavaME
JavaME - Introductionp   Sur les téléphones    p   CLDC : connected limited device configuration        p   Classes de bas...
JavaME - Introductionp   Les APIs optionnelles    p   Trop spécifiques pour être comprises dans une        configuration o...
Applet, Servlet... MIDlet !p   MIDlet    p   La classe "main" dune application MIDP    p   Dérive de javax.microedition.mi...
Aperçu de MIDPp   Interface graphique : deux APIp   API de haut niveau    p   Form, TextField, DateField, Choice...    p  ...
Aperçu de MIDPp   API graphique de haut niveau    p   La Form est un conteneur    p   On y ajoute des "Item"    public cla...
Aperçu de MIDPp       API graphique de bas niveau        p       Ligne, rectangle, arc de cercle        p       Texte : 2 ...
Aperçu de MIDPp   API graphique pour les jeux    p   Layers et tiles : dessin et animation du décor    p   Sprite : multip...
Aperçu de MIDPp   Librairies graphiques tierces    p   Compensent la pauvreté des        APIs de basep   Offre open source...
Processus de développementp   Deux fichiers : jad (descripteur) et jar                     Fichiers source    MyMidlet.jav...
Processus de développementp   Prévérification    p   Une JVM vérifie toujours les classes à éxécuter        p   Nécessite ...
Processus de développementp   Outillage    p   Sun Wireless Toolkit (WTK)        p   Emulateur avec toutes les APIs option...
Problématiquesdu "vrai" monde
La fragmentationp   Fragmentation = différences entre téléphones    p   Taille décran, de police de caractères    p   Sais...
La fragmentationp   Versions spécifiques    p   Branches séparées → maintenance complexe et coûteuse    p   Solution : pre...
La fragmentationp   Provisioning platform    p   Fournir la bonne version à chaque mobile    p   Identification du modèle ...
La fragmentationp   Configuration dynamique    p   Choix dune classe selon les propriétés systèmes ou        lexistence de...
Optimisationp   Trois axes doptimisation    p   Taille de lapplication        p   Réduire le temps de téléchargement      ...
Test, test, test !
Test, test, test !  Plus de 1000 téléphones chez pacamobilecenter.com
Conclusion
Conclusionp   Mobile : un domaine complexe    p   Beaucoup de modèles aux capacités très variablesp   Etat actuel    p   J...
Conclusionp   Quand faire un développement JavaME ?    p   Quand ça doit fonctionner partout    p   Quand cest une applica...
Questions ?Réponses !
Prochain SlideShare
Chargement dans…5
×

Développement avec Java Micro Edition

1 670 vues

Publié le

La toute première présentation du Toulouse-JUG le 13 mai 2009 !

Le développement sur mobile en J2ME : contraintes, techniques, difficultés, outils et... une pléthore de téléphones pour les tests !

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 670
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
44
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Développement avec Java Micro Edition

  1. 1. Développement avec Java Micro EditionToulouse JUG, 12 mai 2009 Sylvain Wallez sylvain@bluxte.net
  2. 2. Sylvain Wallez p CTO de Goojet Découvrir et partager le web mobile → http://goojet.com/ p Anciennement architecte de Joost, cofondateur et CTO dAnyware Technologies p Expert open source et technologies web, Membre de la Fondation Apache p Blog, Twitter, Facebook, LinkedIn, etc → http://bluxte.net/
  3. 3. Agendap Panorama du monde mobile p Parts de marché p Typologie des téléphonesp JavaME p Aperçu des APIs p Processus de développement p Problèmes du "vrai" mondep Conclusion
  4. 4. Panorama : parts de marchép En unités vendues (millions) Nokia ≈ 40% du marché Marque Q4 2008 Q3 2008 Q4 07 Evolution Nokia 113.1 117.8 133.5 -15% Samsung 52.8 51.8 46.3 +14% LG 25.7 23.0 23.7 +8 SonyEricsson 24.2 25.7 30.8 -21 Motorola 19.0 25.4 40.9 -54 BlackBerry 6.7 Apple 4.4 Source : Reuters
  5. 5. Panorama : tailles décran Résolution : de 38k à 380k pixels176 x 220 240 x 320 320 x 480 480 x 640 480 x800 (QVGA) (HVGA) (VGA) (WVGA)
  6. 6. Panorama : modes dinteraction Touches (ou pas) et joystick D-Pad ou joystick, Ecran tactile avec stylet deux touches "soft menu", soft keyboard, D-Pad. boutons "home" et "back"Trackball cliquable, Trackball cliquable, Ecran tactile, un bouton "menu", un bouton "menu", soft keyboard, un bouton "back" un bouton "back" bouton "home"
  7. 7. Panorama : systèmes dexploitationp Symbian p iPhone OS p Smartphones Nokia, p iPhone, iPod SonyEricsson, Samsung p Androidp "Series 40" p HTC pNokia p A venir : Samsung,p Windows mobile SonyEricsson, Motorola p HTC, smartphones p Systèmes "inconnus" Samsung & Motorola p Samsung, LG, Motorola,p RIM Alcatel, etc. p BlackBerry
  8. 8. JavaME - Introductionp JavaME = Java pour les petits appareils p Téléphones mobiles p Matériel embarqués p Décodeurs, Passerelles résidentiellesp JavaME est modulaire p Configuration (puissance du terminal) p Profil (type de terminal) p APIs optionnelles (carnet dadresse, localisation, 3D, etc.)
  9. 9. JavaME - Introductionp Architecture : la "stack" JavaME
  10. 10. JavaME - Introductionp Sur les téléphones p CLDC : connected limited device configuration p Classes de base, connectivité réseau p MIDP : Mobile Information Device Profile p API graphique de base : formulaires et canvasp Specs minimales : p 128 ko de RAM, écran 96x54 noir et blanc
  11. 11. JavaME - Introductionp Les APIs optionnelles p Trop spécifiques pour être comprises dans une configuration ou un profilp Exemples : p Carnet dadresses – PDA API (JSR 75) p Envoi et réception de SMS – WMA API (JSR 120) p Photo et video – MMA API (JSR 135) p Mobile 3D graphics – M3G (JSR 184) p Geo-localisation – JSR 179
  12. 12. Applet, Servlet... MIDlet !p MIDlet p La classe "main" dune application MIDP p Dérive de javax.microedition.midlet.MIDlet → Cycle de vie défini par des méthodes abstraites
  13. 13. Aperçu de MIDPp Interface graphique : deux APIp API de haut niveau p Form, TextField, DateField, Choice... p Fonctionne partout, mais graphiquement très limitép API de bas niveau p Canvas : une surface pour dessiner p Gestion manuelle des événements clavier p Dépend du téléphone (taille décran, couleurs, transparence, etc.)
  14. 14. Aperçu de MIDPp API graphique de haut niveau p La Form est un conteneur p On y ajoute des "Item" public class MyForm extends Form { public class MyForm extends Form { private TextField name; private TextField name; private TextField password; private TextField password; public MyForm(String title) { public MyForm(String title) { super(title); super(title); name = new TextField("Name:", "", 20, TextField.ANY); name = new TextField("Name:", "", 20, TextField.ANY); password = new TextField("Password:", "", 20, TextField.PASSWORD); password = new TextField("Password:", "", 20, TextField.PASSWORD); append(name); append(name); append(password); append(password); } } } }
  15. 15. Aperçu de MIDPp API graphique de bas niveau p Ligne, rectangle, arc de cercle p Texte : 2 polices, 3 tailles p Et cest tout !class MyCanvas extends Canvas { class MyCanvas extends Canvas { public MyCanvas() { public MyCanvas() { super.setFullScreenMode(true); super.setFullScreenMode(true); } } public void paint(Graphics g) { public void paint(Graphics g) { g.setColor(255, 0, 0); g.setColor(255, 0, 0); g.fillRect(0, 0, getWidth(), getHeight()); g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(0, 0, 0); g.setColor(0, 0, 0); g.drawString("Hello There", getWidth() / 2, 0, Graphics.TOP | Graphics.HCENTER); g.drawString("Hello There", getWidth() / 2, 0, Graphics.TOP | Graphics.HCENTER); } }} }
  16. 16. Aperçu de MIDPp API graphique pour les jeux p Layers et tiles : dessin et animation du décor p Sprite : multiples objets, détection de collision Sprite TiledLayer Sprite
  17. 17. Aperçu de MIDPp Librairies graphiques tierces p Compensent la pauvreté des APIs de basep Offre open source assez réduite p LWUIT (GPL + classpath exception) →https://lwuit.dev.java.net/ p J2MEPolish (GPL/commercial) →http://j2mepolish.org/ p Kuix (GPL/commercial) →http://kalmeo.org/
  18. 18. Processus de développementp Deux fichiers : jad (descripteur) et jar Fichiers source MyMidlet.java image.png MyMidlet.jad ① javac MyMidlet.jar ② MyMidlet.class jar obfuscator preverify MyMidlet.class MyMidlet.jar
  19. 19. Processus de développementp Prévérification p Une JVM vérifie toujours les classes à éxécuter p Nécessite plusieurs passes et 100 à 150 ko de RAM p On ajoute dans le .class le résultat des premières passes p Nécessite une passe et 10 ko de RAMp Obfuscateur p Compactage des symboles p Suppression des éléments inutiles → En général, réduction de plus de 50% !
  20. 20. Processus de développementp Outillage p Sun Wireless Toolkit (WTK) p Emulateur avec toutes les APIs optionnelles p EclipseME p Editeur syntaxique pour le .jad, précompilateur p MicroEmulator p Emulateur léger, fonctionne en Applet p Antenna p Tâches Ant p Proguard p "The" obfuscator
  21. 21. Problématiquesdu "vrai" monde
  22. 22. La fragmentationp Fragmentation = différences entre téléphones p Taille décran, de police de caractères p Saisie au clavier, écran tactile p APIs optionnelles non indispensables p Bugs des téléphones...p Différentes techniques : p Versions spécifiques de lapplication p Configuration dynamique à lexécution
  23. 23. La fragmentationp Versions spécifiques p Branches séparées → maintenance complexe et coûteuse p Solution : preprocessing à la C → Plusieurs versions à partir dun même source public void callURL(String url) throws Exception { public void callURL(String url) throws Exception { //#if blackberry //#if blackberry if (url.startsWith("http")) { if (url.startsWith("http")) { Browser.getDefaultSession().displayPage(url); Browser.getDefaultSession().displayPage(url); } else if (url.startsWith("tel:")) { } else if (url.startsWith("tel:")) { String msisdn = url.substring( "tel:".length() ); String msisdn = url.substring( "tel:".length() ); PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL, msisdn); PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL, msisdn); Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, call); Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, call); } else { } else { throw new ConnectionNotFoundException(); throw new ConnectionNotFoundException(); } } //#else //#else if (platformRequest(url)) { if (platformRequest(url)) { GoojetBrowser.INSTANCE.destroyApp(true); GoojetBrowser.INSTANCE.destroyApp(true); } } //#endif //#endif } }
  24. 24. La fragmentationp Provisioning platform p Fournir la bonne version à chaque mobile p Identification du modèle par le User-Agentp WURFL : wireless universal resource file p Effort communautaire des développeurs sur mobile → http://wurfl.sourceforge.net/ p 10000 modèles, 500 caractéristiques
  25. 25. La fragmentationp Configuration dynamique p Choix dune classe selon les propriétés systèmes ou lexistence de classes dune API try { try { Class.forName("javax.wireless.messaging.MessageConnection"); Class.forName("javax.wireless.messaging.MessageConnection"); browser.messaging = (Messaging)Class.forName("com.goojet.WMAMessaging").newInstance(); browser.messaging = (Messaging)Class.forName("com.goojet.WMAMessaging").newInstance(); } catch(Throwable e) { } catch(Throwable e) { browser.messaging = new HttpMessaging(); browser.messaging = new HttpMessaging(); System.out.println("No WMA"); System.out.println("No WMA"); } } p Avantage : limite le nombre de versions p Inconvénient : embarque du code inutilisé
  26. 26. Optimisationp Trois axes doptimisation p Taille de lapplication p Réduire le temps de téléchargement p Limiter loccupation sur le téléphone p Performance p Petit processeur, JVM limitée p Mémoire p Peu de mémoire, garbage collector lent et bloquant
  27. 27. Test, test, test !
  28. 28. Test, test, test ! Plus de 1000 téléphones chez pacamobilecenter.com
  29. 29. Conclusion
  30. 30. Conclusionp Mobile : un domaine complexe p Beaucoup de modèles aux capacités très variablesp Etat actuel p JavaME : vieillissant, mais encore là pour plusieurs années p Problèmes de fragmentation p iPhone et Android : plateformes émergentes p Fragmentation "ultime" : aucune compatibilité entre systèmes
  31. 31. Conclusionp Quand faire un développement JavaME ? p Quand ça doit fonctionner partout p Quand cest une application "riche"p Autre solution : lapplication web p Généralisation de laccès 3G p Mais énorme fragmentation des browsers p Pas daccès aux ressources natives (photos, address book)
  32. 32. Questions ?Réponses !

×