HOME > 상세정보

상세정보

안드로이드 NDK 프로그래밍 : JNI와 C/C++ 라이브러리를 활용한 네이티브 안드로이드 애플리케이션 (7회 대출)

자료유형
단행본
개인저자
Ratabouil, Sylvain Grutzmacher, Frank, 기술감수 Mitchell, Robert, 기술감수 허윤규, 역
서명 / 저자사항
안드로이드 NDK 프로그래밍 : JNI와 C/C++ 라이브러리를 활용한 네이티브 안드로이드 애플리케이션 / 실뱅 라타부이 지음 ; 허윤규 옮김
발행사항
의왕 :   에이콘,   2012  
형태사항
541 p. : 삽화 ; 24 cm
총서사항
acorn+PACKT technical book 시리즈
원표제
Android NDK Beginner's Guide
ISBN
9788960773462 9788960772106 (set)
일반주기
색인수록: p. 525-541  
기술감수자: 프랭크 그루츠마허, 로버트 미첼  
비통제주제어
안드로이드 , NDK , 프로그래밍 , 애플리케이션 ,,
000 01127camcc2200325 c 4500
001 000045726388
005 20121121142656
007 ta
008 121005s2012 ggka 001c kor
020 ▼a 9788960773462 ▼g 94560 : ▼c \35000
020 1 ▼a 9788960772106 (set)
035 ▼a (KERIS)BIB000012938644
040 ▼a 222001 ▼c 222001 ▼d 244002
082 0 4 ▼a 005.268 ▼2 23
085 ▼a 005.268 ▼2 DDCK
090 ▼a 005.268 ▼b 2012z19
100 1 ▼a Ratabouil, Sylvain
245 1 0 ▼a 안드로이드 NDK 프로그래밍 : ▼b JNI와 C/C++ 라이브러리를 활용한 네이티브 안드로이드 애플리케이션 / ▼d 실뱅 라타부이 지음 ; ▼e 허윤규 옮김
246 1 9 ▼a Android NDK Beginner's Guide
260 ▼a 의왕 : ▼b 에이콘, ▼c 2012
300 ▼a 541 p. : ▼b 삽화 ; ▼c 24 cm
490 0 0 ▼a acorn+PACKT technical book 시리즈
500 ▼a 색인수록: p. 525-541
500 ▼a 기술감수자: 프랭크 그루츠마허, 로버트 미첼
653 ▼a 안드로이드 ▼a NDK ▼a 프로그래밍 ▼a 애플리케이션
700 1 ▼a Grutzmacher, Frank, ▼e 기술감수
700 1 ▼a Mitchell, Robert, ▼e 기술감수
700 1 ▼a 허윤규, ▼e
900 1 ▼a 라타부이, 실뱅, ▼e

소장정보

No. 소장처 청구기호 등록번호 도서상태 반납예정일 예약 서비스
No. 1 소장처 세종학술정보원/과학기술실/ 청구기호 005.268 2012z19 등록번호 151312853 도서상태 대출가능 반납예정일 예약 서비스 C

컨텐츠정보

책소개

C/C++로 작성된 라이브러리를 사용해야 한다거나, 성능 향상을 목적으로 C/C++로 특정 모듈을 개발해야 한다면 필수적으로 JNI를 사용해야 한다. 안드로이드 NDK는 JNI를 쉽고 빠르게 사용할 수 있게 제공되는 도구다. 이 책에서는 NDK를 이용해 기존 C/C++ 라이브러리를 활용하는 방법, 애플리케이션에 2D/3D 그래픽과 사운드를 넣는 방법, 안드로이드 입력과 센서를 관리하는 방법, 네이티브 애플리케이션을 디버깅하고 문제를 해결하는 방법 등을 다뤄 애플리케이션의 성능을 향상시킬 수 있게 해준다.

안드로이드의 네이티브 세계를 발견하고 애플리케이션에 C/C++의 강력함을 더한다!

