Crossplatform Partage de code iPhone / Android

En bref: quel est le moyen le plus efficace de partager / réutiliser du code entre les versions iPhone et Android?

Je pense que les deux scénarios les plus courants seraient:

  1. Un nouveau projet en ardoise vierge, sachant à l’avance qu’il existe une grande partie de la logique réutilisable à exécuter sur chaque périphérique.
  2. Base de code iPhone existante, portage de C, C ++ et Objective-C sur le NDK Android ou autre.

Oui, bien sûr, dans un monde parfait, toutes les applications se connecteraient simplement au cloud magique et toute la logique réutilisable serait disponible dans Google App Engine ou certains services Web, mais ce n’est pas l’esprit de cette question. Après avoir expérimenté un port d’iPhone avec Android sans réutilisation de code du tout et avoir vu la douleur que cette personne devait endurer, j’aimerais savoir comment d’autres personnes l’évitent.

D’après mon expérience, vous pouvez utiliser Android NDK pour comstackr C et C ++, donc si vous utilisez des liaisons iPhone Obj-C ++ (.mm) pour un moteur C ++ / C dans l’iPhone et sous Android, vous utilisez des liaisons Java sur le même moteur. Cela devrait être totalement possible.

Donc, moteur C ++ / C (presque même base de code pour Android et iPhone) + couche de liaison mince = code portable.

Comme je l’ai dit à quelqu’un qui a posé une question similaire il y a quelque temps, utilisez MVC et implémentez le MC en C ++ et le V en obj-c ou Java.

Ecrivez autant que possible dans l’ancien C (ou C ++ si nécessaire) et incluez les mêmes fichiers dans Android et iPhone. Fonctionne sur Windows / Mac aussi. Les bibliothèques “multiplateformes” ont tendance à vous consumr.

Vous pouvez essayer le Marmalade SDK … Comstackz une fois pour ARM natif et déployez-le à la fois sur Android et iPhone avec le même binary, standard C / C ++, développez sur Windows ou Mac, beaucoup de technologie middleware incluse.

J’ai travaillé sur la création d’applications et de jeux pour iPhone en utilisant Lua avec mon propre framework. De cette façon, je pourrais éventuellement mettre en œuvre le même cadre pour Android en utilisant Android NDK, mais le code de l’application réelle devrait être exactement le même pour les deux plates-formes.

Je ne pense pas qu’il y ait un moyen facile de le faire, car les API sont évidemment différentes et les langages de programmation natifs sont différents, mais je suggère de construire votre propre infrastructure dans n’importe quel langage pris en charge par les deux plates-formes. Peut-être y a-t-il déjà un cadre qui ferait les choses difficiles pour vous? S’il n’y a pas de bons frameworks pour ce faire, alors c’est clairement une opportunité de mettre en œuvre un tel cadre.

XMLVM mérite d’être essayé.

J’utilise BatteryTech pour mes activités d’abstraction de plate-forme et ma structure de projet ressemble à ceci:

Sur mon PC:

nom de jeu – contient uniquement le code commun

nom de jeu-android – contient principalement le code spécifique à Android de BatteryTech et la configuration Android, les constructeurs pointent vers un projet de nom de jeu pour un code commun

nom de fichier-win32 – Juste pour la construction de Windows, utilise le code du projet de nom de jeu

Sur mon Mac:

nom de jeu – contient uniquement le code commun

gamename-ios – La version iPhone / iPad importe le code commun

nom de fichier-osx – La version native d’OSX. importe le code commun.

Et j’utilise SVN pour partager entre mon PC et mon Mac. Mes seuls problèmes sont lorsque j’ajoute des classes au code commun sous Windows, puis que je mets à jour sur le mac pour les extraire de SVN. XCode n’a aucun moyen de les append automatiquement au projet sans scripts, donc je dois les insérer manuellement à chaque fois, ce qui est pénible mais ce n’est pas la fin du monde.

Tous ces éléments sont fournis avec BatteryTech, il est donc facile de déterminer une fois que vous l’obtenez.

Moai est gratuit pour les petits projets et également utilisé par les grands studios. Je gère le homebrew moi-même, mais si je ne le faisais pas, j’utiliserais probablement Moai moi-même car cela semble très prometteur. Ils revendiquent des ports pour Mac, PC, iOS, Android et je pense même Kindle Fire.

Vous devriez écrire le gros du code dans Lua, mais vous avez access à tout le code, vous pouvez donc utiliser C ++ quand vous en avez besoin.

Vous pouvez également jeter un oeil à Titanium . Le dicton avec leur outil, vous pouvez écrire votre application dans le code Web abstrait et ils vous aideront l’interface de l’application Web avec tous ces gps, capteurs accéléromètres, etc.