Développement mobile multiplateforme en C et C++ avec MoSync SDK

Eric Dodji Gbofu

Beaucoup de développeurs C et/ou C++ apprennent et utilisent Java seulement pour concevoir des applications mobiles. On se demande à quand le tour du développement mobile multiplateforme avec C et C++.

Le but de ce tutoriel est de vous présenter globalement MoSync, un Framework mature et toujours en pleine évolution pour développer tous les types d'applications mobiles en C/C++. Dans ce tutoriel d'introduction, nous ne parlerons pas de code. Le code viendra à partir du deuxième tutoriel.

Vous pouvez commenter cet article en cliquant ici Commentez

- Titre : Développement mobile multiplateforme en C et C++ avec MoSync SDK

- Auteur : Eric Dodji Gbofu

- Parution : 8 mai 2012

- Mise à jour : 12 juillet 2020

- Licence : Copyright ® 2012 Eric Dodji Gbofu. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Fonctionnalités de MoSync SDK

- III. Ce qui rend MoSync si spécial et son fonctionnement

- IV. L'interface utilisateur avec MoSync

- V. Licence de MoSync SDK

- VI. Téléchargement et installation

- VII. Captures d'écran de quelques applications écrites avec MoSync

- VIII. Conclusion

- IX. Remerciements

I - Introduction

Vous êtes développeur C et/ou C++ et vous avez envie de créer des applications mobiles. Vous avez besoin, si vous ne les connaissez pas déjà, d'aller apprendre d'autres langages comme le Java (pour Android, BlackBerry, J2ME), l'objective-C (pour l'iOS), ou le C# (pour Windows Phone 7); étant donné qu'avec le C++ seul, vous êtes limité à Bada, à Symbian et à Windows Mobile (ces deux derniers n'ayant plus vraiment le vent en poupe). Vous pouvez aussi vous rabattre sur les technologies Web comme le HTML 5, le JavaScript et le CSS3 associées à des bibliothèques comme Phonegap pour parvenir à vos fins, mais vous serez limités au niveau des accès aux fonctionnalités natives du téléphone.

Depuis 2004, la start-up suédoise Mobile Sorcery devenue MoSync AB a commencé le développement d'un Framework cross plateforme de développement mobile. Aujourd'hui, ce Framework a atteint une grande maturité et permet à tout développeur C et/ou C++, Lua et JavaScript de créer des applications mobiles pour les plateformes Android, Symbian , J2ME, iOS, BlackBerry (le support de cette plateforme étant toujours en bêta à l'instant où j'écris ces lignes) et Windows mobile, Windows Phone 7 avec le même code source. Moi je l'appelle le « Qt » du monde mobile. Allons à la découverte de cet impressionnant Framework.

II - Fonctionnalités de MoSync SDK

MoSync SDK est disponible sur Windows et Mac. Il est composé de :

- un IDE (basé sur Eclipse) ;

- un émulateur (nommé MoRE) ;

- une longue liste d'appareils classés par constructeur et par plateforme ;

- d'autres outils divers que vous découvrirez.

L'IDE vous évite d'installer et de configurer les SDK natifs des plateformes Android, BlackBerry, J2ME et Symbian pour compiler une application destinée à celles-ci, car MoSync embarque déjà les outils essentiels de ces SDK. Ce n'est pas le cas pour des applications destinées aux plateformes Windows Phone et iOS. Par ailleurs l'émulateur intégré par défaut à MoSync n'exécute pas les applications Android, iOS et Windows Phone. Vous aurez donc besoin de leurs SDK natifs pour exécuter ces applications avec leur émulateur respectif sans quitter l'IDE de MoSync.

Voici en vrac une liste globale des fonctionnalités disponibles dans le MoSync SDK :

- interface native avec C ou C++ (pour les applications natives) ;

- interface native avec JavaScript (pour les applications natives et/ou hybrides) ;

- interface personnalisée avec C ou C++ (pour les applications natives) ;

- interface Web (pour les applications hybrides) ;

- Bluetooth ;