안드로이드 NDK는 앱의 성능을 개선하기 위해 탄생했다. 고성능 코드와 이식성 있는 코드를 사용해 모바일 기기의 최대 성능을 발휘한다.

이 책은 C/C++가 적용된 애플리케이션을 생성하고 자바로 통합하기 위한 방법을 설명한다. 네이티브 API에 접근하는 방법과 가장 성공적인 안드로이드 애플리케이션에 사용된 라이브러리를 포팅하기 위한 방법을 배운다.

실용적인 단계별 예제와 중요한 내용, 기법 등을 통해 자바 애플리케이션이나 독립 애플리케이션에 추가된 C++ 코드를 구동하기 위한 방법을 살펴본다.


★ 이 책에서 다루는 내용 ★

■ 자신만의 첫 번째 안드로이드 네이티브 프로젝트 생성
■ 자바 네이티브 인터페이스를 이용해 자바와 통신
■ OpenGL ES를 이용한 2D/3D 그래픽 디스플레이
■ OpenSL ES를 이용한 사운드와 음악 재생
■ 안드로이드 입력과 센서 관리
■ 네이티브 애플리케이션을 디버깅하고 문제 해결
■ 기존 C/C++ 코드를 안드로이드로 포팅
■ 애플리케이션에 그래픽과 사운드, 센서, 물리 통합


★ 이 책의 대상 독자 ★

더욱 강력한 성능을 필요로 하는 안드로이드 자바 프로그래머인가? 자바에 대해 잘 모르거나 가비지 컬렉터(garbage collector)에 신경 쓰지 않는 C/C++ 개발자인가? 고성능의 멀티미디어 애플리케이션이나 게임을 개발하고자 하는가? 이 질문 중 어느 하나라도 해당된다면 기본적인 C/C++ 지식을 활용해 네이티브 안드로이드 개발의 세계로 뛰어드는 데 이 책을 유용하게 활용할 수 있다.


★ 이 책의 구성 ★

1장, '개발 환경 설정'에서는 안드로이드 NDK 애플리케이션을 개발하는 데 필요한 도구들을 소개하고, 개발 환경과 안드로이드 기기 연결, 안드로이드 에뮬레이터의 설정 방법을 살펴본다.

2장, '네이티브 프로젝트 생성, 컴파일, 배포'에서는 NDK 예제 컴파일과 패키지화, 배포에 대해 살펴보고, 이클립스와 NDK로 첫 번째 자바/C 하이브리드(hybrid) 프로젝트를 생성한다.

3장, 'JNI를 이용한 자바와 C/C++ 인터페이스'에서는 자바 네이티브 인터페이스(JNI)를 사용해 자바, C/C++ 간 통합과 통신 과정을 살펴본다.

4장, '네이티브 코드에서 자바 콜백 호출'에서는 양방향(bidirectional) 통신을 통해 네이티브에서 그래픽 비트맵을 처리한 후 C에서 자바를 호출하는 과정을 살펴본다.


5장, '완전한 네이티브 애플리케이션 작성'에서는 안드로이드 NDK 애플리케이션의 생명주기를 살펴보고, 자바 없는 완전한 네이티브 애플리케이션을 작성해본다.

6장, 'OpenGL ES로 그래픽 렌더링'에서는 OpenGL ES를 이용해 고급 2D/3D 그래픽을 최고의 성능으로 그리는 방법을 소개한다. 디스플레이 초기화, 텍스처(texture) 불러오기, 스프라이트(sprite) 그리기, 버텍스(vertex)와 메시(mesh)를 표시할 인덱스 버퍼 할당 등의 내용을 다룬다.

7장, 'OpenSL ES로 사운드 재생'에서는 안드로이드 NDK에서만 제공하는 특별한 기능인 OpenSL ES를 이용해 네이티브 애플리케이션에 음악 차원(dimension)을 추가하는 방법과 사운드 녹음 후 스피커로 재생하는 방법을 다룬다.

