목차

제1부 안드로이드의 개요
     
01장 안드로이드 소개    
 모바일 소프트웨어 개발의 간략한 역사    
 - 이동전화가 없던 시절
 - “벽돌”
 - 무선 응용 프로토콜, WAP
 - 독점 모바일 플랫폼
 오픈 핸드셋 얼라이언스(OHA)    
 - Google의 무선 참여
 - OHA 결성
 - 제조사: 안드로이드 단말기 설계
 - 콘텐츠 제공사: 안드로이드 응용프로그램 개발
 - 이동통신 사업자: 안드로이드 경험의 전달
 - 안드로이드의 장점을 모두에게
 안드로이드 플랫폼의 차별성    
 - 안드로이드: 차세대 플랫폼
 - 자유/오픈소스
 - 익숙하고 저렴한 개발 도구
 - 합리적인 개발자 학습 곡선
 - 강력한 응용프로그램을 개발할 수 있는 플랫폼
 - 풍부하고 안전한 응용프로그램 통합
 - 발행 시 비용이 걸림돌이 되지 않는다
 - 응용프로그램을 위한 “자유 시장”
 - 성장하고 있는 새로운 플랫폼
 안드로이드 플랫폼    
 - 안드로이드의 바탕 아키텍처
 - 보안 및 권한
 - 안드로이드 응용프로그램 개발
     
02장 안드로이드 개발 환경    
 개발 환경 갖추기    
 - 지원하는 운영체제
 - JDK 설치
 - Java용 Eclipse 개발 환경 설치
 - 기타 개발 환경들
 - 안드로이드 SDK 설치
 - Eclipse용 ADT 플러그인의 설치와 설정
 - ADT 설치 문제 해결
 - 안드로이드 SDK에서 문제점을 발견했다면
 - 디버깅을 위한 안드로이드 하드웨어 설정
 - 안드로이드 기기 디버깅을 위한 운영체제 설정
 - 이 책에 쓰인 개발 환경
 안드로이드 SDK 둘러보기    
 - 안드로이드 라이선스 동의서
 - 안드로이드 SDK 문서화
 - 안드로이드 응용프로그램 프레임워크
 - 안드로이드 개발 도구들
 - 안드로이드 예제 응용프로그램들
     
03장 내 생애 첫 번째 안드로이드 응용프로그램    
 개발 환경 점검    
 - Snake 응용프로그램을 Eclipse 작업공간의 새 프로젝트로 추가
 - Snake 프로젝트를 위한 안드로이드 가상 장치(AVD) 생성
 - Snake 프로젝트의 시동 구성 설정
 - Snake 응용프로그램을 안드로이드 에뮬레이터에서 실행
 첫 번째 자작 안드로이드 응용프로그램     
 - 새 안드로이드 프로젝트 생성 및 설정
 - 안드로이드 응용프로그램의 핵심 파일들과 디렉터리들
 - 새 프로젝트를 위한 AVD 생성
 - 프로젝트의 시동 구성 만들기
 - 첫 안드로이드 응용프로그램을 에뮬레이터에서 실행
 - 에뮬레이터로 실행 중인 안드로이드 응용프로그램 디버깅하기
 - 안드로이드 응용프로그램에 로깅 기능 추가
 - 응용프로그램에 매체 지원을 추가
 - 응용프로그램에 위치 기반 서비스 기능 추가
 - 하드웨어에서 응용프로그램을 실행하고 디버깅하기
     
제2부 안드로이드 응용프로그램 설계의 필수 요소    
     
04장 안드로이드 응용프로그램의 구조    
 안드로이드 응용프로그램의 수명 주기    
 - 활동을 통한 과제 수행
 - 의도를 통한 활동 전환
 - 안드로이드 활동의 수명 주기
 안드로이드 매니페스트 파일을 이용한 응용프로그램 정의    
 - 응용프로그램의 신원 관리
 - 권한 다루기
 - 입력에 관한 하드웨어/소프트웨어 요구사항 지정
 - 라이브러리와 안드로이드 SDK 버전 다루기
 - 그 외의 응용프로그램 구성 설정들
     
