Kit)を使ってネイティブコードを利用するAndroidアプリケーション(Androidのアプリケーションフレームワークに従ったアプリ)の作り方としては、以下の2通りの方法がある。Interface)のAPIを介して、C/C++からコンパイルされたシェアードライブラリを呼び出す方法。Andorid1.5以降でサポート。ネイティブアクティビティとして作る方法。アプリはJavaで書く部分はなく、すべてC/C++で書く。この方法ではサービスやコンテントプロバイダにアクセスすることはできない。この方法も、DalvikVM上のバイトコードから呼び出されるシェアードライブラリとなる。9)以降で動かすことができる。アプリケーションフレームワークから独立したスタンドアロンアプリケーション(lsやcatのようなLinuxコマンド)を作ることもできる。hello-jniを試したので、今回は2)のネイティブアクティビティのサンプルをコンパイル、実行してみました。6bはいくつかのバグフィックスだけのようで、6との機能の違いはないようです。参考:http://developer.android.com/sdk/ndk/index.htmlNDKのdocs/NATIVE-ACTIVITY.HTMLによると、ネイティブアクティビティの作り方は次のようになるようです。project"か、Eclipseで新規プロジェクトを作り、そのルートディレクトリの直下にjniディレクトリを作る。jniディレクトリの下にC/C++で書いたすべてのソースを置く。AndroidManifest.xmlファイルを作成する。ポイントは以下の2点。android:name="android.app.ライブラリ名"(ライブラリ名は、libプリフィックスと.soサフィックスを外す)ネイティブコードにnative_activity.hをincludeし、ANativeActivity_onCreate()関数を実装する。アプリが起動するとDalvikVM上のバイトコードからまず最初にこの関数が呼ばれる。この関数内に、ANativeActivity->callbacksに必要なポインタを指定し、ANativeActivity->instanceフィールドに必要なデータのアドレスを指定する。android_native_app_glue.h(native_activity.hをincludeしている)をincludeし、ANativeActivity_onCreate()関数を実装したヘルパーライブラリandroid_native_app_glue.cが用意されているので、これをそのまま利用するか、必要な変更を加えて利用すると良い。android_native_app_glueはandroid_main()を呼び出すように書かれているので、これを利用するアプリはandroid_main()がエントリポイントになる。(サンプルのnative-activityもnative-plasmaもこのヘルパーライブラリを使用しています。)参考:上記ファイルのパスnative_activity.h:platforms/android-9/arch-arm/usr/include/android/native_activity.handroid_native_app_glue.h:sources/android/native_app_glue/android_native_app_glue.handroid_native_app_glue.c:sources/android/native_app_glue/android_native_app_glue.cjniディレクトリの下にAndroid.mkを作る。$(BUILD_SHARED_LIBRARY)プロジェクトのディレクトリの下でndk-buildコマンドを実行する。ndk-buildコマンドについても多少書いたので、よかったらこちらを見てください。Eclipseでプロジェクトのビルド、実行をする。以下、サンプルのnative-activityとnative-plasmaをビルド、実行した画面です。native-plasmaAndroidrotakeさんのブログログインしてコメントを。