8장, '입력 기기와 센서 처리'에서는 안드로이드 기기와 멀티터치 화면 간 상호작용을 살펴본다. 네이티브 애플리케이션으로 키보드 이벤트를 처리하고, 센서 제어 방법을 확인한 후 기기를 게임 컨트롤러로 활용할 수 있는 방법을 살펴본다.

9장, '안드로이드에 기존 라이브러리 포팅'에서는 필수적인 C/C++ 프레임워크(STL과 Boost)를 컴파일하고, 예외 처리와 RTTI(RunTime Type Information, 런타임 동안 해당 타입에 대한 정보 확인을 위해 사용)를 활성화시키는 방법을 살펴본다. Irrlicht 3D 엔진과 Box2D 물리 엔진 같은 라이브러리나 서드파티 라이브러리를 안드로이드로 포팅하는 방법도 살펴본다.

10장, '전문 게임 개발'에서는 Irrlicht와 Box2D를 사용해 터치스크린과 센서를 제어하는 3D 게임을 개발한다.

11장, '디버깅과 문제 해결'에서는 NDK 디버그 유틸리티를 이용해 실행 애플리케이션의 상세 분석 과정과 애플리케이션의 크래시 덤프(crash dump)를 분석하고, 성능을 측정해본다.


★ 저자 서문 ★

짧은 컴퓨팅 역사에서 우리는 거대한 메인프레임을 시작으로 개인 컴퓨터의 대중화와 네트워크 상호 연결에 이르기까지 기술의 사용을 완전히 바꿔 놓은 주요 사건을 지켜봤다. 이동성(mobility)은 차세대 혁명이다. 유비쿼터스(ubiquitous) 네트워크와 새로운 사회, 전문가, 제조업체, 강력한 기술 등 모든 구성요소가 마련됐다. 눈앞에 새로운 혁명의 시기가 도래하고 있다. 그것이 두려움이든 새로운 기회이든 이미 우리 곁에 와있다.

모바일 도전

오늘날의 모바일 기기는 휴대폰을 시작으로 최근 몇 년 사이에 급격히 발전한 새로운 초소형, 최첨단 제품이다. 기술적 시간 척도(scale)는 인간의 시간 척도와는 분명히 다르다.
음악 플레이어가 보편화된 시기에 애플과 스티브 잡스는 최적의 하드웨어와 최적의 소프트웨어를 최적의 시기에 내놓으면서 고객의 요구를 만족시키는 동시에 새로운 변화를 만들었다. 지금 iOS와 윈도우 모바일, 블랙베리, 웹OS(WebOS), 안드로이드 플랫폼 사이의 균형을 찾는 새로운 생태계에 직면해있다. 이 새로운 시장에 대한 욕망은 구글을 자극하기에 충분했다. 이 거대한 인터넷 시장에서 안드로이드는 확고히 자리매김한 아이폰과 아이패드의 대항마로 주목받고 있으며, 빠른 속도로 시장 점유율을 높이고 있다.

이러한 현대판 보물섬에서 새로운 사용 또는 기술 용어, 애플리케이션(안드로이드에 익숙하다면 액티비티로 이해하자)은 여전히 고안돼야 한다. 바로 이것이 모바일 도전이다. 수많은 모바일 기기 제조사가 지원하는 오픈소스 운영체제인 안드로이드 세계에서 숨겨진 완벽한 장소를 찾아야 한다.

기술적 관점에서 하드웨어 이식성(Portability)과 모바일 기기의 한정된 자원에 대한 활용성(adaptability)은 가장 필수적인 모바일 도전이다. 안드로이드에서는 누구나 멀티 화면 해상도와 다양한 CPU, GPU 속도/기능, 메모리 제약 등을 처리해야 한다. 리눅스 기반 시스템(즉, 안드로이드)에 국한된 내용은 아니지만, 특별히 유의해야 한다.