05장 응용프로그램 자원 관리    
 자원이란?    
 - 자원 디렉터리 계통구조
 - 자원의 형식
 - 자원 형식에 따른 자원 저장 방식
 - 코드에서 자원에 접근
 예제: Eclipse에서 단순 자원 값들을 설정    
 자원 다루기    
 - 문자열 자원 다루기
 - 문자열 자원을 서식 문자열로 사용
 - 문자열 배열 다루기
 - 색상 다루기
 - 크기 다루기
 - 단순 표시물 다루기
 - 이미지 다루기
 - 애니메이션 다루기
 - 메뉴 다루기
 - XML 파일 다루기
 - 원본 파일 다루기
 - 자원에 대한 참조
 - 레이아웃 다루기
 - 스타일 다루기
 - 테마 다루기
 시스템 자원 참조하기    
 다중 응용프로그램 구성 관리    
 - 현지화와 기기 구성을 고려한 자원 조직화
 - 코드에서 특정 구성의 자원을 선택하려면
 - 응용프로그램 자원들을 효율적으로 조직화하려면
     
제3부 안드로이드 사용자 인터페이스 설계의 필수 요소    
     
06장 주요 사용자 인터페이스 화면 구성 요소    
 안드로이드 뷰, 위젯, 레이아웃 소개    
 - 안드로이드 뷰
 - 안드로이드 위젯
 - 안드로이드 레이아웃
 사용자에게 텍스트를 표시하는 TextView    
 - 레이아웃과 크기 설정
 - 텍스트에 문맥 링크 추가
 EditText와 Spinner를 이용한 사용자 입력    
 - 사용자 편의를 위한 자동 완성 기능
 - 입력 필터를 이용한 사용자 입력 제한
 - Spinner 위젯을 이용한 제한적인 텍스트 선택
 버튼, 체크 상자, 라디오 버튼     
 - 기본 버튼 사용하기
 - 체크 상자와 토글 버튼
 - 라디오 버튼과 라디오 그룹
 날짜와 시간 선택    
 사용자에게 정보 제시하기    
 - ProgressBar를 이용한 진행 상태 표시
 - SeekBar 위젯을 이용한 진행 상태 표시 및 설정
 - RatingBar 위젯을 이용한 등급 표시 및 설정
 - Chronometer 위젯을 이용한 시간 흐름 표시
 - 현재 시간을 표시하는 AnalogClock 위젯과 DigitalClock 위젯
 사용자에게 옵션과 문맥 메뉴 제공하기    
 - 옵션 메뉴 만들기
 - 문맥 메뉴 만들기
 사용자 사건 처리    
 - 터치 모드의 변경 감지
 - 화면 전체의 사건 감지
 - 긴 클릭에 대한 반응
 - 제스처 사건에 대한 반응
 - 입력 초점의 변화에 대한 반응
 - 화면 방향의 변화에 대한 반응
 스타일 다루기    
 테마 다루기    
     
07장 레이아웃을 이용한 사용자 인터페이스 설계    
 안드로이드에서 사용자 인터페이스 만들기    
 - XML 자원을 이용한 레이아웃 생성
 - 코드에서 레이아웃 만들기
 ViewGroup을 이용한 사용자 인터페이스 조직화    
 - View와 ViewGroup의 관계
 내장 레이아웃 클래스 활용    
 - AbsoluteLayout 소개
 - 방식의 FrameLayout 소개
 - 직선형 배치 방식의 LinearLayout
 - 상대적 배치 방식의 RelativeLayout
 - 표 배치 방식의 TableLayout
 - 한 화면에 여러 개의 레이아웃 사용하기
 안드로이드에 내장된 뷰 컨테이너 클래스들    
 - AdapterViews 계통의 자료주도적 뷰 컨테이너들
 - TabActivity와 TabHost를 이용한 탭 인터페이스
 - 그 외의 뷰 컨테이너들
 AppWidget을 통한 응용프로그램 뷰 접근    
 - 응용프로그램을 AppWidget 제공자로 만들려면
 - 응용프로그램을 AppWidget 호스트로 만들기
     
