web-dev-qa-db-ja.com

iOSおよびAndroid用のC ++コード(Xcode)のコンパイル。本物ですか?

IOSおよびAndroidデバイス用のC++コードを記述してコンパイルしたいと思います。私はしばらくの間Xcodeを使用しています(MacOSおよびWindows用のc ++コードを作成していました)。だから私は目的のためにXcodeを使いたいです。

問題は、AndroidデバイスとiPad/iPhoneの両方でC++コードをコンパイルする方法がわからないことです。 iOSとAndroidにcrossplatform-solutionを使用したいのですが、Marmalade(c ++)などのフレームワークを使用したくありません。

それは本物かどうか? :)チュートリアルやその他の役立つ資料はありますか?

28
JavaRunner

IOSとAndroidでC++を確実に使用できます。両方のゲームエンジンを作成しました。

Xcodeは通常のIDEで、「Objective-C++」開発をネイティブでサポートします(コンパイラは Objective-CC++ の両方をサポートします) 。OSとやり取りするにはObjective-Cで薄いラッパーを記述する必要がありますが、必要に応じてその他すべてをC++で記述できます。Xcodeコマンドラインツールをダウンロードすると、スクリプトからビルドすることもできます。

Eclipseは通常のIDE for Androidで、ダウンロードすると [〜#〜] ndk [〜#〜] できます= [〜#〜] jni [〜#〜] を利用してJavaとC++の間のインターフェイスを作成します。iOSと同様に、少なくともJava OSと対話するためのラッパー。

ただし、EclipseとXcodeに限定されません。たとえば emacs を使用したり、プロジェクトの設定を少し統合したりするために CMake を使用したりできます。 Emacsは非常に強力で柔軟なIDEですが、学習曲線が非常に急で、インストールは簡単ではありません。 Macでこれを行う場合は、 emacsformacosx をインストールし、 [〜#〜] ecb [〜#〜]autocomplete をインストールすることもお勧めします。 CMakeは基本的に、1つのソースツリーから多くの異なるプロジェクトファイル(Visual Studio、Xcode、Eclipseなど)をビルドできるクロスプラットフォームビルドシステムです。 emacsと同様に、これは非常に強力ですが、学習曲線がやや急になります。すぐにジャンプしたい場合は、XcodeとEclipseの両方から始めたいと思うでしょう。 PCで開発している場合、Mac VMまたはHackintoshを使用してXcodeおよびcygwinを使用し、Android(Macbook Proユーザーが少しの手間ですぐに楽しんでください)。

ネイティブAndroid開発は間違いなくはるかに困難です。競合するデバイスセグメンテーションがはるかに多いだけでなく、ネイティブデバッグも簡単ではありません。デバイスでGDBサーバーを実行し、それに接続してブレークポイントを設定すると、多くの人がコマンドラインからこれを行います。GUIベースのIDEが必要な場合は、Eclipseで Tegra Tools を使用して成功する人もいると聞きました。

IDEから自由に使える強力なツールがあるため、まずiOSで開発することをお勧めします。メモリリークの追跡、コードのプロファイル、ブレークポイントの設定などが簡単にできます;)など。iOSで機能を開発したら、.mkファイルやAndroid native開発。

以下は、iOSのコアオブジェクトとライフサイクルに関する情報です。

androidの場合:

OSでNiceをプレイし、アプリケーションのライフサイクルを尊重している限り、C++ロジックを自由に呼び出すことができます。これはiOSで直接実行できますが、Androidを使用すると、JNIを介して呼び出しをマーシャリングする必要があります。プラットフォームの詳細をカプセル化すると、両方のプラットフォーム間でC++ロジックを共有できます。

私はC++の支持者ですが、使用するかどうかは、これらのプラットフォームの状況によって異なります。 C++は、これらのプラットフォームでは一般的な選択肢ではないため、それほど多くのドキュメントはありません(ほとんどの場合自分で)。 C++にあまり詳しくない場合は、複雑さが少し上がる可能性があります( [〜#〜] raii [〜#〜]design patters 、- [〜#〜] stl [〜#〜] ?)。

これが意味のあるいくつかの状況を次に示します。

  • C/C++で作成されたライブラリを利用する必要がある場合
  • アプリやゲーム用に独自のプラットフォームにとらわれないフレームワークを構築したい場合
  • ゲームなどのリアルタイム/パフォーマンス重視のアプリケーションを使用している場合

多くの人がObjective-Cでゲームを開発しているため、これらの状況ではC++を使用する必要があります[〜#〜] [〜#〜] 。ハードウェアを最大限に活用する必要がある場合や、単によりポータブルなものを必要とする場合は、検討する必要があるかもしれません。

59
Matthew Sanders