ndk-build
スクリプトは、NDK の Make ベースのビルドシステムを使用するプロジェクトをビルドします。
ndk-build
で使用される Android.mk と Application.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=0 | NDK_DEBUG=1 | NDK_DEBUG の指定なし |
---|---|---|---|
android:debuggable="true" | デバッグ、シンボル、最適化*1 | デバッグ、シンボル、最適化なし*2 | (NDK_DEBUG=1 と同じ) |
android:debuggable="false" | リリース、シンボル、最適化 | リリース、シンボル、最適化なし | リリース、シンボルなし、最適化*3 |
*1: プロファイリングに有用。
*2: ndk-gdb
を実行するときのデフォルト。
*3: デフォルトのモード。
注: NDK_DEBUG=0
は APP_OPTIM=release
に相当し、-O2
を使用してコンパイルします。
NDK_DEBUG=1
は Application.mk
の APP_OPTIM=debug
に相当し、-O0
を使用してコンパイルします。
APP_OPTIM
の詳細については、Application.mk をご覧ください。
コマンドライン上の構文の例は次のとおりです。
$ ndk-build 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>