08장 그래픽과 애니메이션    
 화면에 뭔가를 직접 그리려면    
 - Canvas와 Paint 다루기
 텍스트 그리기    
 - 기본 서체와 스타일 사용하기
 - 커스텀 글꼴 사용하기
 - 텍스트가 화면에서 차지하는 크기 알아내기
 비트맵 이미지 다루기    
 - Canvas에 비트맵 이미지 그리기
 - 변환 행렬을 이용한 비트맵 변환
 도형 다루기    
 - 도형 표시물을 XML 자원으로 정의하기
 - 도형 표시물을 코드에서 직접 정의하기
 - 여러 가지 도형들
 애니메이션 다루기    
 - 프레임별 애니메이션
 - 트위닝 애니메이션
     
제4부 주요 안드로이드 API 활용    
     
09장 안드로이드 자료 저장 및 관리 API    
 응용프로그램 선호설정 다루기    
 - 전용, 공유 SharedPreferences 인스턴스 얻기
 - 설정 항목의 조회
 - 선호설정 항목 추가, 수정, 삭제
 - 안드로이드 파일 시스템에 있는 선호설정 파일
 파일과 디렉터리 다루기    
 - 안드로이드 응용프로그램 디렉터리 탐색
 - 기본 응용프로그램 디렉터리에 파일을 만들고 자료 쓰기
 - 기본 응용프로그램 디렉터리에 있는 파일 읽기
 - 안드로이드 파일 시스템의 다른 디렉터리와 파일 사용하기
 SQLite 데이터베이스를 이용한 구조적 자료 저장    
 - SQLite 데이터베이스 만들기
 - 테이블 레코드의 삽입, 갱신, 삭제
 - SQLite 데이터베이스 질의
 - SQLite 데이터베이스의 종료와 삭제
 - 영속적 데이터베이스의 설계
 - 자료를 응용프로그램의 사용자 인터페이스에 묶기
 콘텐트 제공자를 통한 응용프로그램간 자료 공유    
 - 콘텐트 제공자를 이용해서 기기상의 이미지들에 접근하기
 - 안드로이드의 내장 콘텐트 제공자 몇 가지
 - 콘텐트 제공자의 자료 수정
 커스텀 콘텐트 제공자를 통한 응용프로그램 확장    
 - ContentProvider 파생 클래스 작성
 - 자료 URI 정의
 - 자료 필드 정의
 - query(), insert(), update(), delete(), getType() 구현
 - insert()의 구현
 - 매니페스트 파일 갱신
 라이브 폴더 다루기    
     
10장 안드로이드 네트워킹 API    
 웹 접근(HTTP)    
 - 웹에서 자료 읽기
 - HttpURLConnection 클래스
 - 네트워크에서 XML 파일을 가져와 파싱하기
 - 스레드를 이용한 네트워크 연산 처리
 - 네트워크에 있는 이진 자료 활용
 - 안드로이드 기기의 네트워크 상태 조회
 WebView로 웹 브라우징 하기    
     
11장 위치 기반 서비스 API    
 GPS 활용    
 - 위치 알아내기
 - 에뮬레이터의 위치 설정
 위치의 지오코딩    
 위치를 지도로 표시하기    
 - 외부 지도 응용프로그램을 이용한 지도 표시
 - MapView 위젯을 이용한 지도 표시와 상호작용
 - Google 지도 API 키 얻기
 - 지도 이동
 - 지도 확대?축소
 - 지도상의 위치 표식
 그 밖의 위치 기반 서비스 활용 방안    
     
12장 안드로이드 멀티미디어 API    
 정지화상 다루기    
 - Camera 객체를 이용한 정지화상 찍기
 - 이미지 공유
 - 이미지를 벽지로 설정
 동영상 다루기    
 - 동영상 녹화
 - 동영상 재생
 오디오 다루기    
 - 오디오 녹음하기
 - 오디오 재생
 - 오디오 공유
 - 벨소리 설정
     
