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 설치 디렉터리를 가리킵니다. 이 정보를 사용하여 다른 셸 스크립트에서 ndk-build를 호출하거나 자신의 메이크(make) 파일을 호출할 수도 있습니다.

명령줄에서 호출

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.mk에서 APP_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을 손댈 필요가 없습니다. (예를 들어, 디버그나 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 스크립트는 자동으로 이 버전을 선택합니다. 개발 환경 또는 ndk-build 명령줄에서 NDK_HOST_32BIT=1을 사용하여 32비트 툴체인을 사용하도록 강제 적용할 수 있습니다.

참고로, 64비트 도구는 호스트 리소스를 더욱 잘 활용하면서도(예: 속도가 더 빠르고 더 큰 프로그램을 처리함), Android용 32비트 바이너리를 생성할 수 있습니다.

요구사항

일반적으로 ndk-build나 NDK를 사용하려면 GNU Make 3.81 이상이 필요합니다. 빌드 스크립트는 비호환 Make 도구를 발견하면 오류 메시지를 생성합니다.

GNU Make 3.81이 설치되어 있지만 기본 make 명령이 실행되지 않으면 자신의 개발 환경에서 이 명령을 가리키도록 GNUMAKE를 정의한 후 ndk-build를 실행하세요. 예:

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