Notice
Recent Posts
Recent Comments
Dharma
[NDK] 빌드 환경에 관한 정리 본문
- 빠른 연산을 위해서 (아무래도 C/C++ 이 자바 보다 속도가 빠른것은 주지의 사실입니다)
- 수많은 Open Source 들이 아직도 C/C++ 로 되어 있기 때문에
일단 이 두개를 크게 들 수가 있겠습니다. 그렇다고 해서 윈도우 다루는 부분까지 전부 NDK 로 하는 것을 추천하지는 않습니다. 속도가 필요한 부분이나 위에서 언급된 오픈 소스로 만들어진 라이브러리를 응용하는 부분에 사용할 것을 추천합니다.
필수로 입력해야할 내용들입니다. -n 은 프로젝트의 이름 (위에서는 HelloNDK) -t 은 현재 자신의 개발 머신에 설치되어 있는 SDK 버젼의 id 입니다. -k 는 패키지 명입니다. (위에서는 com.comjuck) -a 는 Activity 의 이름입니다.
EDIT: ubuntu 에서 javah 사용시 classpath 를 명시해 줘야 하더군요.
javah -classpath <android-sdk-path>/platforms/android-20/android.jar:$PROJECT_PATH/bin/classes com.comjuck.MainActivity
Android 부분이 에러 없이 컴파일 된다고 해도 실제로 Native Code 부분이 없기 때문에 실행하면 에러가 발생합니다. 따라서 Native 부분을 작성해 주는 과정입니다. javah 명령을 이용해서 header 를 자동으로 생성해 주기로 합니다. javah 는 native 키워드가 붙은 부분에 대해서 자동으로 선언을 만들어 줍니다. (JNI 가 기본으로 제공해 주는 기능입니다)
그래서 생성된 파일(이름에 주목하면 package 명 + Class 명이 합쳐진 형태)을 $PROJECT_PATH/jni 디렉토리로 복사해줍니다.
Native 코드들이 위치하는 곳은 $PROJECT_PATH/jni 입니다.
LOCAL_PATH 는 ndk-build 가 실행될 때의 위치에 따라서 정보가 다르게 저장되긴 하지만 기본적으로 $PROJECT_ROOT/jni 을 지정하게 되어 있습니다.
include $(CLEAR_VARS) 는 LOCAL_PATH 를 제외한 모든 LOCAL_ 로 시작되는 변수들이 초기화 됩니다. 왜 필요한가 의문을 가질 수 있지만 여러개의 프로젝트를 컴파일할 때 꼭 필요한 명령입니다.
LOCAL_CFLAGS 는 추가해줄 컴파일 옵션에 관한 세팅입니다.
LOCAL_MODULE 은 만들고자 하는 모듈의 이름입니다.
LOCAL_LDLIBS 는 연결하고자 하는 링크옵션입니다.
LOCAL_SRC_FILES 는 컴파일 될 대상인 소스파일들의 리스트입니다. 여기에 나열만 해주는 것으로 알아서 처리가 됩니다.
include $(BUILD_SHARED_LIBRARY) 는 shared object (so 파일) 을 생성하기 위한 명령입니다. BUILD_STATIC_LIBRARY 는 static object (a 파일)을 만들어주기 위한 명령입니다.
를 이용하면 Device 에 인스톨 됩니다.
그래서 생성된 파일(이름에 주목하면 package 명 + Class 명이 합쳐진 형태)을 $PROJECT_PATH/jni 디렉토리로 복사해줍니다.
Native 코드들이 위치하는 곳은 $PROJECT_PATH/jni 입니다.
LOCAL_PATH 는 ndk-build 가 실행될 때의 위치에 따라서 정보가 다르게 저장되긴 하지만 기본적으로 $PROJECT_ROOT/jni 을 지정하게 되어 있습니다.
include $(CLEAR_VARS) 는 LOCAL_PATH 를 제외한 모든 LOCAL_ 로 시작되는 변수들이 초기화 됩니다. 왜 필요한가 의문을 가질 수 있지만 여러개의 프로젝트를 컴파일할 때 꼭 필요한 명령입니다.
LOCAL_CFLAGS 는 추가해줄 컴파일 옵션에 관한 세팅입니다.
LOCAL_MODULE 은 만들고자 하는 모듈의 이름입니다.
LOCAL_LDLIBS 는 연결하고자 하는 링크옵션입니다.
LOCAL_SRC_FILES 는 컴파일 될 대상인 소스파일들의 리스트입니다. 여기에 나열만 해주는 것으로 알아서 처리가 됩니다.
include $(BUILD_SHARED_LIBRARY) 는 shared object (so 파일) 을 생성하기 위한 명령입니다. BUILD_STATIC_LIBRARY 는 static object (a 파일)을 만들어주기 위한 명령입니다.
$ ant -e installd
를 이용하면 Device 에 인스톨 됩니다.