목차 일부
서문 ... xxvi
이 책의 대상 ... xxvi
이 책이 답하는 주요 질문들 ... xxix
이 책의 구성 ... xxx
이 책에 쓰인 안드로이드 개발 환경 ... xxxi
보충 자료 ... xxxi
추가 정보를 얻을 수 있는 곳 ... xxxi
조판 관례 ... xxxi
저자 연락처 ... xxxi
제1부 안...
더보기
목차 전체
서문 ... xxvi
이 책의 대상 ... xxvi
이 책이 답하는 주요 질문들 ... xxix
이 책의 구성 ... xxx
이 책에 쓰인 안드로이드 개발 환경 ... xxxi
보충 자료 ... xxxi
추가 정보를 얻을 수 있는 곳 ... xxxi
조판 관례 ... xxxi
저자 연락처 ... xxxi
제1부 안드로이드의 개요
01장 안드로이드 소개 ... 3
모바일 소프트웨어 개발의 간략한 역사 ... 4
이동전화가 없던 시절 ... 4
"벽돌" ... 6
무선 응용 프로토콜, WAP ... 7
독점 모바일 플랫폼 ... 10
오픈 핸드셋 얼라이언스(OHA) ... 12
Google의 무선 참여 ... 12
OHA 결성 ... 13
제조사: 안드로이드 단말기 설계 ... 14
콘텐츠 제공사: 안드로이드 응용프로그램 개발 ... 14
이동통신 사업자: 안드로이드 경험의 전달 ... 14
안드로이드의 장점을 모두에게 ... 15
안드로이드 플랫폼의 차별성 ... 15
안드로이드: 차세대 플랫폼 ... 15
자유/오픈소스 ... 16
익숙하고 저렴한 개발 도구 ... 17
합리적인 개발자 학습 곡선 ... 17
강력한 응용프로그램을 개발할 수 있는 플랫폼 ... 18
풍부하고 안전한 응용프로그램 통합 ... 18
발행 시 비용이 걸림돌이 되지 않는다 ... 19
응용프로그램을 위한 "자유 시장" ... 19
성장하고 있는 새로운 플랫폼 ... 20
안드로이드 플랫폼 ... 21
안드로이드의 바탕 아키텍처 ... 21
보안 및 권한 ... 24
안드로이드 응용프로그램 개발 ... 25
요약 ... 27
참고자료 및 추가 정보 ... 28
02장 안드로이드 개발 환경 ... 29
개발 환경 갖추기 ... 29
지원하는 운영체제 ... 29
JDK 설치 ... 30
Java용 Eclipse 개발 환경 설치 ... 31
기타 개발 환경들 ... 32
안드로이드 SDK 설치 ... 32
Eclipse용 ADT 플러그인의 설치와 설정 ... 34
ADT 설치 문제 해결 ... 36
안드로이드 SDK 업그레이드 ... 36
안드로이드 SDK에서 문제점을 발견했다면 ... 37
디버깅을 위한 안드로이드 하드웨어 설정 ... 37
안드로이드 기기 디버깅을 위한 운영체제 설정 ... 37
이 책에 쓰인 개발 환경 ... 38
안드로이드 SDK 둘러보기 ... 39
안드로이드 라이선스 동의서 ... 39
안드로이드 SDK 문서화 ... 41
안드로이드 응용프로그램 프레임워크 ... 42
안드로이드 개발 도구들 ... 43
안드로이드 예제 응용프로그램들 ... 47
요약 ... 48
참고자료 및 추가 정보 ... 48
03장 내 생애 첫 번째 안드로이드 응용프로그램 ... 49
개발 환경 점검 ... 49
Snake 응용프로그램을 Eclipse 작업공간의 새 프로젝트로 추가 ... 50
Snake 프로젝트를 위한 안드로이드 가상 장치(AVD) 생성 ... 52
Snake 프로젝트의 시동 구성 설정 ... 53
Snake 응용프로그램을 안드로이드 에뮬레이터에서 실행 ... 54
첫 번째 자작 안드로이드 응용프로그램 ... 56
새 안드로이드 프로젝트 생성 및 설정 ... 56
안드로이드 응용프로그램의 핵심 파일들과 디렉터리들 ... 57
새 프로젝트를 위한 AVD 생성 ... 58
프로젝트의 시동 구성 만들기 ... 59
첫 안드로이드 응용프로그램을 에뮬레이터에서 실행 ... 60
에뮬레이터로 실행 중인 안드로이드 응용프로그램 디버깅하기 ... 62
안드로이드 응용프로그램에 로깅 기능 추가 ... 65
응용프로그램에 매체 지원 기능을 추가 ... 67
응용프로그램에 위치 기반 서비스 기능 추가 ... 68
하드웨어에서 응용프로그램을 실행하고 디버깅하기 ... 71
요약 ... 72
참고자료 및 추가 정보 ... 73
제2부 안드로이드 응용프로그램 설계의 필수 요소
04장 안드로이드 응용프로그램의 구조 ... 77
안드로이드 응용프로그램의 수명 주기 ... 77
활동을 통한 과제 수행 ... 77
의도를 통한 활동 전환 ... 78
안드로이드 활동의 수명 주기 ... 83
안드로이드 매니페스트 파일을 이용한 응용프로그램 정의 ... 88
응용프로그램의 신원 관리 ... 91
권한 다루기 ... 95
입력에 관한 하드웨어/소프트웨어 요구사항 지정 ... 97
라이브러리와 안드로이드 SDK 버전 다루기 ... 98
그 외의 응용프로그램 구성 설정들 ... 99
요약 ... 100
05장 응용프로그램 자원 관리 ... 101
자원이란? ... 101
안드로이드 자원의 저장 위치와 저장 방식 ... 101
자원 디렉터리 계통구조 ... 102
자원의 형식 ... 103
자원 형식에 따른 자원 저장 방식 ... 104
코드에서 자원에 접근 ... 105
예제: Eclipse에서 단순 자원 값들을 설정 ... 105
자원 다루기 ... 109
문자열 자원 다루기 ... 109
문자열 자원을 서식 문자열로 사용 ... 110
문자열 배열 다루기 ... 112
색상 다루기 ... 113
크기 다루기 ... 114
단순 표시물 다루기 ... 115
이미지 다루기 ... 116
애니메이션 다루기 ... 121
메뉴 다루기 ... 122
XML 파일 다루기 ... 124
원본 파일 다루기 ... 125
자원에 대한 참조 ... 126
레이아웃 다루기 ... 127
스타일 다루기 ... 132
테마 다루기 ... 135
시스템 자원 참조하기 ... 136
다중 응용프로그램 구성 관리 ... 137
현지화와 기기 구성을 고려한 자원 조직화 ... 139
코드에서 특정 구성의 자원을 선택하려면 ... 141
응용프로그램 자원들을 효율적으로 조직화하려면 ... 144
요약 ... 145
참고자료 및 추가 정보 ... 145
제3부 안드로이드 사용자 인터페이스 설계의 필수 요소
06장 주요 사용자 인터페이스 화면 구성 요소 ... 149
안드로이드 뷰, 위젯, 레이아웃 소개 ... 149
안드로이드 뷰 ... 149
안드로이드 위젯 ... 150
안드로이드 레이아웃 ... 150
사용자에게 텍스트를 표시하는 TextView ... 151
레이아웃과 크기 설정 ... 152
텍스트에 문맥 링크 추가 ... 153
EditText와 Spinner를 이용한 사용자 입력 ... 155
사용자 편의를 위한 자동 완성 기능 ... 158
입력 필터를 이용한 사용자 입력 제한 ... 160
Spinner 위젯을 이용한 제한적인 텍스트 선택 ... 161
버튼, 체크 상자, 라디오 버튼 ... 163
기본 버튼 사용하기 ... 164
체크 상자와 토글 버튼 ... 166
라디오 버튼과 라디오 그룹 ... 167
날짜와 시간 선택 ... 170
사용자에게 정보 제시하기 ... 172
ProgressBar를 이용한 진행 상태 표시 ... 172
SeekBar 위젯을 이용한 진행 상태 표시 및 설정 ... 174
RatingBar 위젯을 이용한 등급 표시 및 설정 ... 175
Chronometer 위젯을 이용한 시간 흐름 표시 ... 176
현재 시간을 표시하는 AnalogClock 위젯과 DigitalClock 위젯 ... 178
사용자에게 옵션과 문맥 메뉴 제공하기 ... 179
옵션 메뉴 만들기 ... 179
문맥 메뉴 만들기 ... 182
사용자 사건 처리 ... 184
터치 모드의 변경 감지 ... 184
화면 전체의 사건 감지 ... 185
긴 클릭에 대한 반응 ... 187
제스처 사건에 대한 반응 ... 188
입력 초점의 변화에 대한 반응 ... 190
화면 방향의 변화에 대한 반응 ... 191
스타일 다루기 ... 192
테마 다루기 ... 195
요약 ... 197
07장 레이아웃을 이용한 사용자 인터페이스 설계 ... 199
안드로이드에서 사용자 인터페이스 만들기 ... 199
XML 자원을 이용한 레이아웃 생성 ... 199
코드에서 레이아웃 만들기 ... 201
ViewGroup을 이용한 사용자 인터페이스 조직화 ... 204
View와 ViewGroup의 관계 ... 204
내장 레이아웃 클래스 활용 ... 209
절대적 배치 방식의 AbsoluteLayout ... 211
중첩 배치 방식의 FrameLayout ... 213
직선형 배치 방식의 LinearLayout ... 215
상대적 배치 방식의 RelativeLayout ... 217
표 배치 방식의 TableLayout ... 219
한 화면에 여러 개의 레이아웃 사용하기 ... 221
안드로이드에 내장된 뷰 컨테이너 클래스들 ... 222
AdapterViews 계통의 자료주도적 뷰 컨테이너들 ... 223
TabActivity와 TabHost를 이용한 탭 인터페이스 ... 228
그 외의 뷰 컨테이너들 ... 231
AppWidget을 통한 응용프로그램 뷰 접근 ... 234
응용프로그램을 AppWidget 제공자로 만들려면 ... 236
응용프로그램을 AppWidget 호스트로 만들기 ... 236
요약 ... 237
08장 그래픽과 애니메이션 ... 239
화면에 뭔가를 직접 그리려면 ... 239
Canvas와 Paint 다루기 ... 239
텍스트 그리기 ... 244
기본 서체와 스타일 사용하기 ... 245
커스텀 글꼴 사용하기 ... 246
텍스트가 화면에서 차지하는 크기 알아내기 ... 248
비트맵 이미지 다루기 ... 248
Canvas에 비트맵 이미지 그리기 ... 248
비트맵 이미지의 확대ㆍ축소 ... 248
변환 행렬을 이용한 비트맵 변환 ... 248
도형 다루기 ... 250
도형 표시물을 XML 자원으로 정의하기 ... 250
도형 표시물을 코드에서 직접 정의하기 ... 251
여러 가지 도형들 ... 252
애니메이션 다루기 ... 260
프레임별 애니메이션 ... 260
트위닝 애니메이션 ... 262
요약 ... 269
제4부 주요 안드로이드 API 활용
09장 안드로이드 자료 저장 및 관리 API ... 273
응용프로그램 선호설정 다루기 ... 273
전용, 공유 SharedPreferences 인스턴스 얻기 ... 274
설정 항목의 조회 ... 275
선호설정 항목 추가, 수정, 삭제 ... 276
안드로이드 파일 시스템에 있는 선호설정 파일 ... 277
파일과 디렉터리 다루기 ... 277
안드로이드 응용프로그램 디렉터리 탐색 ... 278
기본 응용프로그램 디렉터리에 파일을 만들고 자료 쓰기 ... 279
기본 응용프로그램 디렉터리에 있는 파일 읽기 ... 279
안드로이드 파일 시스템의 다른 디렉터리와 파일 사용하기 ... 281
SQLite 데이터베이스를 이용한 구조적 자료 저장 ... 282
SQLite 데이터베이스 만들기 ... 283
테이블 레코드의 삽입, 갱신, 삭제 ... 286
SQLite 데이터베이스 질의 ... 289
SQLite 데이터베이스의 종료와 삭제 ... 296
영속적 데이터베이스의 설계 ... 297
자료를 응용프로그램의 사용자 인터페이스에 묶기 ... 300
콘텐트 제공자를 통한 응용프로그램간 자료 공유 ... 305
콘텐트 제공자를 이용해서 기기상의 이미지들에 접근하기 ... 305
안드로이드의 내장 콘텐트 제공자 몇 가지 ... 311
콘텐트 제공자의 자료 수정 ... 319
커스텀 콘텐트 제공자를 통한 응용프로그램 확장 ... 322
ContentProvider 파생 클래스 작성 ... 322
자료 URI 정의 ... 324
자료 필드 정의 ... 324
query(), insert(), update(), delete(), getType() 구현 ... 324
매니페스트 파일 갱신 ... 331
라이브 폴더 다루기 ... 332
요약 ... 335
참고자료 및 추가 정보 ... 336
10장 안드로이드 네트워킹 API ... 337
웹 접근(HTTP) ... 337
웹에서 자료 읽기 ... 338
HttpURLConnection 클래스 ... 339
네트워크에서 XML 파일을 가져와 파싱하기 ... 340
스레드를 이용한 네트워크 연산 처리 ... 342
네트워크에 있는 이진 자료 활용 ... 346
안드로이드 기기의 네트워크 상태 조회 ... 348
WebView로 웹 브라우징 하기 ... 350
요약 ... 353
참고자료 및 추가 정보 ... 354
11장 위치 기반 서비스 API ... 355
GPS 활용 ... 355
위치 알아내기 ... 355
에뮬레이터의 위치 설정 ... 358
위치의 지오코딩 ... 358
위치를 지도로 표시하기 ... 362
외부 지도 응용프로그램을 이용한 지도 표시 ... 362
MapView 위젯을 이용한 지도 표시와 상호작용 ... 363
Google 지도 API 키 얻기 ... 365
지도 이동 ... 367
지도 확대ㆍ축소 ... 368
지도상의 위치 표식 ... 369
그 밖의 위치 기반 서비스 활용 방안 ... 374
요약 ... 375
참고자료 및 추가 정보 ... 375
12장 안드로이드 멀티미디어 API ... 377
정지화상 다루기 ... 377
Camera 객체를 이용한 정지화상 찍기 ... 378
이미지 공유 ... 383
이미지를 벽지로 설정 ... 384
동영상 다루기 ... 385
동영상 녹화 ... 385
동영상 재생 ... 387
오디오 다루기 ... 388
오디오 녹음하기 ... 388
오디오 재생 ... 390
오디오 공유 ... 391
벨소리 설정 ... 392
요약 ... 393
13장 안드로이드 전화통신 API ... 395
전화통신을 위한 편의 수단들 ... 396
전화기 상태 정보에 접근하는 권한 얻기 ... 396
통화 상태 조회 ... 396
이동통신 서비스 정보 조회 ... 399
전화번호 다루기 ... 399
단문 서비스 활용 ... 401
SMS 전송, 수신을 위한 권한 얻기 ... 401
단문 보내기 ... 401
단문 받기 ... 404
전화 걸기 ... 407
요약 ... 409
참고자료 및 추가 정보 ... 409
14장 OpenGL ES를 이용한 안드로이드 3D 그래픽 ... 411
OpenGL ES 소개 ... 411
안드로이드 3D 응용프로그램을 위한 기본적인 OpenGL ES 사용 방법 ... 412
SurfaceView 만들기 ... 413
OpenGL ES 스레드 시동 ... 415
EGL 초기화 ... 417
GL 초기화 ... 419
장면 설정 ... 420
3차원 물체 그리기 ... 421
정점 지정 ... 422
정점에 색깔 입히기 ... 423
좀 더 복잡한 물체 그리기 ... 424
장면에 조명 적용 ... 426
물체에 텍스처 입히기 ... 428
안드로이드 UI 요소와의 연동 ... 431
OpenGL 스레드에서 응용프로그램의 주 스레드로 정보 전달 ... 431
응용프로그램 주 스레드에서 OpenGL 스레드로 정보 전달 ... 433
OpenGL ES 정리하기 ... 434
GLSurfaceView 클래스 사용하기 ... 435
요약 ... 438
참고자료 및 추가 정보 ... 439
15장 안드로이드의 추가 하드웨어 API ... 441
장치 감지기 사용하기 ... 441
WiFi 다루기 ... 445
배터리 잔량과 외부 전원 정보 ... 448
요약 ... 451
제5부 추가적인 안드로이드 응용프로그램설계 요소
16장 알림 기능 다루기 ... 455
상태 표시줄을 이용한 알림 ... 456
전화기 진동 ... 460
지시등 깜박이기 ... 461
소리 내기 ... 463
맞춤형 알림 만들기 ... 463
요약 ... 465
17장 서비스 다루기 ... 467
서비스 만들기 ... 467
서비스 제어 ... 473
원격 인터페이스 구현 ... 473
Parcelable 구현 클래스 ... 476
요약 ... 480
제6부 안드로이드 응용프로그램의제작과 배포
18장 모바일 소프트웨어 개발 공정 ... 485
모바일 개발 공정의 개요 ... 485
소프트웨어 방법론의 선택 ... 486
"폭포수" 접근방식의 위험 ... 486
반복의 가치 ... 487
응용프로그램 요구사항 수집 ... 487
프로젝트 요구사항 결정하기 ... 488
모바일 응용프로그램을 위한 유스케이스 개발 ... 489
서드파티 요구사항들의 통합 ... 490
단말기 정보의 데이터베이스화 ... 490
프로젝트 위험 추정 ... 494
대상 단말기의 결정 ... 494
대상 단말기 갖추기 ... 495
응용프로그램 요구사항의 타당성 판정 ... 496
품질보증상의 위험을 완화하려면 ... 496
필수적인 프로젝트 문서화 작성 ... 498
품질보증을 위한 검사 계획 수립 ... 498
서드파티가 요구하는 문서화 ... 499
유지보수 및 이식을 위한 문서화 ... 499
모바일 응용프로그램을 위한 형상 관리 체계 구축 ... 500
소스 관리 시스템의 선택 ... 500
효과적인 버전 관리 체계 구축 ... 500
모바일 응용프로그램의 설계 ... 501
모바일 기기의 한계 이해 ... 501
일반적인 모바일 응용프로그램 아키텍처들 ... 501
확장성과 유지보수를 위한 설계 ... 502
응용프로그램 상호운용성을 위한 설계 ... 504
모바일 응용프로그램의 구현 ... 504
모바일 응용프로그램의 검사 ... 505
모바일 응용프로그램의 배치 ... 506
대상 시장과 배포 방식 결정 ... 506
배포사의 요구사항을 응용프로그램에 반영 ... 506
모바일 응용프로그램의 고객 지원과 유지보수 ... 507
적절한 응용프로그램 문서화 유지 ... 507
활동 중인 서버의 변경 관리 ... 507
위험도가 낮은 이식 기회 잡기 ... 508
요약 ... 508
참고자료 및 추가 정보 ... 508
19장 튼튼한 안드로이드 응용프로그램의 개발과 검사 ... 509
튼튼한 모바일 응용프로그램의 설계를 위한 모범 관행들 ... 509
모바일 사용자의 요구 만족 ... 510
모바일 기기를 위한 사용자 인터페이스 설계 ... 510
안정적이고 반응성 있는 모바일 응용프로그램의 설계 ... 512
안전한 모바일 응용프로그램의 설계 ... 515
수익 극대화를 위한 모바일 응용프로그램 설계 ... 515
안드로이드 응용프로그램 설계에 서드파티 표준을 활용 ... 516
유지보수와 업그레이드 편의를 위한 모바일 응용프로그램 설계 ... 517
안드로이드 응용프로그램 설계에 안드로이드 도구들을 활용 ... 519
안드로이드 응용프로그램 설계에서 황당한 실수를 피하려면 ... 519
튼튼한 모바일 응용프로그램의 개발을 위한 모범 관행들 ... 520
모바일 개발에 효과적인 개발 공정 설계 ... 520
응용프로그램의 타당성을 일찍, 자주 검사하라 ... 521
코딩 표준, 코드 검토, 단위 검사를 이용한 코드 품질 향상 ... 522
단일 단말기에서 발생하는 결함 처리 ... 525
안드로이드 응용프로그램 개발용 도구 활용 ... 525
안드로이드 응용프로그램 개발에서 황당한 실수를 피하려면 ... 526
모바일 응용프로그램 검사의 모범 관행들 ... 526
모바일 응용프로그램을 위한 결함 추적 시스템 설계 ... 526
검사 환경의 관리 ... 528
검사 포괄도의 극대화 ... 530
안드로이드 응용프로그램 검사에 안드로이드 도구들을 활용 ... 537
안드로이드 응용프로그램의 검사에서 황당한 실수를 피하려면 ... 538
검사를 외주로 맡기는 경우 ... 539
요약 ... 539
참고자료 및 추가 정보 ... 539
20장 안드로이드 응용프로그램의 판매 ... 541
응용프로그램 배포용 패키지 작성 ... 541
패키지를 위한 코드 준비 ... 542
패키지 작성 ... 543
릴리스 버전 응용프로그램 패키지의 검사 ... 546
안드로이드 응용프로그램의 인증 ... 546
수익 올리기 ... 547
안드로이드 마켓에서 응용프로그램 판매하기 ... 547
독자적인 서버에서 응용프로그램 판매하기 ... 554
안드로이드 마켓 이외의 배포 메커니즘을 통한 응용프로그램 판매 ... 555
지적재산권 보호 ... 556
사용자 과금 ... 556
요약 ... 557
참고자료 및 추가 정보 ... 557
제7부 부록
A 안드로이드 에뮬레이터 빠르게 둘러보기 ... 561
유용한 에뮬레이터 사용 요령 ... 562
안드로이드 가상 기계(AVD)를 통한 에뮬레이터 구성 관리 ... 563
가능한 안드로이드 대상 운영체제 나열 ... 564
AVD 만들기 ... 565
알려진 모든 AVD 나열하기 ... 571
AVD 삭제하기 ... 572
그 외의 AVD 명령들 ... 572
에뮬레이터의 행동 방식을 제어하는 시동 옵션들 ... 572
명령줄에서 에뮬레이터 시동 옵션 설정하기 ... 573
Eclipse에서 에뮬레이터 시동 옵션 설정하기 ... 574
에뮬레이터의 위치 정보 설정 ... 575
에뮬레이터 인스턴스 두 개로 전화 통화 흉내내기 ... 576
에뮬레이터 인스턴스 두 개로 SMS 메시지 송수신 흉내내기 ... 578
콘솔을 통한 에뮬레이터 제어 ... 578
걸려온 전화 흉내내기 ... 578
SMS 메시지 수??
더보기 닫기