2011-07-05 18 views
9

私はAndroidに移植する必要のある大規模なゲームエンジンに取り組んでいます。すべてのコードはC/C++ですので、私たちはNDK経由で移植しています。私はすべてをビルドしていますが、多くの修復の後で、私たちの.soファイルのDebugバージョンとReleaseバージョンをビルドするための最良の方法はまだ不明です。毎回手で物事を変えることは老朽化しています。Android NDKのデバッグとリリースのビルド

ターゲットごとに異なるApplication.mkファイルがありますか?または、複数のターゲットを単一のAndroid.mkファイルにjni /ディレクトリの下に入れる方法がありますか?あるいは、おそらく3番目の選択肢は、Android.mkファイルがビルドプロセスに通知するために使用する環境変数を設定する標準のmakefileを書くことでしょうか?

最後にAndroidManifest.xmlファイルで設定する必要があるandroid:debuggableフラグに関する最後の質問です。これは実際にデバイスにコピーされた生成されたネイティブコードにどのような影響を与えますか?

ベストと感謝

ケビン

+0

さて、デバッグまたはリリースを手作業でどうやって選んでいますか? NDKサンプルには、デバッグフラグまたはリリースフラグは含まれておらず、-Oxオプションも使用されていません。 – Qwertie

答えて

9

ターゲットごとに異なるApplication.mkファイルがありますか。

いいえ別々のサブディレクトリはすべて、独自のAndroid.mk(共有および静的ライブラリ)を使用しますが、私にとっては1つのApplication.mkだけです。

私Application.mkだけです:

APP_STL := gnustl_static 
APP_OPTIM := debug 

私はまだ最善の方法は、私たちの.soファイルのリリースバージョン対デバッグを構築するために何であるか不確かです。毎回手で物事を変えることは老朽化しています。

jni/Android.mk + Application.mkレイアウトを使用して、少なくとも私には少しばらつきがあります。

Application.mkがAPP_OPTIM := debug はその後のAndroidManifest.xmlのapplication要素に、私はあなたがNDKビルドでビルドすると、それはオン、オフオフにするか、するのに便利である(最適化を決定するために、このマニフェストフラグを使用していますandroid:debuggable="true" を持っていますプロファイリングなど)

(リトル・オフトピック)私は最近

https://code.google.com/p/android-ndk-profiler/

http://code.google.com/p/jrfonseca/wiki/Gprof2Dot

012と組み合わせて、

渡って走りました

いくつかのかわいい画像を生成して、私のちょっとした心が自分の携帯電話でどのように動作しているかを把握できるようにします。

+1

ええ、私はこれらすべてのことをやった - 私がやったことは、各ターゲット(リリース/デバッグ)ごとに異なるApplication.mkを持っていることです。次に、各ファイル(Release.mk/Debug.mk)で、APP_CFLAGSを介してグローバルなCフラグを指定し、標準のメークファイルからRelease.mkまたはDebug.mkを指定してndk-buildを呼び出します。 –

+0

私は自分自身がデバッグより多くのプロファイリングをしていることを知っています。サブフレームごとに複数のフラグを設定/フィルタリングする必要があります(-fomit-frame-pointerと-pgは互換性がありません)。私の場合、libチェーン全体を-pgにしたくないからです。 – dwerner

1

あなたの.so年代を構築するためにAndroid.mkシステムを使用する必要はありませんしています。個人的には、自分のMakefileを必要なターゲットで使用しています。これにより、非常に標準化されたデバッグ対リリースビルド仕様が可能になります。

+0

Android.mkファイルは複数のターゲットを1つのファイルでサポートしますか?彼らのシステムを使ってこれを救済する方法があると私は望んでいる。 –

+0

私たちは独自のビルドシステム(ndkではなく)も使用していますが、これは多くの作業であることに注意してください。いくつかのサンプルのNDKプロジェクトをビルドし、NDKがコンパイラフラグなどで何をしているのかを理解していることを確かめたいと思います(私たちはNDK以外の多くのビルドも行っているのでNDKを使用しません。アンドロイドはすべてのために私たち自身のビルドシステムを使用するよりもはるかに多くの作業です)。 –

0

1つのファイルを使用して、異なるターゲットのライブラリを構築します。 Application.mkでは、この "APP_ABI:= armeabi armeabi-v7a"を追加してくれます。

関連する問題