안드로이드에서는 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
Posted by No names
,