とりあえず、サンプルをビルドするところまで。

インストール

下記、Ubuntu1204(32bit)のLinux上で行ったとする。
ちなみに、64bitも対応しているようだが、サンプルのビルドが通らなかったので32bit版で試すことにした。

下記からndkをダウンロードする。
http://developer.android.com/tools/sdk/ndk/index.html

今回、ダウンロードしたのは下記のバージョン。(r8)

android-ndk-r8d-linux-x86.tar.bz2

下記のコマンドで解凍し、

~/local/android-ndk-r8dのように設置したとする。

.profileに下記を書き、PATHを通す。

下記で反映。

sampleをビルドしてみる

必要なもの

  • openjdk
    →apt-getでインストール
  • android-sdk
    1. http://dl.google.com/android/android-sdk_r21.1-linux.tgzをダウンロード。
    2. 下記のようにPATHを通し、androidコマンドを実行し、platforms以下をインストール。

hello-jniのビルド

android-ndk-r8d/samples/hello-jniに移動する。

ここで、下記のコマンドを実行。

すると、 libs/armeabiのディレクトリに下記の共有オブジェクトファイルが生成される。

libhello-jni.so

何が起こったのか

初めにあったのは、下記のディレクトリ。

  • AndroidManifest.xml
    • Androidのアプリについて定義しているようだけど。。。
    • JNIを利用するActivityについての記述かな。
  • default.properties
    • android-sdkのバージョンを指定している。
  • jni
    • これが一番重要か。
    • Android.mkというndk-buildで使うmakeファイルが入っている。
    • また、hello-jni.cというコンパイルようのcのファイルも入っていた。
  • res
    • リソースファイル。
  • src
    • JNIを利用したJavaのソースコードが入っている。
    • 今回の場合、Activityのクラス。

ビルドを行うと下記のディレクトリが出力される。

  • obj
    → コンパイル中の中間ファイルを保存するディレクトリ
  • libs
    → コンパイル後のsoファイルを格納するディレクトリ。

重要なのはjniディレクトリっぽい。
試してみたが、jniディレクトリ以外を全て削除しても、objとlibsは生成され、.soも出来ていた。
このサンプルはAndroidで実行できるようになっていて、EclipseなどでAndroidManifest.xmlをインポートしたら実行できるようになっているのだろう。

試しに、Eclipseをダウンロードして、ADTプラグインをインストールして試してみた。
https://dl-ssl.google.com/android/eclipse/
途中のSDKをインストールする、というところはキャセルしよう。