구글 엔지니어는 이식성을 높이기 위해 가상 머신을 완전한 프레임워크(안드로이드 SDK) 형태로 제공해 오늘날 가장 널리 알려진 프로그래밍 언어 중의 하나인 자바 프로그램 구동을 가능하게 했다. 자바는 주로 안드로이드 프레임워크에서 사용돼 강력한 장점을 발휘한다. 기본적으로 안드로이드에서는 자바만을 지원하는 반면, 애플의 오브젝티브C로 작성한 예제는 C/C++에서도 사용할 수 있다. 또한 자바 가상 머신은 JIT 컴파일 옵션을 활성화하더라도 모바일 기기의 최대 성능을 뽑아내는 데 충분한 기능을 제공하지 않는다. 모바일 기기의 한정된 자원은 최고의 만족감을 제공할 수 있게 신중히 분배돼야 한다. 안드로이드 네이티브 개발 킷(NDK, Native Development Kit)은 바로 이런 목적을 위해 탄생했다.


★ 옮긴이의 말 ★

정확히 10년 전 국내 모 은행을 대상으로 인터넷 뱅킹 통합 프로젝트를 진행 중이었다. CORBA를 통해 기존 소켓 통신 모듈을 대체하는 프로젝트였고, 당시 내게는 생소한 과제가 주어졌다. 당시 자바 언어로 개발하던 상황에서 불가피하게 C++ 라이브러리를 재사용해야 하는 요구 사항이 들어왔다. 그것이 가능할지 의구심을 갖고 찾아봤던 내용이 바로 JNI였고, JNI를 통해 성공적으로 과제를 마칠 수 있었다. 이후 아이폰과 안드로이드가 태동하기 이전, 즉 윈도우 모바일 환경에서 디바이스 드라이버를 개발할 당시만 하더라도 JNI는 한때 도움을 주었던 그리고 추억으로 남아있는 녀석에 불과했지만, 안드로이드 과제를 수행하게 돼 공부하는 과정에서 다시 만난 자바와 JNI는 안드로이드에서 없어서는 안 될 요소로 이미 자리 잡고 있었다.

과거와 현재의 경험이 일치하는 시점에서 이 책의 번역을 맡게 됐을 때의 느낌은 사뭇 흥미로웠다. 마치 오랫동안 연락하지 못한 누군가를 다시 만나 그때 추억을 돌이켜보는 느낌이랄까?

이 책은 구글에서 제공하는 NDK를 통해 JNI를 사용하는 방법과 주의 사항, 팁 등을 소개한다. JNI를 사용해야 하고 그 방법에 대해 알고 싶다면 이 책을 추천한다. 다양한 예제를 하나씩 진행하다 보면 어느덧 JNI가 친숙하게 다가올 것을 확신한다.


정보제공 : Aladin

저자소개

실뱅 라타부이(지은이)

C++와 자바를 경험한 IT 전문 컨설턴트다. 우주 산업에 종사했으며, 디지털 혁명에 참여하는 발텍 테크놀로지스(Valtech Technologies)에서 항공 프로젝트를 수행했다. 프랑스 툴루즈의 폴 사바티에(Paul Sabatier) 대학에서 학위를 받았으며, 리버풀 대학에서 컴퓨터과학 석사학위를 받았다. 기술을 사랑하는 사람으로서 모바일 기술에 열정적이며, 안드로이드 스마트폰 없는 삶을 꿈꾸기 힘들다고 한다.

허윤규(옮긴이)

분산 처리와 대용량 데이터베이스에 관심이 있으며, CORBA와 웹서비스 관련 프로젝트와 다수의 프로젝트 경험이 있다. 현재 삼성전자에서 모바일 서비스를 개발 중이며, 저서로는 『MS SQL Server 2000 for Beginner』, 번역서로는 『Beginning ASP.NET using VB.NET』, 『안드로이드 NDK 프로그래밍』이 있다.

