저는 여태까지 애플리케이션이 자바로만 가능하다고 생각해서 별로 관심이 없었는데..
이제보니까 안드로이드 개발을 위해 두가지의 방법이 있더라구요!
첫번째로 SDK !
SDK는 Software Delvelopment Kit의 약자입니다.
일반적으로 안드로이드 애플리케이션을 개발할 때에는 자바를 통해서 SDK로 개발을 하는것이 보통이죠!
두번째로 NDK !
NDK는 Native Development Kit의 약자입니다.
Native라는 말 그대로 C/C++을 사용할 수 있죠!
NDK는 하드웨어를 직접 조작하거나 이전에 만들었던 코드를 이식하고 싶을 때, 특별한 목적이 있는 경우 많이 사용된다고 하네요! 특히 2D/3D 개발을 할때 많이 사용하는 것 같습니다! (SDK에서도 OpenGL ES를 어느정도 사용가능한 것으로 알고 있습니다.)
역시 C/C++답게 약간의 성능향상도 기대할 수 있다고 합니다.
그리고 자바와 C/C++을 연결하기 위해서는 JNI가 필요합니다!
#include<jni.h>를 하고 아래처럼 적절하게 함수를 만들면 해당 함수를 SDK에서도 사용할 수 있게되는 것이죠!
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_sd_ndk_1practice_NDKPractice_getMyData(
JNIEnv *env, jobject) {
std::string hello = "SangDoLee";
return env->NewStringUTF(hello.c_str());
여기서 볼 수 있듯이, C/C++을 이용하여 만든 함수는 이름마저도 살짝 복잡하네요...
JNI를 이용해서 만든 함수명은
JNIEXPORT <함수타입> JNICALL Java_<패키지명>_<클래스명>_<함수명>
출처: http://lueseypid.tistory.com/229 [감성 개발자!]
위와 같은 양식을 따른다고 합니다!
마지막은 NDK를 이용해서 만든 저의 어플로!
코드는 Git으로 첨부한 뒤에 바로 링크를 올려드리겠습니다!
https://github.com/sangdo913/OpenGLESPractice/tree/master/NDKPractice1