La grosse déception du jour: OpenPlug
Si vous cherchez à créer une application pour plate-formes mobiles, vous êtes sûrement tombé à un moment sur OpenPlug. Dans sa présentation, OpenPlug fait une annonce plutôt accrocheuse: Développez vos applications mobiles comme vous développez vos applications Web. Vu que l'arrivée du Framework Flex Slider (pour mobiles) et de Flash Player 10.1 sur toutes les plate-formes se fait encore attendre, je me suis dit que OpenPlug serait ma solution pour mes dev mobiles.
OpenPlug est pour l'instant en version 3, beta3 (gratuite), ce n'est pas une version finale.
Sur le papier, on écrit du Flex comme dans la vie de tous les jours et on peut compiler en natif, des applications pour iPhone, Android et Windows Mobile (entre autres). Après plusieurs semaines, j'ai enfin pris le temps de tester la bête. Disposant d'un portable sous Android (HTC Magic), je pouvais donc tester sur l'émulateur et en vrai, parfait.
OpenPlug est une "Suite" logicielle comprenant un plug-in pour Flex Builder, divers compilateurs, simulateurs et autres utilitaires. L'installation se passe sans trop de problèmes et on nous demande d'utiliser le Framework "Elips", un framework crée par OpenPlug basé sur une Flex 3.2 d'après ce que j'ai vu sur leurs forums. Parfait, je compilais jusque-là avec Flex 3.2, tout devrais marcher impec.
Ma première application avec OpenPlug
Je crée une application (type Air) en compilant avec leur framework, balance un <mx:Label> comme dans leur application de démonstration. Launch, ouverture du simulateur (qui m'a rappelé le temps où j'avais tenté de faire un peu de J2ME). Une fenêtre s'ouvre avec l'image du portable simulé puis une autre contenant l'application Air et magie, elles font une sorte de fusion qui fait que notre application apparaît dans la fenêtre du téléphone.
Mon Label est bien là, parfait, je vais créer une ComboBox pour voir si elle est interprétée comme les ComboBox HTML (celles du navigateur HTML sous Android s'ouvrent avec une liste plein écran, lisible et scrollable). Alors, j'ouvre un tag, tape "mx:Com" puis Ctrl+Espace pour activer l'auto-complétion et là … rien (enfin si, mx:Component
). Retour en arrière, je reviens sur "mx:", Ctrl + Espace. Surprise, voici ce qui apparait:
Bon, admettons, pas de ComboBox (et pas de DataGrid, certains l'auront remarqué au passage). Mais on a le composant de type mx:List, faisons le test avec un dataProvider contenant quelques objets String. Launch et voilà le résultat dans le simulateur:

Et oui, ce bout de truc au milieu, c'est ma List (les deux "boutons" ont l'air d'être mes boutons de scroll, pour le Batman en bas, je ne sais pas). Pour ne pas m'arrêter bêtement là, je RTFM (Read The Fucking Manual) que l'on peut trouver sur la partie développeur du site d'OpenPlug. Dans la catégorie API Reference, on a l'équivalent de la Livedocs pour le framework OpenPlug. Bon déjà, c'est dans une sorte de frame, pas très pratique pour la navigation.
Je trouve un package intéressant, le package "openplug.elips.controls" contenant de composants Alert, GroupList, List, HTML, NavigationButtonBar. Je teste avec GroupList et List, même résultat, j'abandonne (j'ai testé avec le fonctionnement classique des composants Flex instanciés en MXML, peut-être faut-il faire autrement). Le <mx:Button> marche correctement, lui, c'est bon signe.
Un déploiement laborieux
Tampis, je tente mon application avec mon Button et mon Label pour voir comment ça rend sur mon Android. Pour le déploiement, ce n'est pas si simple, les explications sont souvent "allez voir ce qui se dit sur le site du SDK d'Android". Après quelques heures pour se battre avec les drivers / erreurs, j'arrive enfin à envoyer mon application (fichier .apk) sur mon mobile.
Je vais écrire un tutorial détaillé sur toutes les manipulations à faire (sous Windows XP et 7) pour ceux qui veulent tester leur application OpenPlug sous Android.
L'application apparaît bien dans mon menu d'application Android. Le lancement est plutôt long (pour une application avec un bouton et un label), environ 15-20 secondes. Au moment où je n'y crois plus, l'application apparait. J'ai bien mon label et mon bouton qui réagit au "click" (au "touch" dans mon cas). Petite victoire en quelques heures, voici un début de résultat.
Utilisation de librairies / code existant
Puisque ce n'est pas pour faire des micro-démos que je teste OpenPlug, je décide d'utiliser ma librairie cartographique que j'ai codé chez Business Geografic (une sorte d'API Google Maps pour le serveur d'application utilisé chez BG) et de la lier à mon projet. La liaison en elle-même se passe plutôt bien, on dirait que cela fonctionne. Je lance le débugger, BIM, erreur d'exécution. Apparemment, la propriété "rawChildren" sur la classe Container que j'utilisais n'est pas présente dans le Framework Flex version Elips. Tampis, je fais un simple addChild() pour voir ce qui se passe.
Ouverture du simulateur et là, grande joie, ma carte WMS apparaît avec les différentes tuiles qui la composent. Bien sûr, la navigation ne fonctionne pas puisque tout est basé sur les interactions souris et pas des interactions "touch". Tampis, je veux voir le résultat sur mon portable ! Maintenant que j'ai tout bien configuré les drivers et autres, je me dit que je ne vais pas y passer la nuit, ça va marcher direct. Je lance la compilation du packaging APK, au bout de 1.5 secondes, ça plante, la compilation n'arrive pas à trouver certaines classes de ma librairie (celles qui l'instancie en MXML avec utilisation du namespace de la librairie).





