45 votes

Comment coder le partage entre Android et iOS

Je me déplace loin de la stricte développement Android et souhaitant créer des applications iPhone. Ma compréhension est que je code le backend de iOS applications en C/C++ et aussi que je peux utiliser le NDK pour inclure le code C/C++ dans les applications Android. Ma question cependant est de savoir comment? J'ai googlé un peu et je ne trouve pas des réponses claires et concises. Lorsque l'on regarde l'exemple de code pour le NDK, il semble que tous les noms de fonction, etc. sont Android (ou au moins Java) spécifiques et donc je ne voudrais pas être en mesure d'utiliser ce C/C++ backend pour développer un iPhone frontend? J'apprécierais quelques éclaircissements sur cette question et, si disponible, un peu de code pour m'aider? (même un simple Bonjour tout le Monde qui lit une chaîne de caractères à partir d'un C/C++ fichier et l'affiche dans une version d'iOS et Android).

Merci les gars Chris

69voto

Rob Napier Points 92148

Notez que j'ai presque exclusivement sur les "affaires/utilitaire/productivité" des applications, des choses qui dépendent largement assez standard éléments de l'INTERFACE utilisateur et s'attendent à s'intègrent bien à leur plate-forme. Cette réponse reflète. Voir Mitch Lindgren commentaire Shaggy Frog réponse de bons commentaires pour les développeurs de jeux, qui ont une situation complètement différente.

Je crois que @Shaggy Grenouille est incorrect ici. Si vous avez efficace, testé le code en C++, il n'y a pas de raison de ne pas le partager entre Android et l'iPhone, et j'ai travaillé sur des projets qui ne sont juste que, et il peut être très réussie. Il y a des dangers qui doivent être évités.

De manière plus critique, être prudent de "plus petit dénominateur commun." Autonome, algorithmique code, les actions très bien. Complexe de cadres gérer les discussions, parler sur le réseau, ou d'interagir avec le système d'exploitation sont de plus en plus difficile de le faire d'une manière qui ne vous force pas à briser les paradigmes de la plate-forme et shoot pour l'écran LCD qui fonctionne aussi mal sur toutes les plates-formes. En particulier, je vous recommande d'écrire votre code de mise en réseau à l'aide de la plate-forme des cadres. Cela nécessite souvent un "sandwich", où la couche supérieure est spécifique à la plateforme, et tout en bas de la couche de plate-forme spécifique, et le milieu est portable. C'est une très bonne chose si elle est conçue avec soin.

La gestion des threads et des minuteries doivent aussi être fait en utilisant la plate-forme des cadres. En particulier, Java utilise des threads fortement, tandis que iOS repose généralement sur son runloop pour éviter les threads. Lorsque l'iOS utiliser des threads, PGCD est fortement conseillée. Encore une fois, la solution est d'isoler réellement portables algorithmes, et de laisser à la plate-forme de code à gérer, comment il s'appelle.

Si vous avez un complexe, le cadre existant, qui est fortement filetée et a beaucoup de réseau ou le code de l'INTERFACE utilisateur, réparties tout au long de l', alors le partage, il peut être difficile, mais ma recommandation serait encore à chercher des moyens de refactoriser le code plutôt que de le réécrire.

Comme iOS et Mac développeur qui travaille beaucoup avec la croix-plate-forme de codes partagés sur Linux, Windows et Android, je peux dire que Android est de loin le plus ennuyeux des plates-formes de partager avec (Windows utilisé pour maintenir cette distinction, mais Android soufflé dessus). Android a eu le plus de cas où il n'est pas sage de partager du code. Mais il y a encore de nombreuses possibilités pour la réutilisation du code et qu'ils devraient être poursuivis.

4voto

Shaggy Frog Points 20388

Tandis que le sentiment est solide (vous en suivant la politique de Ne pas se Répéter), c'est seulement pragmatique si ce que vous pouvez partager ce code de manière efficace. Dans ce cas, il n'est pas vraiment possible d'avoir une "écriture" dans l'approche de développement cross plate-forme où le code pour les deux plates-formes doit être écrits dans différents langages (C/C++/Obj-C sur iPhone, Java pour Android).

Vous serez mieux écrit deux bases de code dans ce cas (dans les deux langues différentes). Parole de conseils: ne pas écrire votre code Java comme C++, ou votre code C++ comme il est de Java. J'ai travaillé dans une entreprise, un certain nombre d'années qui avait un produit qu'ils ont "porté" de Java vers C++, et ils n'ont pas écrit le code C++ comme c'était le C++, et il a causé toutes sortes de problèmes, pour ne pas mentionner est dur à lire.

2voto

jchristof Points 526

La rédaction d'un code de base est vraiment très pratique dans cette situation. Il y a une surcharge de la configuration et de le garder organisé, mais les principaux avantages sont ces 1) réduire la quantité de code en partageant les fonctionnalités courantes 2) le Partage des corrections de bug à la base de code commune. Je suis actuellement à la connaissance des deux routes que je suis en train d'étudier un projet - utiliser le natif c/c++ (les gains en vitesse au détriment de perdre la collecte des ordures et l'établissement de cibles par processeur) ou de l'utilisation monodroid/monotouch qui fournissent c# liaisons pour chaque système d'exploitation de la plate-forme de la fonctionnalité (je ne suis pas certain de la façon dont cette mature est.)

Si j'écrivais un jeu à l'aide de la 3d, je serais certainement utiliser l'approche #1.

2voto

rbgrn Points 210

J'ai posté cette même réponse à une question similaire, mais je pense que c'est important donc...

J'utilise BatteryTech pour ma plate-forme de l'abstraction des trucs et mon projet de la structure ressemble à ceci:

Sur mon PC:

  • gamename - contient juste le code commun

  • gamename-android - tient principalement BatteryTech android-code spécifique et Android config, les constructeurs point de nomdujeu projet de code commun

  • gamename-win32 - Seulement pour la création de Windows, utilise un code de nomdujeu projet

Sur mon Mac:

  • gamename - contient juste le code commun

  • gamename-ios - IPhone/iPad construire, les importations de code commune

  • gamename-osx - Le natif de OSX construire. les importations de code commune.

Et j'utilise SVN à partager entre mon PC et Mac. Ma seule vrais problèmes quand j'ai ajouter des classes à la base de code commune de Windows et la mise à jour sur le mac afin de les tirer vers le bas à partir de SVN. XCode n'ont pas un moyen de les ajouter automatiquement dans le projet sans scripts, donc je dois tirer manuellement à chaque fois, ce qui est une douleur, mais n'est pas la fin du monde.

Tout ça vient avec BatteryTech il est donc facile à comprendre une fois que vous l'obtenez.

2voto

Anderson Mao Points 251

En plus de l'aide de C/C++ part donc, lib.

Si pour développer la plate-forme d'applications comme jeu, suggèrent une utilisation mono-fonction cadre comme Unity3D.

Sinon si à développer des applications qui requièrent un natif de l'INTERFACE utilisateur et que vous souhaitez partager code de la logique métier de la croix-des plates-formes mobiles, je suggère d'utiliser Lua moteur incorporé en tant que client de la logique métier centre.

L'INTERFACE utilisateur du client est toujours indigènes et obtenir la meilleure INTERFACE utilisateur de la performance. j'.e Java sur Android et ObjectC sur iOS, etc. La logique est partagée avec les mêmes scripts Lua pour toute la plateforme. De sorte que le Lua couche est similaire en tant que client des services (à comparer avec le côté de serveur de services).

-- Anderson Mao, 2013-03-28

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X