본문 바로가기
리뷰/Book

[리뷰] 안드로이드의 모든 것 NDK : C/C++ 라이브러리를 이용한 안드로이드 앱 개발 방법

by dongglessam 2013. 1. 21.
728x90
반응형
728x170

 

 

어느덧 한빛리더스 5기 마지막 미션입니다.

마지막 미션 도서로 선택한 것은 최근 관심을 가지기 시작한 안드로이드 NDK 개발과 관련하여 시중에 몇 없는 도서중 하나인 [안드로이드의 모든 것 NDK] 입니다.

 

보라, 저 안드로봇의 당당한 자태를 <-

 

 

1. 책소개

앱의 기본 개념부터 설명한 친절한 NDK 집필서 

자바로 안드로이드 앱을 개발하다가 네이티브 기능을 활용하려고 했지만, 무엇부터 해야 할지 몰랐던 개발자에게 꼭 필요한 책이다. 실제 NDK로 프로젝트를 하는 개발자와 수 차례 개발자를 대상으로 강의를 한 강사가 함께 개발자를 위해 가장 쉬운 언어로 풀어서 NDK를 설명했다. 처음 안드로이드를 접하는 독자라면 부록의 '안드로이드란 무엇인가'를 선행 학습하고, NDK부터 궁금한 독자는 0장부터 정주행을, NDK의 활용이 궁금한 독자라면 몇 개장을 건너 뛰고 뒷 부분을 학습하면 된다. 

『안드로이드의 모든 것 NDK』 온라인 질답 게시판 운영
책을 읽다가 막히거나 궁금한 부분이 있다면 주저하지 말고 질문하자. 친절한 저자들이 직접 설명해준다. 
QA 게시판: http://www.aesop.or.kr/Board_Community_Book 

어떤 독자를 위한 책인가?

  • 안드로이드 앱 개발에 네이티브 라이브러리 기능을 추가하려는 개발자
  • 자바와 안드로이드 프레임워크 연동이 궁금한 개발자
  • 안드로이드를 공부하려는 학생
책 소개 

이 책에서는 단지 안드로이드 NDK로 개발한 동적 로딩 라이브러리를 자바 애플리케이션에서 호출하여 사용하는 방법에 그치지 않고, NDK에 포함되지 않은 안드로이드 프레임워크의 리소스를 사용하는 방법도 다루고 있으며 실제 안드로이드의 프레임워크가 작동하는 방식과 유사한 서비스를 만들면서 커널 드라이버까지 접근하여 하드웨어 조작까지 할 수 있도록 설명한다. 

『안드로이드의 모든 것 분석과 포팅』(2011) 집필진의 두 번째 책
전작 『안드로이드의 모든 것 분석과 포팅』이 안드로이드 운영체제를 배운 후 사운드, 카메라, GPS 등을 철저히 분석하고 포팅을 다루는 책이라면 『안드로이드의 모든 것 NDK』는 자바로 안드로이드 애플리케이션을 작성하다가 막히는 독자에게 잘 알려지지 않은 저자의 노하우를 친절하게 알려준다. 마법 같은 NDK로 안드로이드의 네이티브 라이브러리를 활용해보자.


 

2. 목차

CHAPTER 00 들어가며 

CHAPTER 01 안드로이드 NDK는 무엇인가?
  1.1 안드로이드 NDK의 등장 배경
  1.2 NDK에서 제공되는 것 
  1.3 개발 환경
    1.3.1 JDK 설치 
    1.3.2 안드로이드 SDK 설치 
    1.3.3 이클립스와 ADT 플러그인 설정
    1.3.4 NDK 개발 환경 설정
    1.3.5 PDK 설정 
  1.4 안드로이드 개발 방법 
    1.4.1 SDK를 이용한 개발 방법
    1.4.2 NDK를 이용한 개발 방법
    1.4.3 PDK를 이용한 개발 방법 소개 및 동작 구조 
    1.4.4 Android Debug Bridge 

