Notre société est sur le point de choisir entre le développement natif Android/iPhone et une solution multiplate-forme, en particulier Marmalade SDK (ancien Airplay SDK).
Nous sommes une entreprise de vision par ordinateur, ce qui signifie que nous avons besoin d’un accès de bas niveau aux appareils photographiques. En outre, nos applications sont coûteuses en termes de calcul, ce qui signifie que nous avons tendance à réduire au maximum chaque petite puissance de traitement disponible.
Notre équipe possède une expérience suffisante en Objective-C et en Java (ou C) pour fournir des solutions spécifiques à la plate-forme. Cependant, notre objectif principal a toujours été le C++, en tant que tel, nous souhaitons éviter de fragmenter l'équipe et travailler plutôt avec une solution multiplate-forme.
Notre plus grande crainte est que le choix de Marmalade sacrifie la vitesse de traitement (préoccupation principale) ou augmente considérablement le temps de développement en compliquant l'accès de bas niveau à la mémoire tampon du cadre de la caméra.
Ma question est donc, outre l'évidence, quels sont les avantages, mais plus particulièrement les limitations du SDK de Marmalade pour les applications de traitement vidéo utilisant beaucoup de processeurs.
J'utilise Marmalade/Airplay depuis presque deux ans dans ma société de jeux vidéo indépendante. Pour moi, c’est une victoire, car je ne suis qu’un programmeur, et je peux effectuer pratiquement tout mon travail sous Windows avec MS Dev Studio (qui est de loin mon environnement de développement préféré) et parce que cela me protège de la gestion de nombreuses tâches. les détails spécifiques à la plate-forme, en particulier avec les divers outils de développement, qui pourraient prendre beaucoup de temps, je préférerais passer du temps au contenu du jeu.
La vitesse ne sera pas un problème avec Marmalade. Votre code C++ s'exécute de manière native. De plus, l'accès à la caméra et à d'autres fonctionnalités ne devrait pas être un problème; il est déjà fourni ou peut être ajouté à l'aide du SDK d'extensions, qui est assez simple à utiliser.
Marmalade est un produit mature et la société est très utile pour résoudre rapidement les problèmes, même pour les développeurs indépendants utilisant le produit gratuitement. En plus de la multiplicité des plates-formes, il intègre certains outils Nice, tels que le suivi des fuites de mémoire, un système de journalisation, des outils d'analyse graphique, etc.
J'ai eu quelques inconvénients avec Marmalade.
Même si, en théorie, une API ou un SDK tiers est accessible via le système d'extensions, il se peut que ce dont vous avez besoin n'existe pas encore. À titre d'exemple, un certain nombre de développeurs ont du mal à intégrer le progiciel d'analyse Flurry, ce qui représente un défi pour certains. La situation est similaire avec beaucoup d'autres SDK tiers; Il peut s’agir de quelques lignes à intégrer si vous effectuez un développement Objective-C, mais cela peut être plus difficile via Marmalade.
Certaines choses sont moins naturelles à cause de la couche multiplate-forme à travers laquelle vous opérez. Quelques exemples pour moi ont été:
J'ai eu du mal à faire en sorte que mes écrans de démarrage (écrans de démarrage d'application) s'affichent correctement dans toutes les tailles d'écran, sur iOS et Android. Et il a été difficile de les faire apparaître sans scintillement, périodes de black-out ou redimensionnement des images lors de la transition entre le chargement de l'appareil de l'application Marmalade elle-même, puis l'étape de chargement du code de votre application par Marmalade.
Marmalade impose un modèle de mémoire très simple, dans lequel vous obtenez un tas fixe à l’avance, et toute l’allocation de mémoire se fait via Marmalade. Du point de vue du système, l'application possède et conserve un gros bloc de mémoire (ou quelques gros blocs). Cela présente certains avantages, mais j’ai eu du mal à concilier ce modèle avec le modèle iOS, par exemple, pour recevoir des avertissements sur la mémoire et s’attendre à larguer les ressources inutiles. Il semble y avoir un cas où "une taille unique" finit par perdre certaines fonctionnalités clés.Vous pouvez utiliser le gestionnaire d'extensions et certaines autres méthodes pour afficher des éléments d'interface utilisateur natifs, mais l'intégration d'une quantité importante d'interface utilisateur de présentation et de convivialité natives peut s'avérer un défi. Donc, si votre application ressemble à un jeu et que les utilisateurs peuvent utiliser des boutons non standard, etc., c'est bien, mais si vous pensez avoir besoin d'une interface utilisateur native significative, c'est plus difficile. [edit: Les versions récentes de Marmalade ont ajouté un framework d'interface utilisateur natif qui vous permet de spécifier les éléments d'interface utilisateur standard de manière générique, puis implémente puis utilise les widgets appropriés pour le périphérique. Je n'ai pas utilisé cela, mais cela semble assez complet.].
Si vous rencontrez des problèmes, il est souvent difficile de savoir s'il s'agit d'un problème de système d'exploitation générique ou d'un problème de Marmalade. Il peut être solitaire d'essayer de trouver de l'aide. Par exemple, j'ai récemment ajouté l'achat in-app à mon jeu, sur iOS et Android. IAP est un défi, et même sans couche SDK supplémentaire, de nombreux cas particuliers doivent être traités. Dans mon cas, mon application a été rejetée par Apple pour un petit problème et, alors qu'elle était dans l'état rejeté, mon achat via l'application était également dans un état "rejeté" (même s'il n'y avait rien de cassé l'IAP lui-même; il ne s'agit que d'une bizarrerie du processus d'Apple). Lorsque j'essayais de tester la régression de la fonctionnalité d'achat intégré à l'application (pendant que je soumettais le correctif relatif à ce problème lié à l'achat non intégré à l'application), le jeu plantait en réalité au lieu d'obtenir un résultat d'erreur approprié. J'ai été en mesure de déterminer que l'incident ne figurait pas dans le code de mon jeu. Il s'agissait donc du système d'exploitation (peu probable) ou de la couche intermédiaire de Marmalade pour la gestion des rappels d'achats intégrés (ce qui s'est avéré être le cas [mise à jour 11/28/2012: Marmalade aurait corrigé ce problème dans une récente mise à jour du SDK]).
(Un autre exemple du problème 3 est que, jusqu'à récemment, il existait un problème de retard des effets sonores sur certains appareils Android. Il s'agissait d'un problème de Marmalade et ils l'ont finalement résolu, mais cela a pris un certain temps et vous ne pouvez fondamentalement rien faire. pendant ce temps.)
Gardez à l'esprit que (comme d'autres intervenants l'ont souligné), même sans Marmalade, vous pouvez toujours disposer de la majeure partie de votre base de code en C++ sur iOS ou Android.
En dépit de la longue liste de problèmes potentiels évoqués ci-dessus, je suis un fan de Marmalade et j'apprécie tout ce que l'entreprise m'a fourni gratuitement. L’outil brille vraiment quand il s’agit d’autres plateformes avec lesquelles vous n’auriez jamais pris la peine de vous embêter, telles que (pour moi) bada ou PlayBook. Vous pouvez vraiment déployer sur un large éventail de périphériques dans le confort de votre PC et de Developer Studio (ou à partir d'un Mac avec xcode, si vous voulez rendre votre vie un peu plus difficile;). L’outil de simulation qu’ils ont est excellent, et il n’ya eu qu’un petit nombre de cas où j’ai dû déboguer sur le périphérique lui-même; En général, si cela fonctionne sur le simulateur, cela fonctionne simplement. IdeaWorks a relevé un défi de taille et fait un excellent travail en combinant toutes ces fonctionnalités (c’est-à-dire toutes les fonctionnalités jamais offertes sur un appareil mobile) sur toutes ces plateformes (c.-à-d. Tous les appareils importants existants, à l’exception de Windows Phone 7 car il ne permet pas actuellement le code natif). Il vient juste avec quelques mises en garde.
Keep in mind that (as other responders have pointed out) even without Marmalade you can still have the bulk of your code base in C++ on either iOS or Android.
In spite of the long list of potential issues above, I am a fan of Marmalade, and I appreciate all the company has provided for me for free. The tool really shines when it comes to other platforms that you'd otherwise never bother with, such as (for me) bada or PlayBook. You really can deploy to a wide array of devices from the comfort of your PC and Developer Studio (or from a Mac with xcode, if you want to make your life a little harder ;). The simulator tool they have is great, and there have been only a small number of instances where I've had to debug on the device itself; in general if it works on the simulator it just works. IdeaWorks has taken on a huge challenge and they are doing a great job juggling all these features (i.e., basically every features ever offered on a mobile device) on all these platforms (i.e., all significant devices in existence, with the exception of Windows Phone 7 because it does not currently allow native code). It just comes with some caveats.
Je suis partial, en tant que CTO chez Marmalade ... mais si vos exigences principales sont (1) l'accès aux caméras et (2) la capacité de "tirer le maximum de la puissance de traitement disponible", alors Marmalade est un excellent choix.
Marmalade compile votre C/C++ en instructions natives ARM (ou x86) ... pas de transcodage, pas de machines virtuelles. Il est très facile d'importer du code C/C++ existant, la quasi-totalité des bibliothèques standard C/C++ sont prises en charge, etc. Et vous pouvez utiliser du code ASM dans votre projet. En outre, vous pouvez effectuer tout votre développement sous Windows ou Mac, quelle que soit la plate-forme sur laquelle vous déployez (oui, vous pouvez même compiler/tester/déployer sur iOS uniquement sur Windws).
Autant que je puisse vous le dire avec Android Development: L’API de la caméra d’Android lui-même semble être un petit buggy (par exemple: avant la version 2.1, il n’existait pas de solution permettant d’afficher Camera en mode portrait sans brouiller les images). Une autre couche d’abstraction pourrait être meilleure (accessibilité, fonctionnalités, peu importe), voire pire. Ce qu’il fait pour sûr: Il vole des ressources, qui peuvent être nécessaires pour votre propre application.
Marmalade offre un excellent framework d'extension native
http://www.madewithmarmalade.com/marmalade/features/extensions-development-kit
Ce qui signifie finalement que vous pouvez passer directement à une implémentation native d’une fonctionnalité particulière. Vous conservez toujours les principaux avantages du développement inter-plateformes pour votre application principale.
Également sur Android, car marmalade utilise le NDK Android, votre code c ++ de traitement des données s'exécutera plus rapidement que le code Java correspondant d'Android.
Faire des jeux avec Marmalade et les extensions et la vitesse du code natif me rendent extrêmement confiant de pouvoir livrer au moins ainsi qu'une application 'native'.
Je voudrais utiliser MoSync Android/iOS, mais je dirais que, depuis que je travaille chez MoSync.
Mais en toute justice, je préfère l’API de la caméra MoSync.
Si vous voulez vraiment utiliser toute la puissance de traitement, vous devez utiliser ASM.
/ Tony
La marmelade n'est pas mauvaise, je l'ai utilisée en 2013. Quelques bugs, quelques ennuis (pools de mémoire fixe), mais dans l'ensemble, ce n'est pas une mauvaise expérience.
La seule vraie déception est le manque de support pour Linux. Je ne vois pas comment les gars de Marmalade peuvent supporter des plateformes obscures comme Blackberry, mais pas Linux; cela n'a aucun sens. Peut-être que cela changera à mesure que Steam OS (une plate-forme centrée sur les jeux basée sur Linux) mûrit, bien que, certes, Steam OS n'apporte pas grand-chose à la table en dehors de ce que les autres systèmes d'exploitation apportent pour le moment.