C ++でのAndroidゲーム開発


26

そのため、主にc / c ++開発者である私は、モバイルゲーム開発の唯一の選択肢はiOSを使用することであると常に考えてきました。

友人から聞いたところ、Androidにはネイティブ開発ツールキットがあり、C ++コードをAndroidで動作させることができます。

誰かがこれを使用しましたか?もしそうなら、どのように見つけますか?つまり、iOSのように「機能する」だけなのか、利用可能なAndroidデバイスの種類が多いため、注意が必要な考慮事項はまだあるのでしょうか。

回答:


26

Android APIはJavaです。2010年以降、GoogleはC / C ++開発者向けにNDK(SDK)を提供しています。

NDKには2つの方法があります。

  • android 1.5デバイスの場合、elfライブラリをロードし、JNIブリッジ経由でjavaアプリケーションから使用できます。
  • Android 2.3デバイスの場合、NativeActivityを使用して、フルスクリーンアプリケーションのJavaアクティビティコードをバイパスできます。

NDKが提供するC / C ++ APIはほとんどありません。

  • バイオニクスと呼ばれる擬似libc:多くの機能は利用できません
  • pthreadライブラリ
  • OpenGL ES 1.x(> Android 1.5)およびOpenGL ES 2.x(Android 2.0)
  • OpenSL(Android 2.3での限定サポート)

ただし、多くのAPIはJavaのみです(JNIでも利用可能)。

NDK 5バージョンは、以下を提供するため、C ++開発者にとって最初に使用可能です。

  • RTTI
  • 例外サポート
  • STLport
  • マルチスレッドプログラムのgdbサポート

最も痛みを伴う操作は、Androidデバイスでのデバッグです。そこで、最初にデスクトッププラットフォームで、次のiOSプラットフォーム(シミュレーターで)、最後(Android)でデバッグするために、独自のマルチプラットフォームフレームワーク(OS X、Windows、Linux、iOS、Android)を開発します。

Androidエミュレーター(シミュレーターではありません)のパフォーマンスは低く、OpenGL ES 2.xをエミュレートできません。開発には実際のデバイスをお勧めします。

多くの有用な情報を見つけることができます:


「入力コード」リンクが壊れています。
ジョシュ10億

1
修正:
エリス

9

Android NDKを使用して、2つのSDL + OpenGLゲームをAndroidに移植することに成功しましたが、驚くほど簡単です。GLコンテキストを作成し、C ++コードがコールバックするための入力、サウンド、イメージのロードなどのユーティリティクラスを提供する200行のJavaラッパーがあります。NDKの「San-Angeles」サンプルプログラムは、優れた出発点です。

ちなみに、Javaを使用せずにC / C ++プログラムを作成することは可能ですが、時々JVMをコールバックしてOSレベルのメソッドにアクセスすると便利です。

あなたのゲームがすでにLinuxでコンパイルされているなら、あなたはくつろいでいると思うでしょう。私の現在のプロジェクトにある100以上のファイルのうち、#ifdef ANDROID_NDKディレクティブを持っているのは4つだけです(イメージとサウンドに関連するクラス)。

実際、ゲームの移植に費やされた時間のほとんどは、私が知らなかった既知のエミュレーターのバグのためでした。


過去に、Androidエミュレーターでopenglゲームをコンパイル/ビルド/デプロイする単純なパイプラインを取得しようとして(イライラする)問題がありました。リソースまたは私が使用できるものを教えてもらえますか?(これらのユーティリティクラスがオープンソースであるかどうかはわかりませんが、もしあれば、それらを見ることに興味があります。)ありがとう
-brainydexter

1
@brainydexter:私は私はわからないので、私はあなたに非常に役立ちますが、次のように私のパイプラインがあり、autotoolsのを楽しんでコマンドラインの男午前:確実にANDROID_NDK_ROOTそれがであることを、セットである$PATH(と一緒に[sdk_location]/toolsして[sdl_location]/platform-tools)。プロジェクトディレクトリに移動します。ndk-build; を使用してNDKコードをコンパイルします。Javaコードをコンパイルし、ant compile; を使用してパッケージをビルドします。を使用してエミュレータまたは接続されたデバイスにアップロードしますant install。エンジンをopensourcingとして、私はまだ決めていないが、私はすでに上でコードを公開していますブログ
サム・ホスバー

リンクをありがとう!あなたのブログに注目していきます。
Brainydexter

4

Androidは、Android 1.5からAndroid NDKまでのネイティブアプリケーションをサポートしており、対象ユーザーを非常によくカバーするはずです。それでも、JNIを介してアプリケーションのネイティブ側をロードし、たとえば入力呼び出しやレンダリング呼び出しを転送する単純なAndroid Javaアプリケーションが必要です。

NDKにはいくつかのバージョンがありますが、最新のNDKを使用して、サポートするターゲットAPIを選択できます。Androidバージョン2.3以降では、ネイティブ側でより多くのことができ、必要なJavaコードは少なくなりますが、2.3のデバイスサポートは現在非常に限られています。

ネイティブAndroid C / C ++開発は、少なくともフルスクリーンゲームには有効なソリューションであり、既存のC / C ++ OpenGL ESアプリケーションを移植するのに必要な労力はごくわずかです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.