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 설치 디렉토리를 가리킵니다. 이 정보를 사용하여 다른 셸 스크립트에서 ndk-build를 호출하거나 자체 makefile을 호출할 수도 있습니다.

명령줄에서 호출

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(manifest) 조합의 결과

manifest 설정NDK_DEBUG=0 NDK_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/ 디렉토리에 각각 32비트 모드와 64비트 모드의 Linux 도구용 linux-x86linux-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>