안드로이드 OS는 리눅스 기반의 환경에서 Dalvik/ART으로 하여금 앱이 동작하며, 따라서 리눅스에 대한 Native Code를 지원한다.

간단히 설명하자면, 리눅스 기반의 C/C++ 코드를 지원하며 안드로이드 NDK (Native Development Kit)를 이용하여 컴파일이 가능하다.

아래는 안드로이드 NDK를 받기 위한 경로이다.

 

안드로이드 NDK (Native Development Kit) : http://developer.android.com/ndk/downloads/index.html

 

다운받은 NDK를 압축 풀어보면, 아래와 같은 파일목록이 있는데, 이 중 ndk-build.cmd​를 이용하여 컴파일한다. 편의를 위해서는 환경변수를 등록하여 사용하는 것이 좋다.

 

 

안드로이드 기기에서 실행하기 위한 간단한 소스를 입력한 후 저장을 하자.

 

 

ndk-build.cmd를 이용하기 위해서는 해당 소스 파일이 jni ​디렉토리에 있어야 한다. 또한 Makefile을 만들어주어야 하는데 자세한 정보는 아래페이지에 설명되어 있으니 참고해서 사용하면 된다. 이번 포스팅에서는 간단하게 NDK를 이용한 안드로이드 환경에서의 Hello World 프로그램 작성이므로, 간단한 컴파일 방법까지만 설명한다.

 

Android.mk : http://developer.android.com/ndk/guides/android_mk.html

 

 

다음과 같이 Android.mk로 Makefile을 만들고 ndk-build를 실행하면 HelloWorld.c 파일이 컴파일 된 것을 확인할 수 있다.

 

 

컴파일된 바이너리 파일은 libs 디렉토리에서 확인할 수 있다.

 

 

실행을 위해 adb를 이용하여 안드로이드 기기의 /data/local/tmp 디렉토리에 push 한다.

 

 

안드로이드 USB 디버깅 모드 설정이 되어있지 않다면, 이전 포스팅에서 정리한 글을 참고하여 USB 디버깅 모드를 설정한다.

안드로이드 USB 디버깅 모드 설정 : http://blog.naver.com/programmist/220653236705

adb push를 이용하여 /data/local/tmp 디렉토리의 HelloWorld를 바로 실행하게 되면, 아래와 같이 실행 권한이 없기 때문에 실행이 되지 않는다.

 

 

chmod를 이용하여 실행 권한을 준다.

 

 

실행 권한을 주고 난 뒤, 해당 파일을 실행시키면 다음과 같이 정상적으로 HelloWorld가 뜨는 것을 확인할 수 있다.

 

 

다음과 같은 방법으로 일반적인 POSIX를 따르는 소스 코드는 NDK를 이용하여 구현이 가능하며, Linux에서 사용하는 많은 명령어들이 크로스 컴파일를 이용하여 공개되어 있다. 따라서, NDK에서 지원하지 않는 라이브러리가 있더라도 해당 라이브러리 소스 코드만 있다면 NDK를 이용하여 다양한 응용이 가능할 것이다.

 

+ Recent posts