안드로이드 개발 질문/답변
(글 수 45,052)
NDK가 어떤거고 왜 쓰는건지 명확하게 알려주실분 계신가요...
2010.10.28 14:13:38
원래 자바에는 JNI라는게 있습니다. 자바에서 C 라이브러리의 함수를 부를수있게 만든겁니다.
근데 JNI쓰는게 상당히 절차가 복잡합니다. 해보면 압니다 ㅡㅡㅋ
자바에서 C 라이브러리를 쓰는 이유는 아무래도 퍼포먼스와 관련이 깊습니다.
그리고 임베디드에서는 퍼포먼스는 PC에 비하면 상당히 큰 이슈로 다가오구요....
그래서 안드로이드에서 JNI를 쉽게 쓸수 있게 만든 툴이 NDK 입니다.
근데 JNI쓰는게 상당히 절차가 복잡합니다. 해보면 압니다 ㅡㅡㅋ
자바에서 C 라이브러리를 쓰는 이유는 아무래도 퍼포먼스와 관련이 깊습니다.
그리고 임베디드에서는 퍼포먼스는 PC에 비하면 상당히 큰 이슈로 다가오구요....
그래서 안드로이드에서 JNI를 쉽게 쓸수 있게 만든 툴이 NDK 입니다.
2010.10.28 14:20:34
NDK는 쉽습니다. 그냥 r4 받아서 적당히 압축풀고... (윈도우면 cygwin 써야 겠네요)
이클립스를 통해서 한방 빌드 하시려면....
일단 이클립스에 CDT 합쳐놓으시구요...
기존 플잭을 c플잭으로 convert 하시고 새 빌더를 추가하시는데
거기에 ndk-build를 실행할수 있게 설정하시면 됩니다.
되도록 플젝이름과 폴더이름은 일치하도록 맞춰주시구요...
(말은 쉬운데요.... 검색하고 하루정도 해보시면 금방됩니다. 하루는 버린다 생각하세요.)
이클립스를 통해서 한방 빌드 하시려면....
일단 이클립스에 CDT 합쳐놓으시구요...
기존 플잭을 c플잭으로 convert 하시고 새 빌더를 추가하시는데
거기에 ndk-build를 실행할수 있게 설정하시면 됩니다.
되도록 플젝이름과 폴더이름은 일치하도록 맞춰주시구요...
(말은 쉬운데요.... 검색하고 하루정도 해보시면 금방됩니다. 하루는 버린다 생각하세요.)
2010.10.28 14:24:17
NDK는 native development kit의 약자로, Java Native Interface를 환경 구축을 도와주는 package라고 생각하시면 됩니다.
SDK는 Standard development kit이고요. android의 SDK는 Java 언어를 따르고 있습니다.
3D구현을 위한 Open GL도 물론 SDK layer에서 제공하고 있지만, 기존 3D 기술을 C++ 또는 C언어로 구축해 놓은 상태라면, 굳이 Java SDK를 이용해서 새로 포팅할 필요없이, NDK 를 이용해서, C++ 로 만든 기술을 사용할 수 있습니다.
사용 이유
1. 기존 C++로 만들어진 기술을 최소의 포팅으로 이용할 수 있다.(legacy app 제작 개발에 용이하다고도 함)
2. 속도가 java sdk로 짠 app 보다 빠르다. android 2.2의 JIT가 나온 이후로는 오히려 떨어지는 느낌이 들기도 하네요.
3. 제작한 app에 대한 보안성을 높일 수 있음. Java SDK로 짠 소스는 class로 컴파일되어, dex(dalvik byte code)로 만들어 지는데, 이 dex 바이너리를 역 컴파일하는 이파일이 undx.jar 등의 tool이 있습니다.
즉, 제작한 app의 소스를 거진 볼수 있습니다. 이때문에 기술 유출 위험을 방지하기 위하여, core logic을 ndk로 짜기도 합니다.
(물론, 이부분도 proguard tool을 이용하여, java source내의 class, method, variable등을 a, b, c 등의 이름으로 교체한 후 컴파일 되게금 할 수 있습니다. 즉 소스의 가독성을 엄청나게 어렵게 하는 기술을 이용하여 보안성을 강화할 수 있음. 나중에 버그 터지면 debuging이 힘듬. 릴리스 시에만 이용해야함)
4. cameara, sound등의 media driver에 접근 하는 용도로 이용되기도 함.
NDK로도 기본 package에 포함은 안되어 있지만, STL, wcsmbs(한글 변환) 등을 거진 이용할 수 있음으로, C++에 익숙한 분이 빠르게 안드로이드 개발로 app를 제작하기에 용이합니다.
더 많은 용도가 있지만, 이정도가 되겠네요.
SDK는 Standard development kit이고요. android의 SDK는 Java 언어를 따르고 있습니다.
3D구현을 위한 Open GL도 물론 SDK layer에서 제공하고 있지만, 기존 3D 기술을 C++ 또는 C언어로 구축해 놓은 상태라면, 굳이 Java SDK를 이용해서 새로 포팅할 필요없이, NDK 를 이용해서, C++ 로 만든 기술을 사용할 수 있습니다.
사용 이유
1. 기존 C++로 만들어진 기술을 최소의 포팅으로 이용할 수 있다.(legacy app 제작 개발에 용이하다고도 함)
2. 속도가 java sdk로 짠 app 보다 빠르다. android 2.2의 JIT가 나온 이후로는 오히려 떨어지는 느낌이 들기도 하네요.
3. 제작한 app에 대한 보안성을 높일 수 있음. Java SDK로 짠 소스는 class로 컴파일되어, dex(dalvik byte code)로 만들어 지는데, 이 dex 바이너리를 역 컴파일하는 이파일이 undx.jar 등의 tool이 있습니다.
즉, 제작한 app의 소스를 거진 볼수 있습니다. 이때문에 기술 유출 위험을 방지하기 위하여, core logic을 ndk로 짜기도 합니다.
(물론, 이부분도 proguard tool을 이용하여, java source내의 class, method, variable등을 a, b, c 등의 이름으로 교체한 후 컴파일 되게금 할 수 있습니다. 즉 소스의 가독성을 엄청나게 어렵게 하는 기술을 이용하여 보안성을 강화할 수 있음. 나중에 버그 터지면 debuging이 힘듬. 릴리스 시에만 이용해야함)
4. cameara, sound등의 media driver에 접근 하는 용도로 이용되기도 함.
NDK로도 기본 package에 포함은 안되어 있지만, STL, wcsmbs(한글 변환) 등을 거진 이용할 수 있음으로, C++에 익숙한 분이 빠르게 안드로이드 개발로 app를 제작하기에 용이합니다.
더 많은 용도가 있지만, 이정도가 되겠네요.