NDK

  • 投稿日:
  • by
  • カテゴリ:

Androidの開発には、通常はJavaを用いる。dalvik上の実行環境は十分に高速で、しかも、CPUも年々高速化の一途をたどっており、まあ、大抵の用途は、これで十分にまかなえる。

が、それでも、更に速度が必要であるとか、或いは、UNIX上の資産をあれこれ利用したいとか、iOSと共通のライブラリを作りたいとか、そういった用途には、C/C++を利用するNDKが必要となる。

実際にそういった開発をするかどうかはさておき、NDKも使えるようにして置いた方がいい。いいに決まっている。多分、いいんじゃないかな?

Windows上でNDKを利用するには、Cygwinが必要になる。最近は、インストーラもパッケージも充実しているので、とても簡単にインストールできる。bashよりtcshがいいわたしは、Windowsの環境変数で SHELL=/bin/tcsh としている。これを設定すると、Cygwin terminalが起動された時に、tcshをロードしてくれるのだ。別にbashでいい人は気にしなくていい。

あとは、NDKを/usr/local とか、/optとか、適当な所に展開してやればいい。.bash_profileとか、.cshrc (.tcshrc)とかで、/usr/local/android-ndk-r8 (NDK-r8の場合)と、SDKのplatoform-toolsとtoolsにもパスを通してやる。

.bash_profile:
NDK_HOME=/usr/local/android-ndk-r8
SDK_HOME=/cygdrive/c/android-sdk-windows
if [ –d "${NDK_HOME}" ]; then
    PATH="${NDK_HOME}":${PATH}
fi
if [ –d "${SDK_HOME}" ]; then
    PATH="${SDK_HOME}/platform-tools":"${SDK_HOME}/tools":${PATH}
fi

.cshrc:
setenv NDK_HOME /usr/local/android-ndk-r8
setenv SDK_HOME /cygdrive/c/android-sdk-windows
if ( –d "${NDK_HOME}" ) then
    set path=("${NDK_HOME}" $path)
endif
if ( –d "${SDK_HOME}" ) then
    set path=("${SDK_HOME}/platform-tools" "${SDK_HOME}/tools" $path)
endif

このとき、NDK_HOMEはシンボリックリンクであってはならない。シンボリックリンクになっていると、gccが-Iオプションで渡されるinclude pathを正しく処理できずにヘッダファイルの読み込みエラーを起こしてしまうからだ。

リビジョンがわりとちょこちょこ変わるので、ln –s /usr/local/android-ndk-r8 /usr/local/android-ndk とかして、リビジョンに依存しないようにしたいところではあるけれど、これはCygwinではできない。LinuxやMacOSでは多分問題ないだろう。