Android NDKを使う(アプリの高速化)
|AndroidにはNDK(Native Development Kit)という高速化のための仕組みが提供されています。
名前が示す通り、ネイティブプログラムを実行するためのSDKです。NDKを使えば、ソースコードをC/C++言語で記述して、高速にアプリケーションを実行できます。
今回はNDKのインストールから作成環境を整えるまでを順を追って紹介します(開発環境はAndroid NDK r4b および Cygwin 1.7.xです)。
- NDKの理解のために
- Cygwinのインストール(Windows)
- NDKのダウンロード
- 環境変数(PATHとANDROID_NDK_ROOT)の設定
- Hallo JNIの実行(NDK付属のサンプルプログラム)
Windows環境でNDKを使うには、Cygwin(シグウィン)と呼ばれるUnixエミュレータが必要です。
Anroid NDKを使う手順をごく簡単にまとめると以下のようになります。
- 通常のプロジェクトのあるディレクトリ以下にjniディレクトリを作成
- そこにAndroid.mkとソースコード、ヘッダファイルなどNDK用のファイルを設置する
- ネイティブのコンパイルは通常のEclipce環境と異なり自動ビルドではないので、
cgywinでプロジェクトのあるディレクトリに移動して”ndk-build”コマンドを入力する。
Android NDKの以前のバージョンを利用していた人は適宜、読み飛ばしてください。
リビジョン r4b からビルド手順が簡素化、煩雑だったディレクトリ構成などが改善されています。
では、続きからインストールを始めましょう。
NDKの理解のために
NDKを知るために一般的なアプリケーションについておさらいしておきます。
※インストール手順に影響がない箇所なので、読み飛ばしても大丈夫だと思います。
AndroidのアプリケーションはDalvikと呼ばれる仮想マシン(バーチャルマシン)の上で動作しています。
DalvikはJava言語で記述されたプログラムの実行環境です。一般的なJavaで記述されたアプリケーションはDalvikを介して実行されるため、Native(C/C++)で書かれたプログラムよりも実行速度が遅くなってしまいます。
NDKは動作速度を向上するために使われるほか、
C/C++環境で開発された資産をライブラリとして(わざわざJavaへ移植しないでよい)活用できるといった利点もあります。一方でJavaの恩恵(GCなど)が得られない、アーキテクチャに依存するなどデメリットもあります(NDKを使うとアプリケーションの動作環境が限られ、対応外のアーキテクチャでは動きません)。
Android 2.2(Froyo)では、JIT(Just in Time)コンパイラが導入されて動作速度は改善されています。NDKは、メリットデメリットを考慮して使う必要があります。
Cygwinのインストール
WindowsではNDKの実行環境に必要なgccやmakeなどが入っていません。事前準備としてUnixライクなCygwinをSetupしましょう。なおUbuntuなどUnix,Linux環境であれば読み飛ばしてください。
セットアップの手順を説明します。重要なのはインストールオプションでDevelカテゴリからgcc, makeのSkipを変更して、install対象に含めるところです。
ネットワークの状態にもよりますが、インストールの所用時間はだいたい30分ぐらいでした。
Cygwinの公式URLhttp://www.cygwin.com/にアクセスして
Install or update now! (using setup.exe)
アイコンのリンク(上記の文字列)からSetup.exeをダウンロードします。
Setup.exeを使ってインストール設定を行い、必要なファイルをインターネット上から取得します。
[Install from Internet]を選択します。すでにダウンロード済みのパッケージをお持ちの場合は、[Install from Local Directory]を選択してください。
C:\android\cygwin
としました
Packageのダウンロード先を指定します。再インストール、修復インストールを行う際に、手元にあればダウンロード時間を短縮できます。
プロキシ設定が必要であればここで行ってください。画面は[Direct Connection]です。
リストから近くのサイト(おすすめはjpドメインです)を選択してください。パッケージのダウンロード先となります。
Select PackagesではDevelカテゴリーでgccおよびmakeを選択します。
gccは3.4.4-999を選びます(2010/8/10時点)。
Package間の依存関係を解消するため、いくつか追加でPackageが自動選択されています。確認して次へ進んでください。
インストール完了まで待ちます。あまりに進まない場合は、ダウンロード先を変えるといいかもしれません。
インストールが完了したら、デスクトップ上のCygwinアイコンをクリックして起動します。
画面のように、.bashrc .bash_profile .inputrcが生成されると終了です。おつかれさまでした。
NDKのダウンロード
Android NDKは、http://developer.android.com/sdk/ndk/index.htmlで提供されています。
OSに合わせてAndroid NDK(現時点の最新はRevision 4b)をダウンロードしてください。
今回は、解凍先を以下にしました。
C:\android\android-ndk-r4b
環境変数(PATHとANDROID_NDK_ROOT)の設定
CygwinとNDKがそろったところで準備はほぼ終了です。最後に環境変数を設定します。
Cygwinをインストールすると、\home以下にログインユーザ名でフォルダーが作成されます。
.bashrcファイルの後ろにPATHとANDROID_NDK_ROOTを追記します。
C:\cygwin\home\DELL\.bashrc
今回の環境では以下の通りです。
export ANDROID_NDK_ROOT=C:/android/android-ndk-r4b
export PATH=$PATH:/cygdrive/c/android/android-ndk-r4b
(WindowsのドライブはCygwinからだとルート直下の/cygdrive/ドライブレター と見えます)
Hallo JNIの実行(NDK付属のサンプルプログラム)
hello-jniサンプルプログラムで動作確認してみましょう。
以下はcygwin上での作業になります。
サンプルプロジェクトはNDKのインストールディレクトリの直下、samples以下にあります。
今回の環境では、C:\android\android-ndk-r4b\samples\hello-jni となります。
$ cd /cygdrive/c/android/android-ndk-r4b/samples/hello-jni/
$ ndk-build
プロジェクトの場所(.project , AndroidManifest.xml があるディレクトリ)に移動して、
Cygwinでndk-buildコマンドでNativeの実行ファイルを作成します。
(作成されるライブラリは android-ndk-r4b\samples\hello-jni\obj\local\armeabi\libhello-jni.so です)
ここから先はEclipseでの作業になります。
Androidプロジェクトで「外部ソースからプロジェクトを作成」を選択して、
サンプルプロジェクトを参照してください。
C:\android\android-ndk-r4b\samples\hello-jni
プロジェクトを作成したあとは、通常どおり、実行してみましょう。
おつかれさまでした!