ndk-build

ndk-build ファイルは、Android NDK r4 で導入されたシェル スクリプトです。その目的は、正しい NDK ビルド スクリプトを呼び出すことです。

概要

ndk-build スクリプトを実行することは、次のコマンドを実行することと同等です。

$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>

$GNUMAKE は GNU Make 3.81 以降を指し、<ndk> は NDK インストール ディレクトリを指します。 この情報を使用して、他のシェル スクリプトまたは独自の Makefile から ndk-build を呼び出すことができます。

コマンドラインからの呼び出し

ndk-build ファイルは、最上位の NDK インストール ディレクトリに配置されています。このファイルをコマンドラインから実行するには、アプリ プロジェクト ディレクトリ内、またはそのディレクトリの下でファイルを呼び出します。次に例を示します。

cd <project>
$ <ndk>/ndk-build

この例では、<project> はプロジェクトのルート ディレクトリを指します。<ndk> は NDK をインストールしたディレクトリです。

オプション

ndk-build に対するパラメータはすべて、実質的に NDK ビルド スクリプトを実行する GNU make コマンドに直接渡されます。 ndk-build とオプションを ndk-build <option> の形式で組み合わせます。 次に例を示します。

$ ndk-build clean

次のオプションを使用できます。

clean
以前に生成されたバイナリを削除します。
V=1
ビルドを開始し、ビルドコマンドを表示します。
-B
完全な再ビルドを行います。
-B V=1
完全な再ビルドを行い、ビルドコマンドを表示します。
NDK_LOG=1
NDK 内部ログ メッセージを表示します(NDK 自体のデバッグに使用します)。
NDK_DEBUG=1
デバッグビルドを行います。(表 1 を参照)。
NDK_DEBUG=0
リリースビルドを行います。(表 1 を参照)。
NDK_HOST_32BIT=1
32 ビットモードで常にツールチェーンを使用します(64 ビットおよび 32 ビット ツールチェーンを参照)。
NDK_APPLICATION_MK=<file>
NDK_APPLICATION_MK 変数が指す特定の Application.mk ファイルを使用してビルドします。
-C <project>
<project> にあるプロジェクト パスのネイティブ コードをビルドします。ターミナルで cd を使用しない場合に有用です。

デバッグビルドとリリースビルド

NDK_DEBUG オプションを使用して、または特定のケースでは AndroidManifest.xml を使用して、デバックビルドまたはリリースビルドの指定や、最適化に関連する動作やシンボルの包含を指定します。 表 1 は、指定可能な各組み合わせの結果を示しています。

表 1 NDK_DEBUG(コマンドライン)と android:debuggable(マニフェスト)の組み合わせの結果。

NDK_DEBUG=0 NDK_DEBUG=1NDK_DEBUG 未指定
android:debuggble="true" デバック、シンボル、最適化*1デバック、シンボル、最適化なし*2 (NDK_DEBUG=1 と同様)
android:debuggable="false"リリース、シンボル、最適化リリース、シンボル、最適化なし、リシース、シンボルなし、最適化*3
*1: プロファイリングに有用。
*2: ndk-gdb を実行するときのデフォルト。
*3: デフォルトのモード。

注: NDK_DEBUG=0APP_OPTIM=release と同等であり、GCC -O2 オプションを使ってコンパイルします。NDK_DEBUG=1Application.mkAPP_OPTIM=debug と同等であり、GCC -O0 オプションを使ってコンパイルします。 APP_OPTIM の詳細については、Application.mk をご覧ください。

コマンドライン上の構文の例は次のとおりです。

$ ndk-build NDK_DEBUG=1

SDK r8 よりも前のバージョンのビルドツールを使用している場合、AndroidManifest.xml ファイルを変更して、デバッグモードを指定する必要があります。 これを行うには、次のような構文を使用します。

<application android:label="@string/app_name"
android:debuggable="true">
SDK r8 以降では、AndroidManifest.xml を変更する必要はありません。デバッグ パッケージをビルドすると(たとえば、ant debug または ADT プラグインの対応するオプションを使って)、ツールによって、NDK_DEBUG=1 で生成されたネイティブ デバッグ ファイルが自動的に選択されます。

64 ビットおよび 32 ビット ツールチェーン

一部のツールチェーンは、64 ビット バージョンと 32 ビット バージョンの両方を備えています。たとえば、ディレクトリ <ndk>/toolchain/<name>/prebuilt/ および <ndk>/prebuilt/ には、32 ビットモードと 64 ビットモードの Linux ツール向けの linux-x86 フォルダと linux-x86_64 フォルダの両方がそれぞれ含まれている場合があります。 ホスト OS が 64 ビット バージョンをサポートする場合は、ndk-build スクリプトによって、ツールチェーンの 64 ビット バージョンが自動的に選択されます。 環境または ndk-build のコマンドラインで、NDK_HOST_32BIT=1 を使用することにより、強制的に 32 ビット ツールチェーンを使用することができます。

64 ビットツールではホストリソースがより適切に利用されることに加えて(たとえば、64 ビットツールはより高速であり、より大きなプログラムを扱うことができます)、Android 用の 32 ビットバイナリの生成も可能であるという特長があります。

要件

一般的に ndk-build や NDK を使用するには、GNU Make 3.81 以降が必要です。ビルド スクリプトにより、非対応 Make ツールが検出され、エラー メッセージが生成されます。

GNU Make 3.81 をインストールしているが、デフォルトの make コマンドで GNU Make 3.81 を起動しない場合、ndk-build を起動する前に GNU Make 3.81 を指すように環境内で GNUMAKE を定義します。 次に例を示します。

$ export GNUMAKE=/usr/local/bin/gmake
$ ndk-build

次の環境変数を使用すると、$NDK/prebuilt/<OS>/bin/ にある事前にビルドされた他のホストツールをオーバーライドすることができます。

$ export NDK_HOST_AWK=<path-to-awk>
$ export NDK_HOST_ECHO=<path-to-echo>
$ export NDK_HOST_CMP=<path-to-cmp>