안드로이드에서는 Android.mk로 소스를 컴파일한다. 이것을 규칙에 맞게 작성해야만 소스 코드를 컴파일할 수 있다.
안드로이드 시스템은 안드로이드를 위한 Makefile양식을 가지고 있다. NDK로 개발을 하려면 Application.mk와 Android.mk를 작성해야한다.
[Hello-jni 예제의 Android.mk 파일]
LOCAL_PATH := $(call my-dir) |
소스파일의 위치를 지정 my-dir(현재 디렉토리를 리턴) |
include $(CLEAR_VARS) |
CLEAR_VARS 변수는 특정 GNU Makefile을 가리킨다. 이것은 LOCAL_PATH 이외에 다른 LOCAL_XXX변수를 지운다. (예 : LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES 등) 라이브러리를 여러개 사용하는 것과 같이 먼저 읽은 Android.mk의 LOCAL_XXX값이 중복되어 사용되는 것을 방지하기 위해 반드시 정의 |
LOCAL_MODULE := Hello-jni |
모듈 이름을 정의한다. NDK 빌드 시스템은 libHello-jnu.so를 생성한다. |
LOCAL_SRC_FILES := hello_jni.c |
C또는 C++ 소스 파일 목록을 지정한다. |
include $(BUILD_SHARED_LIBRARY) |
include $(CLEAR_VARS)를 선언한 이후의 LOCAL_XXX 변수를 모두 모아서 적용하고 빌드를 결정 |
Application.mk
Appplication.mk는 어플리케이션에서 사용하는 네이티브 모듈을 정의하는데 사용한다.
APP_PROJECT_PATH |
NDK 프로젝트의 위치 |
APP_MODULES |
모듈 이름(옵션) |
APP_OPTIM |
debug모드 또는 release모드 지정 (기본 : release모드) |
APP_CFLAGS |
C소스 컴파일 플래그 지정 |
APP_CXXFLAGS |
C++ 소스 컴파일 플래그 지정 |
APP_CPPFLAGS |
C/C++ 일반적인 컴파일 플래그 지정 |
APP_BUILD_SCRIPT |
특정 Android.mk를 지정 (기본적으로는 프로젝트 폴더의 jni아래 있는 Android.mk를 찾는다) |
APP_ABI |
ARMv7에서 H/W FPU 명령어를 지원하고 싶을때 : APP_ABI := armeabi-v7a ARMv5TE와 ARMv7를 지원하고 싶을때 : APP_ABI := armeabi armeabi-v7a IA-32명령어 셋을 지원하고 싶을때 : APP_ABI := x86 모두 지원하고 싶을 때 : APP_ABI := all |
APP_STL |
APP_STL := <사용하고자 하는 런타임 라이브러리> system -> 필수적인 최소한의 system C++ 런타임 라이브러리 gabi++_static gabi++_shared stlport_static stlport_shared gnustl_static gnustl_shared |
'Developer > Android' 카테고리의 다른 글
Android 권한관리 (0) | 2018.10.14 |
---|---|
Android NDK (0) | 2014.11.24 |
Eclipse ADT 플러그인 없이 안드로이드 프로젝트 생성 & 빌드하기 (0) | 2014.10.08 |
Android MediaPlayer (0) | 2014.07.30 |
Fragment (0) | 2014.07.10 |