- NFC (supportée pour l'instant seulement sur Android) ;

- réseau (TCP, HTTP, SSL, HTTPS) ;

- graphisme 2D ;

- graphisme 3D avec OpenGL ES 1.0 et OpenGL ES 2.0 ;

- stockage permanent ;

- système de fichiers standard ;

- système de fichiers virtuel ;

- gestion de bases de données SQLite ;

- contact API ;

- Sensor API (pour l'utilisation de l'accéléromètre) ;

- son ;

- vidéo ;

- enregistrement vidéo et audio;

- notifications (Push et local);

- streaming vidéo;

- géolocalisation;

- caméra ;

- XML ;

- JSON ;

- Facebook API ;

- Maps ;

- SOAP ;

- tests unitaires ;

- envoi de SMS ;

- vibreur;

- support de la bibliothèque standard du C (Clib) ;

- support d'une partie de la STL du C++;

- communication entre C++ et JavaScript (Wormhole).

III - Ce qui rend MoSync si spécial et son fonctionnement

De nos jours, à part quelques Frameworks qui font du natif, les solutions cross plateformes dans le domaine du développement mobile orientent vers l'utilisation du HTML5/JavaScript/CSS3 qui ne fournissent qu'un accès limité aux fonctionnalités natives de l'appareil. Avec MoSync vous avez plusieurs choix :

- utiliser le C et le C++ uniquement pour créer des applications avec interfaces natives ou personnalisées (au choix) ;

- utiliser HTML5 et un Framework JavaScript quelconque pour créer des applications mobiles hybrides ;

- utiliser HTML5, C++ plus la technologie JavaScript Wormhole de MoSync pour franchir les limites d'accès du HTML5 à certaines fonctionnalités des appareils en communiquant entre le JavaScript et le C++ (avec Wormhole), ce dernier vous permettant d'avoir accès à toutes les fonctionnalités natives du téléphone ;

- utiliser le HTML 5 ou le JavaScript uniquement (comme le cas du framework titanium pour ceux qui connaissent) pour créer des interfaces natives avec un accès complet aux fonctionnalités natives du téléphone.

Comme je l'ai écrit un peu plus haut, MoSync n'est pas une solution de développement mobile cross plateforme comme les autres. Elle est particulière sur plusieurs points. Beaucoup me diront que la plupart des solutions cross plateformes créent des applications qui sont interprétées par des machines virtuelles, ce qui réduit d'ailleurs les performances. Ceci n'est pas faux, mais laissez-moi vous dire que MoSync ne supporte pas que cette seule technologie pour rendre ses applications multiplateformes. En fonction de chaque type de plateforme, MoSync a une approche différente (et la meilleure possible) pour s'exécuter au mieux sur cette plateforme. Partant de ça, je vais vous présenter comment une application est générée par MoSync pour chaque plateforme.

Étape 1 :
chaque code C/C++ écrit dans l'IDE de MoSync est d'abord compilé en un code nommé MoSync IL (MoSync Intermediate Language) à l'aide d'une version modifiée du compilateur GCC.

Étape 2 :
ce MoSync IL (le code généré à la compilation de l'étape 1) passe ensuite par un outil appelé « pipe-tool » écrit en assembleur qui est un linker et un optimiseur permettant différentes choses pour différentes plateformes comme décrit ci-dessous.

1) Pour les plateformes JavaME et BlackBerry, le pipe-tool produit (à partir du MoSync IL) un bytecode qui est un binaire compact. Ce bytecode est ensuite packagé avec le runtime de MoSync qui contient une machine virtuelle. Ainsi, quand l'application se lance, ce runtime lit le bytecode en mémoire et l'interprète. Cette méthode est la plus utilisée par les solutions de développement mobiles cross plateformes.

2) Pour les plateformes Android, Symbian et Windows Mobile… par exemple, le processus est similaire, mais au lieu d'interpréter du code, le runtime de MoSync va dans le code IL produit à l'étape 1 et le recompile en langage machine directement compréhensible par le processeur ARM du téléphone. Une fois recompilé, le runtime exécute le code ARM généré, ce qui apporte une vitesse d'exécution native à votre application. Cette méthode est le Saint Graal des solutions multiplateformes existantes et aussi la plus difficile à mettre en place. (Pas pour vous qui allez l'utiliser, mais pour ceux qui l'ont conçu ;-) .)

3) Pour les plateformes iOS, au lieu de transformer le code IL en un bytecode, il est transformé en code Objective C et un projet Xcode est créé (si vous êtes sous Windows) pour être compilé après sous un Mac avec le SDK de iOS. Si vous êtes sur un Mac, le binaire pour la plateforme iOS est automatiquement généré. Ce processus est le même pour Windows Phone 7. Sous Windows, il vous crée directement le binaire pour votre mobile (si vous avez le WP7 SDK installé) et sous Mac il vous crée un projet Visual Studio à compiler sous Windows. Dans le cas de l'iOS par exemple, il y a plusieurs raisons qui poussent à utiliser cette méthode de génération de projet Xcode. L'une de ces raisons est que générer dynamiquement du code machine ARM n'est pas possible sous l'iOS tout comme charger dynamiquement du code.

