web-dev-qa-db-fra.com

Compilation de code C ++ (Xcode) pour iOS et Android. Est-ce que c'est réel?

Je veux essayer d'écrire et de compiler du code C++ pour les appareils iOS et Android. J'utilise Xcode depuis un certain temps (j'écrivais du code c ++ pour MacOS et Windows). Je veux donc utiliser Xcode à mes fins.

Le problème est que je ne sais pas comment compiler du code C++ pour les appareils Android et pour iPad/IPhone. Je veux utiliser une solution multiplateforme pour iOS et Android mais je ne veux pas utiliser des frameworks comme Marmalade (c ++) ou autres.

Est-ce réel ou non? :) Y a-t-il des tutoriels ou d'autres documents utiles?

28
JavaRunner

Vous pouvez certainement utiliser C++ sur iOS et Android. J'ai écrit mes propres moteurs de jeu pour les deux.

Xcode est le normal IDE pour iOS et prend en charge nativement le développement "Objective-C++" (Le compilateur prend en charge à la fois Objective-C et C++ ) . Vous devrez écrire un wrapper fin dans Objective-C pour interagir avec le système d'exploitation, mais vous pouvez écrire tout le reste en C++ si vous le souhaitez. Si vous téléchargez les outils de ligne de commande Xcode, vous pouvez également créer à partir de scripts.

Eclipse est l'habituel IDE for Android and if you download the NDK you can utiliser JNI pour interfacer entre Java et C++. Tout comme iOS, vous aurez au moins besoin d'un Java wrapper pour interagir avec le système d'exploitation.

Cependant, vous n'êtes pas limité à Eclipse et Xcode. Vous pouvez par exemple utiliser emacs et/ou utiliser CMake pour vous permettre d'essayer de consolider un peu les paramètres du projet. Emacs est un IDE très puissant et flexible, mais il a une courbe d'apprentissage très abrupte et pas très simple à installer. Si vous faites cela sur Mac, je recommanderais emacsformacosx et l'installation ECB et autocomplete également. CMake est essentiellement un système de construction multiplateforme qui vous permet de créer de nombreux fichiers de projet différents (Visual Studio, Xcode, Eclipse, etc.) à partir d'une arborescence source. Tout comme emacs, c'est super puissant, mais en quelque sorte une courbe d'apprentissage abrupte. Si vous voulez vous lancer tout de suite, vous voudrez probablement commencer avec Xcode et Eclipse. Si vous développez sur un PC, vous aurez besoin d'un Mac VM ou d'un Hackintosh pour utiliser Xcode et cygwin pour utiliser le NDK pour Android (Les utilisateurs de Macbook Pro peuvent amusez-vous tout de suite avec peu de tracas).

Native Android est certainement beaucoup plus difficile. Non seulement vous avez beaucoup plus de segmentation de périphérique à gérer, mais le débogage natif n'est pas très simple. Vous devez exécuter un serveur GDB sur le périphérique et connectez-vous pour définir des points d'arrêt et de nombreuses personnes le font à partir de la ligne de commande. J'ai entendu dire que certaines personnes ont réussi avec Tegra Tools pour Eclipse si vous voulez un IDE basé sur une interface graphique.

Je recommanderais certainement de développer d'abord sur iOS, car vous disposez d'outils beaucoup plus puissants à partir de l'IDE. Vous pouvez suivre les fuites de mémoire, le code de profil, définir facilement des points d'arrêt;), etc. Une fois que vous avez développé une fonctionnalité sur iOS, vous pouvez ensuite lutter avec les fichiers .mk et d'autres avantages de Android natif développement.

Voici quelques informations sur les objets principaux et le cycle de vie pour iOS:

et pour Android:

Tant que vous jouez à Nice avec le système d'exploitation et respectez le cycle de vie de l'application, vous êtes libre de faire des appels à la logique C++. Vous pouvez le faire directement avec iOS, mais avec Android vous devez organiser les appels via JNI. Si vous encapsulez les spécificités de la plateforme, vous pouvez partager la logique C++ entre les deux plateformes.

Je suis un grand défenseur du C++, mais le choix de l'utiliser dépend de la situation de ces plateformes. Le C++ n'est pas le choix populaire pour ces plateformes et en tant que tel, vous ne trouverez pas autant de documentation (la vôtre seule la plupart du temps). La complexité peut monter un peu si vous n'êtes pas très familier avec C++ (Connaissez-vous RAII , design patters , - STL ?).

Voici quelques situations où cela peut avoir du sens:

  • Si vous devez utiliser une bibliothèque créée en C/C++
  • Si vous souhaitez créer votre propre framework agnostique de plateforme pour vos applications ou vos jeux
  • Si vous travaillez avec des applications critiques en temps réel/de performance telles que les jeux

Je ne dis pas que vous [~ # ~] devez [~ # ~] utiliser C++ dans ces situations car beaucoup de gens ont développé des jeux en Objective-C . Je dis simplement que cela peut être quelque chose à considérer si vous avez besoin de tirer le meilleur parti du matériel ou si vous voulez simplement quelque chose de plus portable.

59
Matthew Sanders