2015년 4월 6일 월요일

02. 안드로이드 NDK의 이해

* 위 블로그는 스터디를 정리한 것이므로 참고용으로만 사용하시길 바랍니다.


    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에 필요한 도구 모음


댓글 없음:

댓글 쓰기