NativeActivityクラスを用いたアプリケーションを実行する。NativeActivityクラスを用いたアプリケーションを実行する。5も公開され、NativeActivityクラスが利用できるようになりました。NativeActivityクラスを利用すれば、Nativeな言語(CもしくはC++)のみで、Androidアプリケーションが作成できます。用いたアプリケーションや、グラフィカルなゲームアプリケーションの分野で特に有利になってくる可能性があります。これまでもJNIを用いて一部の処理をNativeな言語で記述し、javaで呼び出すことで高速化を計ることは可能でしたが、NativeActivityでは、Nativeな言語のみでアプリケーションを作成することができるため、さらなる高速化が期待できます。今回は、C言語で記述されたアプリケーションをビルドし、エミュレータで実行してみます。プロジェクトの中身についても触れてみたいと思います。NDKをセットアップしておく必要があります。NDKのインストール方法は以下のリンクを参考にしてください。NDKを使う(アプリの高速化)それではまず、サンプルコードから新規プロジェクトを作成します。プロジェクトを作成したら、先ほどの鈴k寿を参考に早速ソースコードをビルドしてみます。移動したら、コマンドプロンプトにて、ndk-buildのコマンドを実行します。ビルドに成功したら、通常通りeclipseからプロジェクトをデバッグ実行します。すると、ミュレータが立ち上がり、画面の色が様々に変化するサンプルアプリケーションが実行されます(上図)。プロジェクトの中身それではプロジェクトの中身を見てみましょう。srcディレクトリの下に、javaファイルが存在しないことに気が付くと思います。次に、jniディレクトリの中に、main.c、Android.mk、Application.mkの3つのファイルが存在していることがわかります。main.cファイルに、今回使用するサンプルアプリケーションのメインの処理が記述されています。このサンプルコードは、Java言語ではなく、C言語で作成されているがわかります。ESを利用して記述されているため、それについてはここでは詳しくは解説しませんが、注目したいのはandroid_main()関数です。state;//....省略}android_main()関数は、アプリケーションが起動して一番はじめに呼び出される関数です。いわゆるC言語でいうところのmain()関数ですね。この関数のプロトタイプ宣言は、以下のファイルに次のようにされています。app);さらに追って見ましょう。android_main()関数は次のファイルから呼び出されます。<NDKルート>/sources/android/native_app_glue.c一部を抜粋してみます。ANativeActivity_onCreate()関数が起動します。savedStateSize);}ここで、各種コールバック関数を登録しています。その後、android_app_create()関数が呼ばれています。android_app;}上記ソースコード中のpthread_create()関数の中で、android_app_entry()関数がさらに呼ばれています。NULL;}上記ソースコードにて、android_main()関数が呼び出され、main.cへと処理が移ります。Android.mkファイルについてAndroid.mkファイルについても触れておきます。今回使用したサンプルコードのAndroid.mkファイルの内容は以下のようになっています。import-module,android/native_app_glue)簡単に説明すると次のようになります。makeファイルの断片です。my-dir)にて、カレントディレクトリのパスを変数LOCAL_PATHに代入しています。LOCAL_MODULE変数は、モジュールを識別するために定義します。名前はユニークである必要があり、スペースは使用してはいけません。ディレクトリ以下にできあがります。LOCAL_SRC_FILESは、CもしくはC++で記述されたソースファイルを定義します。ヘッダファイルやインクルードファイルは記述してはいけません。LOCAL_LDLIBSは、追加したいリンカフラグを定義します。”-l”を忘れずに付加しましょう。LOCAL_STATIC_LIBRARIESには、モジュールとリンクさせる静的ライブラリを宣言します。その他にも、場合によって様々な宣言が必要です。Android.mkファイルについてはドキュメントが<NDKルート>/docsに梱包(ANDROID-MK.html)されていますので、詳しくはそちらを参照下さい(本記事もそちらを参考にしています)。2.0(β)に対応した解説書です。