* 위 블로그는 스터디를 정리한 것이므로 참고용으로만 사용하시길 바랍니다.
1. 안드로이드 NDK란
- 안드로이드 네이티브 코드의 구성 요소를 포함하는 도구 모음
- 네이티브 코드는 C/C++ 또는 어셈블리어로 CPU가 바로 이해할 수 있는 코드를 말한다.
- 컴파일러와 툴체인(링커 포함), 헤더파일, 라이브러리 등으로 구성됨
- NDK는 SDK의 보조적인 역활을 한다
- 아쉽게도 네이티브코드로 만들더라도 성능이 대폭 향상되지 않는다.
- 실제로 최적화 되지 않는 네이티브 코드의 애플리케이션은 최적화된 자바 애플리케이션보다 실행시간이 더 걸릴수 있다.
- 애플리케이션의 성능을 향상하려면 최적화된 함수를 이용하거나 포인터 연산 등을 활용해야한다.
- 그리고 NEON과 같은 병렬 처리를 활용해야한다.
2. 안드로이드 NDK의 기능 (Reveision 9 기준)
- libc(C 라이브러리) 헤더
- C++ 지원을 위한 최소 집합 헤더
- limb(수학 라이브러리) 헤더
- JNI 인터페이스 헤더
- libz(Zlib 압축) 헤더
- liblog(안드로이드 로깅)헤더
- OpenGL ES 1.1 및 2.0 헤더
- OpenSL/ES 고유의 오디오 라이브러리
- libjnigraphics(픽셀 버퍼 액세스 헤더, 안드로이드 2.2 이상의경우)
- 안드로이드 네이티브 응용 프로그램 API들
3. JAVA와 NDK 애플리케이션의 실행차이
- 자바 애플리케이션에는 달빅 VM이 해석할 수 있는 바이트코드가 포함되어 있고, 이 바이트 코드는 달빅 VM을 통해 네이티브 코드로 변환되어 애플리케이션이 CPU에 의해 실행되도록한다.
- NDK에 의해서 만들어진 라이브러리는 애플리케이션 프레임워크와 달빅 VM을 거치지않고 실행된다. 이처럼 NDK는 프레임워크와 런타임을 거치지않고 실행되므로 애플리케이션 성능이 향상된다.
4. NDK구성
- GNUMakefile : 명령을 생성하는 유틸리티 makefile
- ndk-build : ndk 빌드 명령어
- ndk-gdb : 디버그 명령어
- build : 빌드에 사용되는 도구 모음
- doc : NDK에 관련된 문서 모음
- platforms : 버전에 따른 API 헤더, 라이브러리 모음. API 레벨에 따라 이용할 수 있는 기능이 다름 상위 API는 하위 API의 기능을포함
- samples : 예제프로그램 모음
- source : 자바 응용 프로그램 소스 코드
- tests : 테스트 코드
- toolcains : Cross compile에 필요한 도구 모음
댓글 없음:
댓글 쓰기