13장 안드로이드 전화통신 API    
 전화통신을 위한 편의 수단들    
 - 전화기 상태 정보에 접근하는 권한 얻기
 - 통화 상태 조회
 - 이동통신 서비스 정보 조회
 - 전화번호 다루기
 단문 서비스 활용    
 - SMS 전송, 수신을 위한 권한 얻기
 - 단문 보내기
 - 단문 받기
 전화 걸기    
     
14장 OpenGL ES를 이용한 안드로이드 3D 그래픽    
 OpenGL ES 소개    
 안드로이드 3D 응용프로그램을 위한 기본적인 OpenGL ES 사용 방법    
 - SurfaceView 만들기
 - OpenGL ES 스레드 시동
 - EGL 초기화
 - GL 초기화
 - 장면 설정
 3차원 물체 그리기    
 - 정점 지정
 - 정점에 색깔 입히기
 - 좀 더 복잡한 물체 그리기
 - 장면에 조명 적용
 - 물체에 텍스처 입히기
 안드로이드 UI 요소와의 연동    
 - OpenGL 스레드에서 응용프로그램의 주 스레드로 정보 전달
 - 응용프로그램 주 스레드에서 OpenGL 스레드로 정보 전달
 OpenGL ES 정리하기    
 GLSurfaceView 클래스 사용하기    
     
15장 안드로이드의 추가 하드웨어 API    
 장치 감지기 사용하기    
 WiFi 다루기    
 배터리 잔량과 외부 전원 정보    
     
제5부 추가적인 안드로이드 응용프로그램설계 요소    
     
16장 알림 기능 다루기    
 상태 표시줄을 이용한 알림    
 전화기 진동    
 지시등 깜박이기    
 소리 내기    
 맞춤형 알림 만들기    
     
17장 서비스 다루기    
 서비스 만들기    
 서비스 제어    
 원격 인터페이스 구현    
 Parcelable 구현 클래스    
     
제6부 안드로이드 응용프로그램의제작과 배포    
     
18장 모바일 소프트웨어 개발 공정    
 모바일 개발 공정 개요    
 소프트웨어 방법론의 선택    
 - “폭포수” 접근방식의 위험
 - 반복의 가치
 응용프로그램 요구사항 수집    
 - 프로젝트 요구사항 결정하기
 - 모바일 응용프로그램을 위한 유스케이스 개발
 - 서드파티 요구사항들의 통합
 - 단말기 정보의 데이터베이스화
 프로젝트 위험 추정    
 - 대상 단말기의 결정
 - 대상 단말기 갖추기
 - 응용프로그램 요구사항의 타당성 판정
 - 품질보증상의 위험을 완화하려면
 필수적인 프로젝트 문서화 작성    
 - 품질보증을 위한 검사 계획 수립
 - 서드파티가 요구하는 문서화
 - 유지보수 및 이식을 위한 문서화
 모바일 응용프로그램을 위한 형상 관리 체계 구축    
 - 소스 관리 시스템의 선택
 - 효과적인 버전 관리 체계 구축
 모바일 응용프로그램의 설계    
 - 모바일 기기의 한계 이해
 - 일반적인 모바일 응용프로그램 아키텍처들
 - 확장성과 유지보수를 위한 설계
 - 응용프로그램 상호운용성을 위한 설계
 모바일 응용프로그램의 구현    
 모바일 응용프로그램의 검사    
 모바일 응용프로그램의 배치    
 - 대상 시장과 배포 방식 결정
 - 배포사의 요구사항을 응용프로그램에 반영
 모바일 응용프로그램의 고객 지원과 유지보수    
 - 적절한 응용프로그램 문서화 유지
 - 활동 중인 서버의 변경 관리
 - 위험도가 낮은 이식 기회 잡기
     
