ndk-build

ndk-build スクリプトは、NDK の Make ベースのビルドシステムを使用するプロジェクトをビルドします。ndk-build で使用される Android.mkApplication.mk の構成については、それぞれのリンク先に詳しいドキュメントがあります。

内部動作

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
以前に生成したバイナリを削除します。

注: Mac OS X では、並列実行数が多い状況で ndk-build clean を実行すると、次のメッセージを含むビルドエラーが発生する可能性があります。

    rm: fts_read: No such file or directory
    

この問題を回避するには、-jN 修飾子の使用を避けるか、または N に 2 などの小さな値を指定してください。

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=0NDK_DEBUG=1NDK_DEBUG 指定なし
android:debuggable="true"デバッグ、シンボル、最適化*1 デバッグ、シンボル、最適化なし*2(NDK_DEBUG=1 と同じ)
android:debuggable="false"リリース、シンボル、最適化 リリース、シンボル、最適化なしリリース、シンボルなし、最適化*3

*1: プロファイリングに有用。
*2: ndk-gdb を実行するときのデフォルト。
*3: デフォルトのモード。

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

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

    $ ndk-build NDK_DEBUG=1
    

64 ビット ツールチェーンと 32 ビット ツールチェーン

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

64 ビットツールは、ホストのリソースをより有効に活用できる(たとえば、より高速に、より大きなプログラムを処理できる)うえ、必要に応じて Android 用の 32 ビットバイナリを生成することも可能です。

要件

通常、ndk-build や NDK を使用するには、GNU Make 3.81 以降が必要です。非準拠の Make ツールがあると、ビルド スクリプトによってそれが検出され、エラー メッセージが出力されます。

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

    $ 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>