Gingerbread NDKについて
2011年2月15日火曜日
最新版の NDK では、皆さまのアプリのすばらしさをさらに高めていきたいと考えています(今回はかなり大きな変更になるでしょう)。NDK r5 ではネイティブコードからより多くのことを実現できる新しい API を追加しました。これらの新しいツールを使えば、Gingerbread 以降用のアプリケーションでは、Java コードを一切書かずに、C++のみで Android アプリケーションを作ることができます。
もちろん、通常の Android API を使うには Dalvik が必要であり、VM はネイティブアプリケーションではいつもバックグラウンドで動いています。NDK が提供していること以外のことを実現するには JNI 経由で Dalvik を実行させることはいつでも可能です。C++だけで開発したい場合のメインループは以下のようになります。
void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_dummy();
// loop waiting for stuff to do.
while (1) {
// Read all pending events.
int ident;
int events;
struct android_poll_source* source;
// Read events and draw a frame of animation.
if ((ident = ALooper_pollAll(0, NULL, &events,
(void**)&source)) >= 0) {
// Process this event.
if (source != NULL) {
source->process(state, source);
}
}
// draw a frame of animation
bringTheAwesome();
}
}
// Make sure glue isn't stripped.
app_dummy();
// loop waiting for stuff to do.
while (1) {
// Read all pending events.
int ident;
int events;
struct android_poll_source* source;
// Read events and draw a frame of animation.
if ((ident = ALooper_pollAll(0, NULL, &events,
(void**)&source)) >= 0) {
// Process this event.
if (source != NULL) {
source->process(state, source);
}
}
// draw a frame of animation
bringTheAwesome();
}
}
(動作するコード全体は、NDK/samples/native-activity の NativeActivity のサンプルと NativeActivity の資料 をご覧ください。 )
完全なネイティブアプリに加えて、最新の NDK では、ネイティブコードから(OpenSL ES API を経由して)音を再生したり、アプリケーションの基本的なイベント(例:ライフサイクル、タッチ、キーイベント、センサーなど)をハンドルしたり、ウィンドウを制御したり(ウィンドウのピクセルバッファへの直接のアクセスを含む)することができます。また、EGL コンテキストの管理や APK ファイルから assets を直接読み込む機能などがあります。STL に依存する Android アプリケーションを作りやすくする STL port もあらかじめ NDK に含まれています。また、RTTI の上位互換性への対応、C++の例外処理、wchar_t に対応し、改良されたデバッグツールをサポートします。
すばらしいアプリケーションを作っている開発者の皆さまのご意見を伺いながら、今回の NDK のリリースに挑戦してきました。今回のリリースは特にゲーム開発者向けのものです。Gingerbread と NDK r5 を使えば、最小限の変更で C/C++で作られていたゲームアプリケーションを Android 上に移行することができます。NDK r5 でアクセスできるようになった様々な API を使うことで、ネイティブなサウンドバッファへのアクセスやウィンドウの surface へ直接描画が可能となり、性能を最大限使う独自のオーディオやビデオコーデックを実装することが容易となり、さまざまなメディアアプリケーションを簡単に作れるようになると期待しています。
今回のリリースで、昨年、開発者の皆様から頂いた数多くのリクエストの多くに対応しました。ぜひこのリリースの素晴らしさを体感して頂ければ嬉しいです。