19장 튼튼한 안드로이드 응용프로그램의 개발과 검사    
 튼튼한 모바일 응용프로그램의 설계를 위한 모범 관행들    
 - 모바일 사용자의 요구 만족
 - 모바일 기기를 위한 사용자 인터페이스 설계
 - 안정적이고 반응성 있는 모바일 응용프로그램의 설계
 - 안전한 모바일 응용프로그램의 설계
 - 수익 극대화를 위한 모바일 응용프로그램 설계
 - 안드로이드 응용프로그램 설계에 서드파티 표준을 활용
 - 유지보수와 업그레이드 편의를 위한 모바일 응용프로그램 설계
 - 안드로이드 응용프로그램 설계에 안드로이드 도구들을 활용
 - 안드로이드 응용프로그램 설계에서 황당한 실수를 피하려면
 튼튼한 모바일 응용프로그램의 개발을 위한 모범 관행들    
 - 모바일 개발에 효과적인 개발 공정 설계
 - 응용프로그램의 타당성을 일찍, 자주 검사하라
 - 코딩 표준, 코드 검토, 단위 검사를 이용한 코드 품질 향상
 - 단일 단말기에서 발생하는 결함 처리
 - 안드로이드 응용프로그램 개발용 도구 활용
 - 안드로이드 응용프로그램 개발에서 황당한 실수를 피하려면
 모바일 응용프로그램 검사의 모범 관행들    
 - 모바일 응용프로그램을 위한 결함 추적 시스템 설계
 - 검사 환경의 관리
 - 검사 포괄도의 극대화
 - 안드로이드 응용프로그램 검사에 안드로이드 도구들을 활용
 - 안드로이드 응용프로그램의 검사에서 황당한 실수를 피하려면
 - 검사를 외주로 맡기는 경우
     
20장 안드로이드 응용프로그램의 판매    
 응용프로그램 배포용 패키지 작성    
 - 패키지를 위한 코드 준비
 - 패키지 작성
 - 릴리스 버전 응용프로그램 패키지의 검사
 - 안드로이드 응용프로그램의 인증
 수익 올리기    
 - 안드로이드 마켓에서 응용프로그램 판매하기
 - 독자적인 서버에서 응용프로그램 판매하기
 - 안드로이드 마켓 이외의 배포 메커니즘을 통한 응용프로그램 판매
 - 지적재산권 보호
 - 사용자 과금
     
제7부 부록    
     
A 안드로이드 에뮬레이터 빠르게 둘러보기    
 유용한 에뮬레이터 사용 요령    
 안드로이드 가상 기계(AVD)를 통한 에뮬레이터 구성 관리    
 - 가능한 안드로이드 대상 운영체제 나열
 - AVD 만들기
 - 알려진 모든 AVD 나열하기
 - AVD 삭제하기
 - 그 외의 AVD 명령들
 에뮬레이터의 행동 방식을 제어하는 시동 옵션들    
 - 명령줄에서 에뮬레이터 시동 옵션 설정하기
 - Eclipse에서 에뮬레이터 시동 옵션 설정하기
 에뮬레이터의 위치 정보 설정    
 에뮬레이터 인스턴스 두 개로 전화 통화 흉내내기    
 에뮬레이터 인스턴스 두 개로 SMS 메시지 송수신 흉내내기    
 콘솔을 통한 에뮬레이터 제어    
 - 걸려온 전화 흉내내기
 - SMS 메시지 수신 흉내내기
 - GPS 좌표 보내기
 - 네트워크 상태 감시
 - 전원 설정 변경
 - 기타 콘솔 명령들
 에뮬레이터 즐기기    
 에뮬레이터의 한계    
     
B 안드로이드 DDMS 빠르게 둘러보기    
 기본적인 DDMS 실행 방법    
 DDMS의 주요 기능    
 프로세스 다루기    
 - 안드로이드 응용프로그램에 디버거 붙이기
 - 안드로이드 응용프로그램의 스레드 활동 살펴보기
 - 안드로이드 응용프로그램에 쓰레기 수거 실행
 - 안드로이드 응용프로그램의 힙 활동 살펴보기
 - 안드로이드 응용프로그램 중지하기
 파일 탐색기 다루기    
 - 에뮬레이터나 기기에서 호스트로 파일 복사
 - 호스트에서 에뮬레이터나 기기로 파일 복사
 - 에뮬레이터나 기기의 파일 삭제
 에뮬레이터 제어하기    
 - 전화가 걸려오는 상황 연출
 - SMS 메시지가 도착한 상황 연출
 - GPS 좌표 보내기
 응용프로그램 로깅 기능 다루기    
 에뮬레이터나 기기의 화면 갈무리    
     
