Android NDKを使う(アプリの高速化)


AndroidにはNDK(Native Development Kit)という高速化のための仕組みが提供されています。
名前が示す通り、ネイティブプログラムを実行するためのSDKです。NDKを使えば、ソースコードをC/C++言語で記述して、高速にアプリケーションを実行できます。


今回はNDKのインストールから作成環境を整えるまでを順を追って紹介します(開発環境はAndroid NDK r4b および Cygwin 1.7.xです)。

  1. NDKの理解のために
  2. Cygwinのインストール(Windows)
  3. NDKのダウンロード
  4. 環境変数(PATHとANDROID_NDK_ROOT)の設定
  5. Hallo JNIの実行(NDK付属のサンプルプログラム)

Windows環境でNDKを使うには、Cygwin(シグウィン)と呼ばれるUnixエミュレータが必要です。

Anroid NDKを使う手順をごく簡単にまとめると以下のようになります。

  1. 通常のプロジェクトのあるディレクトリ以下にjniディレクトリを作成
  2. そこにAndroid.mkとソースコード、ヘッダファイルなどNDK用のファイルを設置する
  3. ネイティブのコンパイルは通常の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時点)。


makeは3.81-2(NDK r4の推奨環境)です。


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/ドライブレター と見えます)

保存後、Cygwinからechoで確認します。

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


プロジェクトを作成したあとは、通常どおり、実行してみましょう。


もちろん、エミュレータでもndkの動作確認は可能です。

おつかれさまでした!

5 Comments