안드로이드에서 C, C++ 언어 및 다른 언어를 사용하기 위해선 NDK와 JNI의 개념을 알 필요가 있습니다.


 

NDK(Native Development Kit)란? 

 NDK란 네이티브 코드 언어를 사용할 수 있게 해주는 툴셋이다. 

 간단하게 말하자면 안드로이드 프로그래밍 중 C/C++ 언어를 사용할 필요가 있다면 NDK를 설치해야 한다.


 JNI(Java Native Interface)란? Java와 자바 이외의 언어들 간에 서로 호출할 수 있도록 인터페이스를 제공





JNI를 사용함에 있어서 각종 자잘한 오류들로 시간을 허비했지만..  해결했던 방법들을 소개해 드리면서 빠르게 적용할 수 있도록 설명해 보겠습니다.


이 포스트 후에 JNI에 대한 코딩 및 Build 적용 하는 포스트도 이어집니다. http://kylblog.tistory.com/15



안드로이드 스튜디오 2.1.1 ( 윈도우 기반) 환경에서 구동하였습니다.



1. 안드로이드 스튜디오에 NDK 설치



C , C++ 언어를 안드로이드 스튜디오에서 사용할 수 있는 환경을 만들어 주기 위해 NDK를 설치합니다.


안드로이드 내부에서 NDK를 설치 하시면 됩니다.

외부에서도 ZIP 파일로 설치할 수 있으니 안드로이드 홈페이지나 검색으로 쉽게 찾으실 수 있습니다.



참고로 사용한 Android studio 에서 제공한 NDK 사용법 

https://developer.android.com/studio/projects/add-native-code.html?hl=ko#link-gradle



SDK manager -> SDK Tools 에서 NDK를 설치






NDK를 설치 후 


File -> Project Structure 에서 NDK location을 확인 할 수 있다면 제대로 설치가 된 것입니다.


설정 되어 있지 않다면 ndk-bundle 파일을 찾아 경로를 설정 해주시면 됩니다.

(설치한 sdk 폴더 안에 생성되어 있을 것입니다)







2. JNI 헤더 파일 생성을 위한 External Tools 추가


JNI를 사용하기 위하여 c, c++ 소스파일 추가 뿐만 아니라 실행 될 수 있도록 헤더파일 생성이 중요합니다.


헤더파일 생성을 위해 cmd 창에서 javah 를 이용하는 방법도 있지만 복잡할 수도 있기에

클릭 한번으로 헤더파일을 쉽게 만들 수 있도록 툴을 만들어두겠습니다.

툴을 만들어둠으로써 쉽게 헤더파일을 생성할 수 있게 됩니다.


File - Setting - Tools- External Tools - Create Tool 메뉴로 들어가 아래 이미지와 같이 입력하시면 되며 Name, Description, Group을 어떤 것을 입력하시든 상관없습니다.





Tool settings 에 대한 자세한 설명


Program : jdk안에 있는 javah의 경로를 적어 주시면 됩니다.


Parameters : 아래의 설명을 보고 경로에 맞게 입력하시면 됩니다.


-d <프로젝트 jni 폴더 경로입력 ex)C:\Users\user\AndroidStudioProjects\MyApplication\app\src\main/jni> -classpath <내 안드로이드SDK안에 android.jar 파일 경로 입력 ex) E:\sdks\android-sdks\platforms\android-23\android.jar>;<프로젝트 java폴더 경로 입력 ex)C:\Users\user\AndroidStudioProjects\MyApplication\app\src\main\java> <.h파일 생성할 패키지,클래스명 입력 ex)com.example.user.myapplication.MainActivity>



Working directory : jni 폴더 경로를 입력해 주시면 됩니다. 저 경로에 jni 폴더를 생성하는 것이니 위의 Setting 대로 입력해 주시면 됩니다.



JNI 헤더 파일 생성을 위한 External Tools  추가하는 부분이 이해가 잘 가지 않는 다면 


JNI 코딩에 대한 포스트를 보시고 난 후에 다시 이 포스트로 돌아오셔도 됩니다.


다음은 JNI 코딩 및 Build 작업을 하는 포스트입니다.


http://kylblog.tistory.com/15




+ Recent posts