정보제공 : Aladin

목차

목차 
저자 소개 = 6
기술 감수자 소개 = 7
옮긴이 소개 = 8
옮긴이의 말 = 9
들어가며 = 17
1 개발 환경 설정 = 25
 안드로이드 개발 시작 = 26
 윈도우 설정 = 27
  실습 예제|안드로이드 개발용 윈도우 환경 준비 = 27
 윈도우에 안드로이드 개발 킷 설치 = 32
  실습 예제|윈도우에 안드로이드 SDK/NDK 설치 = 32
 맥OS X 설정 = 38
  실습 예제|맥OS로 안드로이드 개발 준비 = 39
 맥OS X에서 안드로이드 개발 킷 설치 = 41
  실습 예제|맥OS X에서 안드로이드 SDK와 NDK 설치 = 41
 리눅스 설정 = 43
  실습 예제|안드로이드 개발을 위한 우분투 리눅스 준비 = 43
 리눅스에 안드로이드 개발 킷 설치 = 49
  실습 예제|우분투에 안드로이드 SDK/NDK 설치 = 49
 이클립스 개발 환경 설정 = 51
  실습 예제|이클립스 시작 = 51
 안드로이드 에뮬레이트 = 55
  실습 예제|안드로이드 가상 장치 생성 = 55
 윈도우와 맥OS X에서 안드로이드 기기 개발 = 60
  실습 예제|윈도우와 맥OS X에서 안드로이드 기기 설정 = 60
 리눅스에서 안드로이드 기기 개발  = 62
  실습 예제|우분투에서 안드로이드 기기 설정 = 62
 개발 기기 문제 해결 = 66
 정리 = 67
2 네이티브 프로젝트 생성, 컴파일, 배포 = 69
 NDK 예제 애플리케이션 컴파일과 배포 = 70
  실습 예제|hellojni 예제 컴파일과 배포 = 70
 안드로이드 SDK 도구 = 76
  안드로이드 디버그 브리지 = 76
  프로젝트 설정 도구 = 79
 이클립스로 첫 번째 안드로이드 프로젝트 생성 = 82
  실습 예제|자바 프로젝트 초기화 = 83
  달빅 소개 = 86
 자바와 C/C++간 인터페이스 = 87
  실습 예제|자바에서 C 코드 호출 = 87
  Makefile = 92
 이클립스에서 네이티브 코드 컴파일 = 95
  실습 예제|하이브리드 자바/C/C++프로젝트 작성 = 95
 정리 = 100
3 JNI를 이용한 자바와 C/C++인터페이스 = 101
 자바 기본 데이터 타입 = 102
  실습 예제|네이티브 키/값 저장소 빌드 = 103
 네이티브 코드에서 자바 객체 참조 = 116
  실습 예제|Store 내의 객체 레퍼런스 저장 = 117 
  지역 레퍼런스와 전역 레퍼런스 = 122
 네이티브 코드에서 예외 전달 = 124
  실습 예제|Store에서 예외 발생시키기 = 125
  C++에서의 JNI = 130
 자바 배열 처리 = 130
  실습 예제|Store에서 객체 레퍼런스 저장 = 131
  JNI 예외 확인 = 142
 정리 = 144
4 네이티브 코드에서 자바 콜백 호출 = 145
 자바와 네이티브 스레드 동기화 = 146
  실습 예제|백그라운드 스레드 실행 = 147
  스레드 연결과 분리 = 159
  자바와 네이티브 코드 생명주기 = 160
 네이티브 코드에서 자바 콜백 호출 = 161
  실습 예제|네이티브 스레드에서 자바 코드 호출 = 162
  콜백 = 176
  JNI 메소드 정의 = 177
 네이티브에서 비트맵 처리 = 178
  실습 예제|네이티브 코드에서 카메라 피드 디코딩 = 179
 정리 = 191