C 안드로이드 디버그 브리지(ADB)     
 - 빠르게 둘러보기
 호스트에 연결된 기기들과 에뮬레이터들을 나열하기    
 특정 기기에 ADB 명령 전달하기    
 ADB 서버 프로세스의 시작과 중지    
 - ADB 서버 프로세스 종료하기
 - ADB 서버 프로세스의 시작 및 점검
 안드로이드 기기와 호스트 사이의 파일 복사    
 - 호스트의 파일을 기기로 복사하기
 ADB를 이용한 안드로이드 응용프로그램 설치 및 해체    
 - ADB로 응용프로그램 설치하기
 - ADB로 응용프로그램을 다시 설치하기
 - ADB로 응용프로그램을 해체하기
 LogCat 로깅 기능 활용하기    
 - 모든 로그 항목 표시
 - 날짜와 시간을 표시하는 로그 표시 모드
 - 필터 적용
 - 로그 비우기
 - 로그 출력을 기기의 파일에 저장하기
 - 기타 로그 보기
 버그 보고서 생성    
 ADB 셸 사용하기    
 - 셸 명령 하나만 실행하기
 - 셸 세션 시작하기
 - 셸로 에뮬레이터 중지, 시작하기
 - 셸에서 SQLite 데이터베이스 관리하기
 - 셸에서 monkey 도구로 응용프로그램 스트레스 검사 수행하기
 - 셸을 통해서 커스텀 실행파일을 설치하고 실행하기
 그 외의 ADB 명령들    
     
D SQLite 빠르게 둘러보기    
 SQLite와 안드로이드    
 sqlite3 명령줄 인터페이스 사용법    
 - sqlite3 명령줄 인터페이스를 띄우고 데이터베이스에 연결하기
 - 데이터베이스 둘러보기
 - 데이터베이스 스키마 및 자료 가져오기와 내보내기
 - 명령 프롬프트에서 SQL 명령 수행
 - SQLite 내부 들여다보기
 - 그 외의 sqlite3 명령들
 - SQLite의 한계
 SQLite의 이해를 돕는 예제 하나: 학생 성적 데이터베이스    
 - 학생 성적 데이터베이스 스키마 설계
 - AUTOINCREMENT 열이 있는 간단한 테이블 만들기
 - 테이블에 자료 삽입
 - SELECT로 테이블 조회하기
 - 외부 키와 복합 기본 키가 있는 테이블 만들기
 - 테이블의 자료 수정하기
 - JOIN을 이용한 다중 테이블 질의
 - 계산된 열에 하위 질의를 활용
 - 테이블 삭제
     
E 안드로이드 SDK 1.6 소개    
 안드로이드 SDK 1.6의 새 기능과 그에 따른 SDK 변화    
 - 범용 검색 수단 “Quick Search Box”
 - CDMA 지원
 - 접근성 프레임워크
 - TTS 지원
 - 제스처 입력
 - 더욱 다양한 화면 크기/밀도 지원
 - 추가적인 애니메이션 기능
 그 외의 SDK 변화    
 안드로이드 SDK 1.6 적응을 위한 안드로이드 개발자 문서화 활용법    
 안드로이드 SDK와 Eclipse 개발 환경 업데이트    
 - 안드로이드 SDK 1.6 설치
 - ADT 플러그인과 DDMS 갱신 및 Eclipse 설정 변경
 - AVD 만들기
 기존 프로젝트를 1.6에 맞게 이전하기    
 - 사례: 제13장의 Telephony 예제

F 안드로이드 SDK 2.0 소개
?   안드로이드 2.0에서의 변화
?   SDK 설치
안드로이드 2.0 애플리케이션 개발
?   다양한 화면 크기에 대한 대응 
?   제스처(Gesture)
?   TTS(Text To Speech)
?   빠른 검색
?   블루투스