CHAPTER 02 NDK 개발을 위한 안드로이드 애플리케이션 기초 쌓기
  2.1 안드로이드 애플리케이션의 구조 
  2.2 안드로이드 애플리케이션 구성 요소 
    2.2.1 액티비티 
    2.2.2 서비스 
    2.2.3 BroadcastReceiver 
    2.2.4 ContentProvider
    2.2.5 인텐트 
  2.3 안드로이드 애플리케이션의 라이프 사이클 
    2.3.1 액티비티 라이프 사이클 
    2.3.2 서비스 라이프 사이클 
    2.3.3 BroadcastReceiver 라이프 사이클
  2.4 안드로이드 애플리케이션의 퍼미션 

CHAPTER 03 본격 NDK 개발!
  3.1 네이티브 라이브러리 개발을 위해 알아야 할 것 
  3.2 JNI 
    3.2.1 JNA
    3.2.2 SWIG 
    3.2.3 JNI 
  3.3 JNI 구현 순서
  3.4 자바에서 네이티브 코드 호출하기 
  3.5 네이티브 코드에서 자바로 접근하기 
  3.6 x86에서 JNI 연습
  3.7 안드로이드 Makefile
    3.7.1 Android.mk 분석
    3.7.2 Application.mk 분석 
  3.8 C와 C++에서 JNI 구현 시 차이점 
  3.9 SDK, NDK, PDK 로그 출력 
    3.9.1 SDK 로그 출력 
    3.9.2 NDK 로그 출력 
    3.9.3 PDK 로그 출력 
  3.10 예제1: 더하기 프로그램
    3.10.1 안드로이드 새 프로젝트 생성하기 
    3.10.2 자바 애플리케이션의 기본 레이아웃 변경하기 
    3.10.3 자바 코드 수정하기 
    3.10.4 JNI 규약에 맞는 라이브러리 생성하기
    3.10.5 .c 파일을 만들고 컴파일하기 
  3.11 예제2: 외부 라이브러리 활용하기
  3.12 라이브러리 의존성 문제 
  3.13 JNI_OnLoad 
  3.14 한글 처리 
  3.15 자바와 NDK의 속도 차이 
  3.16 네이티브 스레드로 자바 콜백 만들기 
  3.17 안드로이드 디버깅 
    3.17.1 addr2line
    3.17.2 gdb를 이용한 디버깅 
    3.17.3 프로파일링

CHAPTER 04 NDK에서의 그래픽 처리
  4.1 bitmap-plasma 
  4.2 NDK 3D 
    4.2.1 자바 애플리케이션에서의 OpenGL ES 사용 
    4.2.2 NDK에서의 OpenGL ES 1.x
  4.3 SDL 포팅 
    4.3.1 SDL이란 무엇인가? 
    4.3.2 안드로이드 자바와 SDL의 연결 
    4.3.3 SDL 활용
  4.4 Native Activity 
    4.4.1 프레임워크 내부와 연결점
    4.4.2 Native Activity를 만들어 보자 
  4.5 STL과 Neon의 사용 
    4.5.1 STL 
    4.5.2 NEON 

CHAPTER 05 NDK의 확장
  5.1 플랫폼 안에서 사용되는 네이티브 라이브러리 
  5.2 NDK용 Android.mk와 전체 소스용 Android.mk의 차이점 
  5.3 skia 라이브러리로 애플리케이션 만들기 
  5.4 안드로이드 전체 소스 컴파일 방법 
  5.5 자바 애플리케이션에서 GPIO 컨트롤하기 