5 완전한 네이티브 애플리케이션 작성 = 193
 네이티브 액티비티 작성 = 194
  실습 예제|기본적인 네이티브 액티비티 생성 = 194
 액티비티 이벤트 처리 = 203
  실습 예제|액티비티 이벤트 처리 = 203
  네이티브 앱 glue = 217
  UI 스레드 = 218
  네이티브 스레드 = 219
  Android_app 구조체 = 221
 네이티브에서 윈도우와 시간에 접근 = 223
  실습 예제|그래픽 디스플레이와 타이머 구현 = 224
  시간 기본형 = 235
 정리 = 235
6 OpenGL ES로 그래픽 렌더링 = 237
 OpenGL ES 초기화 = 238
  실습 예제|OpenGL ES 초기화 = 239
 애셋 관리자로 PNG 텍스처 읽기 = 250
  실습 예제|OpenGL ES에서 텍스처 로딩 = 251
 스프라이트 그리기 = 269
  실습 예제|우주선 스프라이트 그리기 = 270
 버텍스 버퍼 객체를 이용해 타일 맵 렌더링 = 283
  실습 예제|타일 기반의 배경 화면 그리기 = 284
 정리 = 305
7 OpenSL ES로 사운드 재생 = 307
 OpenSL ES 초기화 = 309
  실습 예제|OpenSL ES 엔진과 출력 생성 = 310
  OpenSL ES 철학 = 318
 음악 파일 재생 = 319 
  실습 예제|배경 음악 재생 = 320
 사운드 재생 = 328
  실습 예제|사운드 버퍼 큐 생성과 재생 = 329
  이벤트 콜백 = 341
 사운드 녹음 = 343
 정리 = 348
8 입력 기기와 센서 처리 = 351
 안드로이드와의 상호작용 = 353
  실습 예제|터치 이벤트 처리 = 354
 키보드와 D패드, 트랙볼 이벤트 탐지 = 369
  실습 예제|네이티브에서 키보드와 D패드, 트랙볼 처리 = 371
 기기 센서 검증 = 382
  실습 예제|기기를 조이패드로 변경 = 384
 정리 = 401
9 안드로이드에 기존 라이브러리 포팅 = 403
 표준 템플릿 라이브러리를 이용한 개발 = 404
  실습 예제|DroidBlaster에 GNU STL 추가 = 405
  정적과 공유 = 417
  STL 성능 = 418
 안드로이드에서 부스트 컴파일 = 419
  실습 예제|DroidBlaster에 부스트 포함 = 420
 안드로이드에 서드파티 라이브러리 포팅 = 433
  실습 예제|NDK를 이용해 Box2D와 Irrlicht 컴파일 = 434
  GCC 최적화 레벨 = 443
 Makefile 마스터 = 444
  Makefile 변수 = 444
  Makefile 명령 = 446
 정리 = 450
10 전문 게임 개발 = 451
 Box2D를 이용한 물리 시뮬레이션 = 452
  실습 예제|Box2D를 이용한 물리 시뮬레이션 = 452
  충돌 탐지 = 468
  충돌 모드 = 470
  충돌 필터링 = 471
  Box2D 자원 = 472
 안드로이드에서 3D 엔진 구동 = 473
  실습 예제|Irrlicht를 이용한 3D 그래픽 렌더링 = 473
  Irrlicht 장면 관리 = 487
 정리 = 488
11 디버깅과 문제 해결 = 491
 GDB를 이용한 디버깅 = 492
  실습 예제|DroidBlaster 디버깅 = 493
 스택 트레이스 분석 = 502
  실습 예제|크래시 덤프 분석 = 502
  크래시 덤프 = 507
 성능 분석 = 509
  실습 예제|Gprof 실행 = 510
  동작 과정 = 516 
  ARM과 thumb, 네온 = 517
 정리 = 519
마치면서 = 521
찾아보기 = 525

관련분야 신착자료