Voici un schéma qui résume le processus de compilation de MoSync

Une autre fonctionnalité très intéressante de MoSync est que vous pouvez porter (moyennant quelques modifications) votre code C ou C++ existant sur mobile. Pas mal de vieux jeux PC ont ainsi été portés plutôt simplement sur mobile. Par exemple des vieux jeux à succès écrits en C et/ou C++ tels que Doom, Another World et Castle Wolfenstein 3D ont été portés et s'exécutent correctement sur des téléphones Symbian, iPad, Windows Mobile.

IV - L'interface utilisateur avec MoSync

Pour l'interface graphique des applications, MoSync apporte deux solutions en natif.

- MAUI qui est disponible sur toutes les plateformes supportées par MoSync. Elle permet de créer des interfaces personnalisées avec des skins et des couleurs (personnellement je trouve cette bibliothèque un peu pauvre en composants graphiques). Si vous voulez des composants graphiques que vous ne trouvez pas ici alors, faites un tour sur http://www.appmancer.com qui propose dans son API, une bibliothèque nommée AMUI (basée sur MAUI) avec plus de composants graphiques et d'autres fonctionnalités soit manquantes soit déjà présentes dans MoSync, mais améliorées.

- NativeUI qui pour l'instant n'est disponible que pour les plateformes Android, Windows Phone et iOS propose de créer des interfaces natives. Il est prévu que NativeUI soit bientôt disponible pour BlackBerry également.

En plus de ces deux solutions intégrées par défaut vous pouvez créer des interfaces Web avec le trio HTML5/JavaScript et CSS3 pour le cas des applications hybrides pour Android, iOS et Windows Phone 7.

V - Licence de MoSync SDK

MoSync SDK est distribué sous deux licences. Il y a une Licence commerciale et une licence GPL. La licence GPL vous permet de créer une application open source ou commerciale à condition que vous libériez les sources de votre application. La licence commerciale vous permet de créer des applications propriétaires et d'avoir accès au support.

Il y a cependant une licence intermédiaire (licence Indie) qui est gratuite et qui permet à un développeur de réaliser des applications commerciales sans distribuer ses sources sans pour autant avoir accès au support comme c'est le cas avec la licence commerciale (disponible sur simple inscription gratuite sur le site de MoSync).

VI - Téléchargement et installation

Pour télécharger MoSync SDK (actuellement disponible en version 3.0 et qui apporte beaucoup de nouveautés dont le support de Windows Phone 7), rendez-vous sur http://www.mosync.com/download. L'installation passe comme toute autre installation par un assistant. Il n'y a rien à paramétrer. Voir la liste des nouveautés apportées par la version 3.0 ici

VII - Captures d'écran de quelques applications écrites avec MoSync

Ces applications sont tirées des nombreuses démos fournies avec l'IDE de MoSync.

VIII - Conclusion

L'une des forces de MoSync est sa flexibilité et sa licence open source, ainsi vous êtes libre de télécharger le code source de MoSync SDK et de le modifier.

Sa flexibilité permet par exemple d'ajouter au-dessus de la plateforme n'importe quel langage. Ainsi la réponse à la question de savoir si une application écrite en C++ pourra s'exécuter sur Windows Phone 7 ou J2ME ou si une application écrite en Java pourra s'exécuter sur iOS, la réponse est et sera toujours « oui » avec MoSync. Si l'on ajoute Java ou Python par exemple comme langages d'entrée à MoSync alors cela marchera automatiquement sur toutes les plateformes supportées.
Pour confirmer ce que je viens de dire, il existe déjà deux ports vers d'autres langages. L'un pour le langage LUA ( http://www.github.com/divineprog/mobilelua ) qui a été porté sur MoSync (par l'un des développeurs, employé de MoSync AB) et le langage JavaScript dont le port est intégré par défaut au MoSync SDK.

Un coup d'œil à la page consacrée aux développeurs http://www.mosync.com/developer et à la documentation en ligne http://www.mosync.com/documentation . Dans le prochain tutoriel, je commencerai une initiation et on parlera de code. Bonne découverte et bonne suite à tous.

IX - Remerciements

Tous mes remerciements à dourouc05, LittleWhite, 3DArchi, gbdivers pour leur relecture technique et à Erielle pour sa relecture orthographique.