CHAPTER 06 멀티미디어
  6.1 안드로이드 네이티브 AudioFlinger 활용과 OpenSL ES
  6.1.1 네이티브 AudioFlinger 제어 
  6.1.2 OpenSL ES 
  6.2 네이티브에서 Surface 접근하기 
    6.2.1 안드로이드처럼 직접 Surface를 사용하려면 어떻게 해야 할까? 
    6.2.2 테스트용 애플리케이션
  6.3 OpenMAX AL 
    6.3.1 OpenMAX AL 개요 
    6.3.2 동작 구조 
    6.3.3 안드로이드 OpenMAX AL 
    6.3.4 OpenMAX AL 예제 
  6.4 안드로이드에서 FFmpeg 활용
    6.4.1 안드로이드 멀티미디어 구조
    6.4.2 안드로이드 프레임워크에서의 멀티미디어
    6.4.3 안드로이드 애플리케이션 계층에서의 멀티미디어 
    6.4.4 FFmpeg 개요
    6.4.5 FFmpeg의 구성
    6.4.6 안드로이드 FFmpeg 

APPENDIX 안드로이드는 무엇인가?
  A.1 안드로이드의 개념 
  A.2 안드로이드 역사 
  A.3 안드로이드 특징 
  A.4 안드로이드 라이선스와 오픈 소스 라이선스 
    A.4.1 Dalvik VM 
  A.5 안드로이드 시스템 구조
  A.6 우분투와 VirtualBox로 NDK 개발 환경 설정하기 
 

3. 리뷰

안드로이드 SDK를 통해 개발을 하다보면 한계에 부딛치거나 기능적으로 제약이 발생하는 경우가 있다. 리눅스를 기반으로 하는 안드로이드이기 때문에 네이티브 언어를 통한 개발이 가능한데, 이에 대한 환경을 제공해 주는 것이 NDK이다. (자세한 설명은 구글링을 조금만 해보면 나오기 때문에 패스)

쉽게 이야기한다면, SDK는 자바를 기반으로 한 개발환경이고 NDK는 C/C++을 기반으로 한 개발환경이라고 생각하면 된다. 초보 개발자에게는 매우 복잡한 일이 되는데, SDK는 자바만 할줄 알면 어플리케이션 개발에 별다른 문제가 없지만 게임이나 장치 연동 등에 NDK가 필요한 경우(실제 게임같은 경우에는 속도와 성능 측면에서 SDK로 개발하는 일이 별로 없는 것으로 알고있다) C/C++까지 사용해야 하는 경우가 발생할 수도 있다.

이러한 측면에서 이 책은 NDK 개발이 필요한 개발자에게 좋은 책이 될 것이다. 리눅스를 설치해야 하는 번거로운 부분이 존재하지만, 설치부터 NDK 개발, 그래픽 처리, 멀티미디어 처리 등 다양한 부분에 대해 자세하게 설명이 되어있다. 또한 이해를 돕기 위해 많은 분량의 소스코드를 첨부하여 어느정도 프로그래밍에 대해 이해하고 있다면 충분히 도움이 될 것이라 생각한다. 전반적으로 깔끔한 레이아웃과 가독성 높은 글씨체의 사용으로 눈에 잘 들어오며, 코드를 보고 머리가 어지럽지 않다면 크게 무리는 없을 것이다. (수록된 예제들의 충실함이 이를 말해주고 있다)

하지만 아무래도 C/C++과 자바 설명이 함께 들어가있기 때문에 기초 지식이 없다면 다소 어려울 수 있다. 독자의 이해를 돕기 위해 순서도와 그림으로 최대한 풀어서 설명하고 있는 것은 장점이지만, NDK라는 것 자체가 생소할 수 있기 때문에 독자의 기초 지식이 어느정도 요구되야 할 것 같다. 나의 경우에는 C와 자바 초급 수준이기 때문에 생각했던 것보다는 이해하는데 다소 난이도가 있었지만, 개발 경험이 있다면 충분히 이해하리라 믿는다.

NDK에 대해 좀더 자세히 공부하고 싶거나, NDK를 통해 안드로이드 어플리케이션을 개발하고자 하는 개발자라면 읽어보는 것을 추천하고 싶다.

728x90
반응형
그리드형

댓글