서브메뉴

본문

안드로이드 스튜디오3 & 프로그래밍 (핵심만 골라 배우는)
안드로이드 스튜디오3 & 프로그래밍 (핵심만 골라 배우는)
저자 : 닐 스미스
출판사 : 제이펍
출판년 : 2017
정가 : 37000, ISBN : 9791185890784

책소개


최신 안드로이드 스튜디오 설치부터 안드로이드 개발 기초까지!

이 책은 안드로이드 스튜디오 기반의 애플리케이션 개발과 테스트에 필요한 환경 설정, 그리고 안드로이드 스튜디오의 주요 기능과 사용법을 간명한 예제 코드로 설명한다. 또한, 안드로이드 스튜디오 3의 각종 최신 기능에 대한 내용도 국내 최초로 포함하고 있다.

목차



CHAPTER 1 개요 _ 1
1.1 안드로이드 스튜디오의 장점 _ 2
1.2 소스 코드 다운로드하기 _ 3
1.3 단축키와 코드 표기 _ 4
1.4 안드로이드 스튜디오 최신 버전 사용하기 _ 4
1.5 독자 _ 5
1.6 오탈자 _ 5

CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기 _ 6
2.1 개발 시스템 요구 사항 _ 6
2.2 자바 JDK 설치하기 _ 7
2.3 리눅스에서 설치하기 _ 9
2.4 안드로이드 스튜디오 패키지 다운로드하기 _ 11
2.5 안드로이드 스튜디오 설치하기 _ 11
2.6 안드로이드 스튜디오 설정 위저드 _ 17
2.7 가장 최신 버전의 안드로이드 패키지 설치하기 _ 18
2.8 명령행에서 안드로이드 SDK 도구 사용하기 _ 22
2.9 안드로이드 스튜디오와 SDK 버전 업그레이드하기 _ 26
2.10 안드로이드 SDK와 NDK 및 자바 JDK 경로 변경하기 _ 26
2.11 요약 _ 27

CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기 _ 28
3.1 새로운 안드로이드 프로젝트 생성하기 _ 28
3.2 프로젝트와 SDK 설정 정의하기 _ 30
3.3 액티비티 생성하기 _ 33
3.4 애플리케이션 변경하기 _ 34
3.5 레이아웃과 리소스 파일 살펴보기 _ 42
3.6 요약 _ 45

CHAPTER 4 안드로이드 스튜디오 UI 둘러보기 _ 46
4.1 웰컴 스크린 _ 46
4.2 메인 창 _ 47
4.3 도구 창 _ 50
4.4 안드로이드 스튜디오의 단축키 _ 55
4.5 스위처와 최근 파일 기능을 이용한 내비게이션 _ 55
4.6 안드로이드 스튜디오 테마 변경하기 _ 56
4.7 요약 _ 57

CHAPTER 5 안드로이드 스튜디오에서 AVD 생성하기 _ 58
5.1 AVD 개요 _ 58
5.2 새로운 AVD 생성하기 _ 60
5.3 에뮬레이터 시작하기 _ 66
5.4 AVD에서 애플리케이션 실행하기 _ 66
5.5 Run/Debug 구성 _ 68
5.6 실행 중인 애플리케이션 중단시키기 _ 69
5.7 명령행에서 AVD 생조회하기 _ 70
5.8 AVD 구성 파일들 _ 72
5.9 AVD의 위치 이동과 이름 변경 _ 72
5.10 Intel HAXM 사용으로 에뮬레이터 성능 향상시키기 _ 73
5.11 요약 _ 74

CHAPTER 6 안드로이드 스튜디오 AVD 에뮬레이터 사용과 구성하기 _ 75
6.1 에뮬레이터 환경 _ 75
6.2 에뮬레이터 툴바 _ 76
6.3 줌 모드 사용하기 _ 78
6.4 에뮬레이터 창의 크기 조정 _ 78
6.5 확장 제어 옵션 _ 78
6.6 드래그 - 드롭 _ 81
6.7 모의 지문 구성하기 _ 82
6.8 멀티 코어 지원 _ 84
6.9 요약 _ 85

CHAPTER 7 실제 안드로이드 장치에서 애플리케이션 테스트하기 _ 86
7.1 ADB 개요 _ 86
7.2 안드로이드 장치에서 ADB 활성화하기 _ 87
7.3 adb 연결 테스트하기 _ 93
7.4 안드로이드 스튜디오에서 장치 확인하기 _ 94
7.5 요약 _ 97

CHAPTER 8 안드로이드 스튜디오 코드 편집기 _ 98
8.1 안드로이드 스튜디오 코드 편집기 _ 98
8.2 편집기 창 나누기 _ 101
8.3 코드 자동 완성 _ 102
8.4 문장 자동 완성 _ 104
8.5 매개변수 정보 _ 104
8.6 코드 생성 _ 104
8.7 코드 접어 감추기 _ 106
8.8 빠른 문서 검색 _ 107
8.9 소스 코드 형식 변환 _ 108
8.10 샘플 코드 찾아보기 _ 109
8.11 요약 _ 110

CHAPTER 9 안드로이드 아키텍처 개요 _ 111
9.1 안드로이드 소프트웨어 스택 _ 111
9.2 리눅스 커널 _ 112
9.3 안드로이드 런타임 ― ART _ 113
9.4 안드로이드 라이브러리 _ 113
9.5 애플리케이션 프레임워크 _ 115
9.6 애플리케이션 _ 116
9.7 요약 _ 116

CHAPTER 10 액티비티와 인텐트 개요 _ 117
10.1 안드로이드 액티비티 _ 117
10.2 안드로이드 인텐트 _ 118
10.3 브로드캐스트 인텐트 _ 118
10.4 브로드캐스트 수신자 _ 119
10.5 안드로이드 서비스 _ 119
10.6 콘텐트 제공자 _ 120
10.7 애플리케이션 매니페스트 _ 120
10.8 애플리케이션 리소스 _ 120
10.9 애플리케이션 컨텍스트 _ 121
10.10 요약 _ 121

CHAPTER 11 안드로이드 애플리케이션과 액티비티 생명주기 _ 122
11.1 안드로이드 애플리케이션과 리소스 관리 _ 122
11.2 안드로이드 프로세스 상태 _ 123
11.3 액티비티 생명주기 _ 124
11.4 액티비티 스택 _ 125
11.5 액티비티 상태 _ 126
11.6 구성 변경 _ 126
11.7 요약 _ 127

CHAPTER 12 액티비티 상태 변화 처리하기 _ 128
12.1 Activity 클래스 _ 128
12.2 동적 상태 vs. 영속적 상태 _ 132
12.3 안드로이드 액티비티 생명주기 메서드 _ 133
12.4 액티비티 생애 _ 135
12.5 액티비티가 다시 시작되지 않게 하기 _ 136
12.6 요약 _ 137

CHAPTER 13 액티비티 상태 변화 예제 _ 138
13.1 상태 변화 예제 프로젝트 생성하기 _ 138
13.2 사용자 인터페이스 디자인하기 _ 139
13.3 액티비티 생명주기 메서드 오버라이딩 _ 141
13.4 로그캣 패널의 메시지 필터링하기 _ 144
13.5 애플리케이션 실행하기 _ 146
13.6 액티비티로 실험하기 _ 147
13.7 요약 _ 149

CHAPTER 14 액티비티 상태를 저장하고 복원하기 _ 150
14.1 동적 상태 저장 _ 150
14.2 사용자 인터페이스 상태의 자동 저장과 복원 _ 151
14.3 Bundle 클래스 _ 152
14.4 상태 데이터 저장하기 _ 153
14.5 상태 데이터 복원하기 _ 156
14.6 애플리케이션 테스트하기 _ 156
14.7 요약 _ 156

CHAPTER 15 안드로이드 뷰, 뷰 그룹, 레이아웃 _ 158
15.1 서로 다른 안드로이드 장치를 위한 디자인 _ 158
15.2 뷰와 뷰 그룹 _ 159
15.3 안드로이드 레이아웃 매니저 _ 159
15.4 뷰 계층 구조 _ 161
15.5 사용자 인터페이스 생성 _ 163
15.6 요약 _ 163

CHAPTER 16 안드로이드 스튜디오 레이아웃 편집기 살펴보기 _ 164
16.1 Basic vs. Empty 액티비티 템플릿 _ 164
16.2 안드로이드 스튜디오 레이아웃 편집기 _ 167
16.3 디자인 모드 _ 167
16.4 팔레트 _ 169
16.5 레이아웃의 확대축소 보기 _ 170
16.6 디자인 뷰와 청사진 뷰 _ 170
16.7 텍스트 모드 _ 171
16.8 속성 설정하기 _ 173
16.9 즐겨 사용하는 속성 구성하기 _ 174
16.10 커스텀 장치 정의 생성하기 _ 175
16.11 현재 장치 변경하기 _ 176
16.12 요약 _ 176

CHAPTER 17 안드로이드 ConstraintLayout 개요 _ 177
17.1 ConstraintLayout의 핵심 요소 _ 177
17.2 기준선 정렬 _ 182
17.3 지시선 사용하기 _ 183
17.4 위젯 크기 구성하기 _ 183
17.5 비율 _ 183
17.6 ConstraintLayout의 장점 _ 184
17.7 ConstraintLayout의 가용성 _ 184
17.8 요약 _ 184

CHAPTER 18 안드로이드 스튜디오에서 ConstraintLayout 사용하기 _ 185
18.1 디자인 뷰와 레이아웃 뷰 _ 185
18.2 자동 연결 _ 187
18.3 제약 추론 _ 188
18.4 수동 연결 _ 188
18.5 제약 삭제하기 _ 189
18.6 제약 바이어스 조정하기 _ 190
18.7 ConstraintLayout 마진 이해하기 _ 190
18.8 상대 제약과 바이어스의 중요성 _ 192
18.9 위젯의 크기 구성하기 _ 194
18.10 지시선 추가하기 _ 195
18.11 위젯의 그룹 정렬 _ 197
18.12 다른 타입의 레이아웃을 ConstraintLayout으로 변환하기 _ 198
18.13 요약 _ 198

CHAPTER 19 안드로이드 스튜디오에서 ConstraintLayout 체인과 비율 사용하기 _ 199
19.1 체인 생성하기 _ 199
19.2 체인 스타일 변경하기 _ 202
19.3 Spread inside 체인 스타일 _ 203
19.4 Packed 체인 스타일 _ 203
19.5 바이어스를 사용한 체인 스타일 _ 204
19.6 체인 _ 204
19.7 비율 사용하기 _ 206
19.8 요약 _ 208

CHAPTER 20 ConstraintLayout 예제 프로젝트 _ 209
20.1 ConstraintLayout 예제 프로젝트 생성하기 _ 209
20.2 새로운 액티비티 생성하기 _ 210
20.3 자동 연결 설정과 이미지 파일 추가하기 _ 212
20.4 위젯을 사용자 인터페이스에 추가하기 _ 212
20.5 제약 추가하기 _ 215
20.6 레이아웃 테스트하기 _ 217
20.7 레이아웃 검사기 사용하기 _ 218
20.8 계층 구조 뷰어 사용하기 _ 219
20.9 요약 _ 223

CHAPTER 21 직접 XML 레이아웃 작성하기 _ 224
21.1 직접 XML 레이아웃 생성하기 _ 224
21.2 XML 직접 작성 vs. 레이아웃 편집기의 디자인 모드 사용 _ 228
21.3 요약 _ 229

CHAPTER 22 ConstraintSet으로 ConstraintLayout 관리하기 _ 230
22.1 자바 코드 vs. XML 레이아웃 파일 _ 230
22.2 뷰 생성하기 _ 231
22.3 뷰 속성 _ 232
22.4 ConstraintSet _ 232
22.5 요약 _ 237

CHAPTER 23 안드로이드 ConstraintSet 예제 프로젝트 _ 238
23.1 안드로이드 스튜디오로 예제 프로젝트 생성하기 _ 238
23.2 액티비티에 뷰 추가하기 _ 239
23.3 뷰 속성 설정하기 _ 240
23.4 뷰 ID 생성하고 사용하기 _ 241
23.5 제약 설정 구성하기 _ 242
23.6 EditText 뷰를 추가하기 _ 243
23.7 dp를 px로 변환하기 _ 245
23.8 요약 _ 246

CHAPTER 24 안드로이드 이벤트 처리 개요 _ 247
24.1 안드로이드 이벤트 이해하기 _ 247
24.2 android:onClick 리소스 사용하기 _ 248
24.3 이벤트 리스너와 콜백 메서드 _ 249
24.4 이벤트 처리 예제 _ 250
24.5 사용자 인터페이스 디자인하기 _ 250
24.6 이벤트 리스너와 콜백 메서드 _ 252
24.7 이벤트 소비하기 _ 253
24.8 요약 _ 255

CHAPTER 25 안드로이드 스튜디오의 Instant Run 사용하기 _ 257
25.1 Instant Run 개요 _ 257
25.2 Instant Run의 Swap 레벨 이해하기 _ 258
25.3 Instant Run의 활성화와 비활성화 _ 258
25.4 Instant Run 사용하기 _ 259
25.5 Instant Run 예제 프로젝트 _ 260
25.6 Instant Run의 Hot swap 수행시키기 _ 260
25.7 Instant Run의 Warm swap 수행시키기 _ 261
25.8 Instant Run의 Cold swap 수행시키기 _ 261
25.9 Run 버튼 _ 262
25.10 요약 _ 262

CHAPTER 26 터치와 다중 터치 이벤트 처리하기 _ 263
26.1 터치 이벤트 처리하기 _ 263
26.2 MotionEvent 객체 _ 264
26.3 터치 액션 이해하기 _ 264
26.4 다중 터치 처리하기 _ 265
26.5 다중 터치 애플리케이션 생성하기 _ 265
26.6 액티비티 사용자 인터페이스 디자인하기 _ 266
26.7 터치 이벤트 리스너 구현하기 _ 267
26.8 애플리케이션 실행시키기 _ 270
26.9 요약 _ 271

CHAPTER 27 안드로이드 제스처 감지 클래스로 일반 제스처 처리하기 _ 272
27.1 일반 제스처 감지와 처리하기 _ 273
27.2 제스처 처리 프로젝트 생성하기 _ 274
27.3 리스너 클래스 구현하기 _ 274
27.4 GestureDetector 인스턴스 생성하기 _ 277
27.5 onTouchEvent() 메서드 구현하기 _ 278
27.6 애플리케이션 테스트하기 _ 278
27.7 요약 _ 279

CHAPTER 28 커스텀 제스처와 핀치 인식 구현하기 _ 280
28.1 안드로이드 제스처 빌더 애플리케이션 _ 280
28.2 GestureOverlayView 클래스 _ 281
28.3 제스처 감지하기 _ 281
28.4 제스처 확인하기 _ 281
28.5 제스처 빌더 애플리케이션의 빌드와 실행 _ 281
28.6 제스처 파일 생성하기 _ 282
28.7 SD 카드에서 제스처 파일 추출하기 _ 283
28.8 예제 프로젝트 생성하기 _ 285
28.9 제스처 파일을 프로젝트에 추가하기 _ 285
28.10 사용자 인터페이스 디자인하기 _ 285
28.11 제스처 파일 로드하기 _ 286
28.12 이벤트 리스너 등록하기 _ 287
28.13 onGesturePerformed 메서드 구현하기 _ 288
28.14 애플리케이션 테스트하기 _ 289
28.15 GestureOverlayView 구성하기 _ 289
28.16 제스처 가로채기 _ 290
28.17 핀치 제스처 처리하기 _ 290
28.18 핀치 제스처 예제 프로젝트 _ 291
28.19 요약 _ 294

CHAPTER 29 안드로이드 프래그먼트 개요 _ 295
29.1 프래그먼트란? _ 295
29.2 프래그먼트 생성하기 _ 296
29.3 레이아웃 XML 파일을 사용하여 프래그먼트를 액티비티에 추가하기 _ 297
29.4 코드에서 프래그먼트를 추가하고 관리하기 _ 299
29.5 프래그먼트 이벤트 처리하기 _ 301
29.6 프래그먼트 간의 통신 구현하기 _ 302
29.7 요약 _ 304

CHAPTER 30 안드로이드 스튜디오에서 프래그먼트 사용하기 ― 예제 프로젝트 _ 305
30.1 예제 프래그먼트 애플리케이션 개요 _ 305
30.2 예제 프로젝트 생성하기 _ 306
30.3 첫 번째 프래그먼트 레이아웃 생성하기 _ 306
30.4 첫 번째 프래그먼트 클래스 생성하기 _ 308
30.5 두 번째 프래그먼트 레이아웃 생성하기 _ 310
30.6 프래그먼트를 액티비티에 추가하기 _ 312
30.7 ToolbarFragment가 액티비티와 통신하게 만들기 _ 315
30.8 액티비티에서 TextFragment로 통신하기 _ 320
30.9 애플리케이션 테스트하기 _ 321
30.10 요약 _ 322

CHAPTER 31 오버플로 메뉴 생성과 관리 _ 323
31.1 오버플로 메뉴 _ 323
31.2 오버플로 메뉴 생성하기 _ 324
31.3 오버플로 메뉴 보여주기 _ 325
31.4 메뉴 항목 선택에 응답하기 _ 326
31.5 체크 가능한 항목 그룹 생성하기 _ 326
31.6 안드로이드 스튜디오 메뉴 편집기 _ 328
31.7 예제 프로젝트 생성하기 _ 329
31.8 메뉴 항목 변경하기 _ 329
31.9 onOptionsItemSelected() 메서드 변경하기 _ 332
31.10 애플리케이션 테스트하기 _ 333
31.11 요약 _ 334

CHAPTER 32 안드로이드 전환 프레임워크 _ 335
32.1 안드로이드 전환과 장면 _ 336
32.2 전환에 인터폴레이터 사용하기 _ 337
32.3 장면 전환 사용하기 _ 338
32.4 코드의 커스텀 전환과 TransitionSet _ 339
32.5 XML의 커스텀 전환과 TransitionSet _ 341
32.6 인터폴레이터 사용하기 _ 342
32.7 커스텀 인터폴레이터 생성하기 _ 345
32.8 beginDelayedTransition 메서드 사용하기 _ 346
32.9 요약 _ 346

CHAPTER 33 beginDelayedTransition을 사용한 안드로이드 전환 _ 348
33.1 안드로이드 스튜디오 TransitionDemo 프로젝트 생성하기 _ 348
33.2 프로젝트 파일 준비하기 _ 349
33.3 beginDelayedTransition 애니메이션 구현하기 _ 349
33.4 우리 입맛에 맞는 전환 만들기 _ 352
33.5 요약 _ 354

CHAPTER 34 안드로이드 장면 전환 구현하기 _ 355
34.1 장면 전환 프로젝트 개요 _ 355
34.2 안드로이드 스튜디오 SceneTransitions 프로젝트 생성하기 _ 355
34.3 루트 컨테이너를 확인하고 준비하기 _ 356
34.4 첫 번째 장면 디자인하기 _ 356
34.5 두 번째 장면 디자인하기 _ 358
34.6 첫 번째 장면 보여주기 _ 359
34.7 두 번째 장면 로드하기 _ 360
34.8 전환 구현하기 _ 360
34.9 전환 파일 추가하기 _ 361
34.10 전환 세트의 로딩과 사용 _ 362
34.11 부가적인 전환 구성하기 _ 363
34.12 요약 _ 364

CHAPTER 35 플로팅 액션 버튼과 스낵바 사용하기 _ 365
35.1 머티리얼 디자인 _ 365
35.2 디자인 라이브러리 _ 366
35.3 플로팅 액션 버튼(FAB) _ 366
35.4 스낵바 _ 367
35.5 예제 프로젝트 생성하기 _ 368
35.6 프로젝트 살펴보기 _ 368
35.7 플로팅 액션 버튼 변경하기 _ 370
35.8 ListView를 콘텐트 레이아웃에 추가하기 _ 373
35.9 ListView에 항목 추가하기 _ 373
35.10 액션을 스낵바에 추가하기 _ 376
35.11 요약 _ 378

CHAPTER 36 탭 인터페이스 생성하기 _ 379
36.1 ViewPager 개요 _ 379
36.2 TabLayout 컴포넌트 개요 _ 380
36.3 TabLayoutDemo 프로젝트 생성하기 _ 380
36.4 첫 번째 프래그먼트 생성하기 _ 381
36.5 프래그먼트 복제하기 _ 382
36.6 TabLayout과 ViewPager 추가하기 _ 384
36.7 Pager 어댑터 생성하기 _ 385
36.8 초기화 작업하기 _ 386
36.9 애플리케이션 테스트하기 _ 389
36.10 TabLayout 커스터마이징 _ 390
36.11 아이콘 탭 항목 보여주기 _ 391
36.12 요약 _ 392

CHAPTER 37 RecyclerView와 CardView 사용하기 _ 393
37.1 RecyclerView 개요 _ 393
37.2 CardView 개요 _ 396
37.3 라이브러리를 프로젝트에 추가하기 _ 398
37.4 요약 _ 398

CHAPTER 38 RecyclerView와 CardView 예제 프로젝트 _ 399
38.1 CardDemo 프로젝트 생성하기 _ 399
38.2 플로팅 액션 버튼 삭제하기 _ 400
38.3 RecyclerView와 CardView 라이브러리 추가하기 _ 400
38.4 CardView 레이아웃 디자인하기 _ 401
38.5 RecyclerView 추가하기 _ 402
38.6 RecyclerView 어댑터 생성하기 _ 403
38.7 이미지 파일 추가하기 _ 406
38.8 RecyclerView 컴포넌트 초기화하기 _ 407
38.9 애플리케이션 테스트하기 _ 408
38.10 카드 선택에 응답하기 _ 408
38.11 요약 _ 410

CHAPTER 39 앱 바와 컬랩싱 툴바 레이아웃 사용하기 _ 411
39.1 AppBar 개요 _ 411
39.2 예제 프로젝트 _ 412
39.3 RecyclerView와 Toolbar 연동시키기 _ 413
39.4 컬랩싱 툴바 레이아웃 개요 _ 415
39.5 제목과 스크림 색상 변경하기 _ 419
39.6 요약 _ 420

CHAPTER 40 내비게이션 드로어 구현하기 _ 421
40.1 내비게이션 드로어 개요 _ 421
40.2 드로어를 열거나 닫기 _ 423
40.3 드로어 항목 선택에 응답하기 _ 424
40.4 내비게이션 드로어 액티비티 템플릿 사용하기 _ 425
40.5 내비게이션 드로어 템플릿으로 프로젝트 생성하기 _ 425
40.6 템플릿 레이아웃 리소스 파일 _ 426
40.7 헤더 색상 리소스 파일 _ 426
40.8 템플릿 메뉴 리소스 파일 _ 427
40.9 템플릿 코드 _ 427
40.10 앱 실행하기 _ 428
40.11 요약 _ 429

CHAPTER 41 안드로이드 스튜디오 마스터/디테일 플로 _ 430
41.1 마스터디테일 플로 _ 430
41.2 마스터디테일 플로 액티비티 생성하기 _ 432
41.3 마스터디테일 플로 템플릿 살펴보기 _ 434
41.4 마스터디테일 플로 템플릿 변경하기 _ 436
41.5 콘텐트 모델 변경하기 _ 436
41.6 디테일 패널 변경하기 _ 438
41.7 WebsiteDetailFragment 클래스 변경하기 _ 439
41.8 WebsiteListActivity 클래스 수정하기 _ 441
41.9 매니페스트 퍼미션 추가하기 _ 441
41.10 애플리케이션 실행하기 _ 442
41.11 요약 _ 443

CHAPTER 42 안드로이드 인텐트 개요 _ 444
42.1 인텐트 개요 _ 444
42.2 명시적 인텐트 _ 445
42.3 액티비티에서 데이터 반환하기 _ 447
42.4 암시적 인텐트 _ 448
42.5 인텐트 필터 사용하기 _ 448
42.6 인텐트 사용 가능 여부 확인하기 _ 449
42.7 요약 _ 450

CHAPTER 43 명시적 인텐트 예제 프로젝트 _ 451
43.1 예제 프로젝트 생성하기 _ 451
43.2 ActivityA의 사용자 인터페이스 디자인하기 _ 452
43.3 두 번째 액티비티 클래스 생성하기 _ 453
43.4 ActivityB의 사용자 인터페이스 레이아웃 디자인하기 _ 454
43.5 애플리케이션의 매니페스트 파일 살펴보기 _ 456
43.6 인텐트 생성하기 _ 457
43.7 인텐트 데이터 추출하기 _ 458
43.8 서브 액티비티로 ActivityB 론칭하기 _ 459
43.9 서브 액티비티에서 데이터 반환하기 _ 460
43.10 애플리케이션 테스트하기 _ 461
43.11 요약 _ 462

CHAPTER 44 암시적 인텐트 예제 프로젝트 _ 463
44.1 암시적 인텐트 예제 프로젝트 생성하기 _ 463
44.2 사용자 인터페이스 디자인하기 _ 464
44.3 암시적 인텐트 생성하기 _ 465
44.4 암시적 인텐트로 론칭되는 액티비티 생성하기 _ 466
44.5 사용자 인터페이스에 웹 뷰 추가하기 _ 466
44.6 인텐트 URL 얻기 _ 467
44.7 MyWebView 프로젝트의 매니페스트 파일 변경하기 _ 468
44.8 MyWebView 패키지를 장치에 설치하기 _ 470
44.9 애플리케이션 테스트하기 _ 471
44.10 요약 _ 473

CHAPTER 45 브로드캐스트 인텐트와 브로드캐스트 수신자 _ 474
45.1 브로드캐스트 인텐트 개요 _ 474
45.2 브로드캐스트 수신자 개요 _ 475
45.3 브로드캐스트 수신자로부터 결과 데이터 받기 _ 478
45.4 스티키 브로드캐스트 인텐트 _ 478
45.5 브로드캐스트 인텐트 예제 프로젝트 _ 478
45.6 예제 애플리케이션 생성하기 _ 479
45.7 브로드캐스트 인텐트를 생성하고 전송하기 _ 479
45.8 브로드캐스트 수신자 생성하기 _ 480
45.9 매니페스트 파일에 브로드캐스트 수신자 구성하기 _ 482
45.10 브로드캐스트 애플리케이션 테스트하기 _ 483
45.11 시스템 브로드캐스트 인텐트 리스닝하기 _ 484
45.12 요약 _ 487

CHAPTER 46 스레드와 스레드 핸들러 _ 488
46.1 스레드 개요 _ 488
46.2 애플리케이션의 메인 스레드 _ 488
46.3 스레드 핸들러 _ 489
46.4 기본적인 스레드 예제 프로젝트 _ 489
46.5 새로운 스레드 생성하기 _ 492
46.6 스레드 핸들러 구현하기 _ 493
46.7 핸들러에게 메시지 전달하기 _ 495
46.8 요약 _ 497

CHAPTER 47 스타트 서비스와 바운드 서비스 개요 _ 499
47.1 스타트 서비스 _ 499
47.2 인텐트 서비스 _ 500
47.3 바운드 서비스 _ 501
47.4 서비스 생명주기 _ 502
47.5 소멸된 서비스 재시작 옵션 제어하기 _ 502
47.6 매니페스트 파일에 서비스 선언하기 _ 503
47.7 시스템 구동 시 서비스 시작시키기 _ 504
47.8 요약 _ 505

CHAPTER 48 스타트 서비스 구현 예제 프로젝트 _ 506
48.1 예제 프로젝트 생성하기 _ 506
48.2 Service 클래스 생성하기 _ 507
48.3 서비스를 매니페스트 파일에 추가하기 _ 509
48.4 서비스 시작시키기 _ 509
48.5 인텐트 서비스 테스트하기 _ 510
48.6 Service 클래스 사용하기 _ 511
48.7 새로운 서비스 생성하기 _ 511
48.8 사용자 인터페이스 변경하기 _ 513
48.9 애플리케이션 실행하기 _ 514
48.10 서비스를 처리하는 새로운 스레드 생성하기 _ 515
48.11 요약 _ 517

CHAPTER 49 로컬 바운드 서비스 예제 프로젝트 _ 518
49.1 바운드 서비스 이해하기 _ 518
49.2 바운드 서비스 상호작용 옵션 _ 519
49.3 로컬 바운드 서비스 예제 프로젝트 _ 519
49.4 바운드 서비스를 프로젝트에 추가하기 _ 520
49.5 Binder 구현하기 _ 520
49.6 클라이언트를 서비스에 바인딩하기 _ 523
49.7 예제 프로젝트 마무리하기 _ 525
49.8 애플리케이션 테스트하기 _ 527
49.9 요약 _ 528

CHAPTER 50 원격 바운드 서비스 예제 프로젝트 _ 529
50.1 클라이언트에서 원격 서비스로 통신하기 _ 529
50.2 예제 애플리케이션 생성하기 _ 530
50.3 사용자 인터페이스 디자인하기 _ 530
50.4 원격 바운드 서비스 구현하기 _ 530
50.5 원격 서비스를 매니페스트 파일에 구성하기 _ 532
50.6 원격 서비스를 론칭하고 바인딩하기 _ 533
50.7 원격 서비스에 메시지 전송하기 _ 534
50.8 요약 _ 536

CHAPTER 51 안드로이드 7의 알림 개요 _ 537
51.1 알림 개요 _ 537
51.2 NotifyDemo 프로젝트 생성하기 _ 539
51.3 사용자 인터페이스 디자인하기 _ 539
51.4 두 번째 액티비티 생성하기 _ 540
51.5 알림을 생성하고 전달하기 _ 541
51.6 알림에서 액티비티를 시작시키기 _ 543
51.7 알림에 액션 추가하기 _ 544
51.8 알림에 소리 추가하기 _ 545
51.9 알림 메시지 묶기 _ 546
51.10 요약 _ 549

CHAPTER 52 안드로이드 7 알림의 직접 응답 구현 _ 550
52.1 DirectReply 프로젝트 생성하기 _ 550
52.2 사용자 인터페이스 디자인하기 _ 551
52.3 RemoteInput 객체 생성하기 _ 551
52.4 PendingIntent 객체 생성하기 _ 553
52.5 응답 액션 생성하기 _ 553
52.6 직접 응답 입력 데이터 수신하기 _ 556
52.7 알림 변경하기 _ 557
52.8 요약 _ 558

CHAPTER 53 안드로이드 스튜디오에서 Firebase 사용하기 _ 559
53.1 Firebase란? _ 559
53.2 Firebase에 서명하기 _ 560
53.3 FirebaseNotify 프로젝트 생성하기 _ 561
53.4 사용자 인터페이스 구성하기 _ 561
53.5 프로젝트를 Firebase에 연결하기 _ 561
53.6 새로운 Firebase 프로젝트 생성하기 _ 563
53.7 google-services.json 파일 _ 563
53.8 Firebase 라이브러리 추가하기 _ 564
53.9 요약 _ 566

CHAPTER 54 Firebase 원격 알림 사용하기 _ 567
54.1 Firebase 알림 전송하기 _ 567
54.2 알림 메시지 수신하기 _ 570
54.3 알림에 맞춤 데이터 포함시키기 _ 570
54.4 포그라운드 앱의 알림 처리하기 _ 572
54.5 요약 _ 574

CHAPTER 55 안드로이드 7의 다중 창 지원 개요 _ 575
55.1 분할 화면과 자유형식 및 PIP 모드 _ 575
55.2 다중 창 모드로 전환하기 _ 577
55.3 자유형식 모드의 지원 여부 확인하기 _ 579
55.4 다중 창 지원을 앱에서 활성화하기 _ 580
55.5 다중 창 관련 속성 지정하기 _ 580
55.6 액티비티에서 다중 창 모드인지 검사하기 _ 581
55.7 다중 창 관련 통지 받기 _ 582
55.8 다중 창 모드에서 액티비티를 시작시키기 _ 582
55.9 자유형식 모드로 실행되는 액티비티의 크기와 위치 구성하기 _ 583
55.10 요약 _ 584

CHAPTER 56 다중 창 예제 프로젝트 _ 585
56.1 다중 창 프로젝트 생성하기 _ 585
56.2 FirstActivity의 사용자 인터페이스 디자인하기 _ 585
56.3 두 번째 액티비티 추가하기 _ 586
56.4 두 번째 액티비티 시작시키기 _ 587
56.5 다중 창 모드 활성화하기 _ 588
56.6 다중 창 지원 테스트하기 _ 589
56.7 두 번째 액티비티를 다른 창에서 시작시키기 _ 590
56.8 자유형식 창의 위치와 크기 변경하기 _ 591
56.9 요약 _ 592

CHAPTER 57 안드로이드 SQLite 데이터베이스 개요 _ 593
57.1 데이터베이스 테이블 이해하기 _ 593
57.2 데이터베이스 스키마 개요 _ 594
57.3 열과 데이터 타입 _ 594
57.4 데이터베이스 행 _ 594
57.5 기본 키 개요 _ 595
57.6 SQLite란? _ 595
57.7 SQL _ 596
57.8 AVD에서 SQLite 사용해보기 _ 596
57.9 안드로이드 SQLite 자바 클래스 _ 600
57.10 요약 _ 602

CHAPTER 58 TableLayout과 TableRow 개요 _ 603
58.1 TableLayout과 TableRow _ 603
58.2 데이터베이스 프로젝트 생성하기 _ 605
58.3 사용자 인터페이스에 TableLayout 추가하기 _ 605
58.4 TableRow 구성하기 _ 606
58.5 버튼을 레이아웃에 추가하기 _ 608
58.6 레이아웃 마진 조정하기 _ 609
58.7 요약 _ 610

CHAPTER 59 안드로이드 SQLite 데이터베이스 예제 프로젝트 _ 611
59.1 데이터베이스 예제 개요 _ 611
59.2 데이터 모델 생성하기 _ 612
59.3 데이터 핸들러 구현하기 _ 613
59.4 액티비티 이벤트 메서드 구현하기 _ 618
59.5 애플리케이션 테스트하기 _ 620
59.6 요약 _ 621

CHAPTER 60 콘텐트 제공자 이해하기 _ 622
60.1 콘텐트 제공자란? _ 622
60.2 콘텐트 제공자 _ 623
60.3 콘텐트 URI _ 624
60.4 콘텐트 리졸버 _ 625
60.5 [provider] 매니페스트 요소 _ 625
60.6 요약 _ 626

CHAPTER 61 콘텐트 제공자 구현하기 _ 627
61.1 Database 프로젝트 활용하기 _ 627
61.2 콘텐트 제공자 패키지 추가하기 _ 628
61.3 콘텐트 제공자 클래스 생성하기 _ 628
61.4 Authority와 콘텐트 URI 구성하기 _ 630
61.5 콘텐트 제공자에 UriMatcher 구현하기 _ 631
61.6 콘텐트 제공자의 onCreate() 메서드 구현하기 _ 632
61.7 콘텐트 제공자의 insert() 메서드 구현하기 _ 633
61.8 콘텐트 제공자의 query() 메서드 구현하기 _ 634
61.9 콘텐트 제공자의 update() 메서드 구현하기 _ 636
61.10 콘텐트 제공자의 delete() 메서드 구현하기 _ 637
61.11 매니페스트 파일에 콘텐트 제공자 선언하기 _ 638
61.12 데이터베이스 핸들러 변경하기 _ 639
61.13 요약 _ 642

CHAPTER 62 구글 클라우드 스토리지 액세스하기 _ 643
62.1 스토리지 액세스 프레임워크 _ 643
62.2 스토리지 액세스 프레임워크 사용하기 _ 645
62.3 피커의 파일 내역 선별하기 _ 645
62.4 인텐트 결과 처리하기 _ 647
62.5 파일의 내용 읽기 _ 648
62.6 파일에 내용 쓰기 _ 649
62.7 파일 삭제하기 _ 649
62.8 파일의 지속적인 액세스 얻기 _ 650
62.9 요약 _ 650

CHAPTER 63 안드로이드 스토리지 액세스 프레임워크 예제 프로젝트 _ 652
63.1 스토리지 액세스 프레임워크 예제 프로젝트 개요 _ 652
63.2 스토리지 액세스 프레임워크 예제 프로젝트 생성 _ 653
63.3 사용자 인터페이스 디자인하기 _ 653
63.4 요청 코드 선언하기 _ 654
63.5 새로운 스토리지 파일 생성하기 _ 655
63.6 onActivityResult() 메서드 _ 657
63.7 스토리지 파일에 데이터 저장하기 _ 659
63.8 스토리지 파일을 열고 읽기 _ 661
63.9 스토리지 액세스 애플리케이션 테스트하기 _ 664
63.10 요약 _ 665

CHAPTER 64 비디오 재생 구현하기 _ 666
64.1 안드로이드 VideoView 클래스 개요 _ 666
64.2 안드로이드 MediaController 클래스 개요 _ 667
64.3 비디오 재생 테스트 관련 사항 _ 668
64.4 비디오 재생 예제 프로젝트 생성하기 _ 668
64.5 VideoPlayer 애플리케이션의 레이아웃 디자인하기 _ 669
64.6 VideoView 구성하기 _ 670
64.7 인터넷 퍼미션 추가하기 _ 670
64.8 MediaController를 VideoView에 추가하기 _ 672
64.9 onPreparedListener 설정하기 _ 673
64.10 요약 _ 674

CHAPTER 65 카메라 인텐트를 사용한 비디오 녹화와 이미지 캡처 _ 675
65.1 카메라 지원 여부 확인하기 _ 675
65.2 비디오 캡처 인텐트 호출하기 _ 676
65.3 이미지 캡처 인텐트 호출하기 _ 677
65.4 안드로이드 스튜디오 비디오 녹화 프로젝트 생성하기 _ 678
65.5 사용자 인터페이스 레이아웃 디자인하기 _ 678
65.6 카메라 확인하기 _ 679
65.7 비디오 캡처 인텐트 론칭하기 _ 680
65.8 인텐트의 반환 결과 처리하기 _ 681
65.9 애플리케이션 테스트하기 _ 682
65.10 요약 _ 682

CHAPTER 66 런타임 퍼미션 요청하기 _ 683
66.1 보통과 위험 퍼미션 이해하기 _ 683
66.2 퍼미션 예제 프로젝트 생성하기 _ 685
66.3 퍼미션 확인하기 _ 685
66.4 런타임 시에 퍼미션 요청하기 _ 687
66.5 퍼미션 요청 이유 제공하기 _ 689
66.6 퍼미션 앱 테스트하기 _ 691
66.7 요약 _ 692

CHAPTER 67 안드로이드 오디오 녹음과 재생하기 _ 693
67.1 오디오 재생하기 _ 693
67.2 MediaRecorder 클래스를 사용해서 오디오 녹음하기 _ 694
67.3 예제 프로젝트 개요 _ 696
67.4 AudioApp 프로젝트 생성하기 _ 696
67.5 사용자 인터페이스 디자인하기 _ 697
67.6 마이크 확인하기 _ 698
67.7 액티비티 초기화하기 _ 699
67.8 recordAudio() 메서드 구현하기 _ 700
67.9 stopAudio() 메서드 구현하기 _ 701
67.10 playAudio() 메서드 구현하기 _ 702
67.11 매니페스트 파일에 퍼미션 구성하기 _ 702
67.12 애플리케이션 테스트하기 _ 706
67.13 요약 _ 706

CHAPTER 68 구글 맵 API 사용하기 _ 707
68.1 구글 맵 안드로이드 API의 구성 요소 _ 707
68.2 구글 맵 프로젝트 생성하기 _ 709
68.3 개발자 서명 얻기 _ 709
68.4 애플리케이션 테스트하기 _ 712
68.5 지오코딩과 역-지오코딩 이해하기 _ 713
68.6 지도를 애플리케이션에 추가하기 _ 715
68.7 현재 위치 퍼미션 요청하기 _ 716
68.8 사용자의 현재 위치 보여주기 _ 718
68.9 지도 타입 변경하기 _ 719
68.10 맵 컨트롤을 사용자에게 보여주기 _ 720
68.11 지도 제스처 처리하기 _ 721
68.12 지도 표식 생성하기 _ 723
68.13 맵 카메라 제어하기 _ 724
68.14 요약 _ 726

CHAPTER 69 안드로이드 인쇄 프레임워크 사용하기 _ 727
69.1 안드로이드 인쇄 아키텍처 _ 727
69.2 인쇄 서비스 플러그인 _ 728
69.3 구글 클라우드 인쇄 _ 728
69.4 구글 드라이브로 인쇄하기 _ 729
69.5 PDF로 저장하기 _ 729
69.6 안드로이드 장치에서 인쇄하기 _ 730
69.7 안드로이드 애플리케이션에 포함되는 인쇄 지원 옵션 _ 732
69.8 요약 _ 737

CHAPTER 70 HTML과 웹 콘텐트 인쇄 예제 프로젝트 _ 738
70.1 HTML 인쇄 예제 애플리케이션 생성하기 _ 738
70.2 동적 HTML 콘텐트 인쇄하기 _ 739
70.3 기존 웹 페이지 인쇄 예제 애플리케이션 생성하기 _ 742
70.4 플로팅 액션 버튼 삭제하기 _ 743
70.5 사용자 인터페이스 레이아웃 디자인하기 _ 743
70.6 웹 페이지를 WebView에 로드하기 _ 745
70.7 인쇄 메뉴 옵션 추가하기 _ 746
70.8 요약 _ 749

CHAPTER 71 안드로이드 커스텀 문서 인쇄 _ 750
71.1 안드로이드 커스텀 문서 인쇄 개요 _ 750
71.2 커스텀 문서 인쇄 프로젝트 준비하기 _ 752
71.3 커스텀 인쇄 어댑터 생성하기 _ 753
71.4 onLayout() 콜백 메서드 구현하기 _ 754
71.5 onWrite() 콜백 메서드 구현하기 _ 758
71.6 페이지가 인쇄 범위에 있는지 확인하기 _ 761
71.7 페이지 캔버스에 콘텐트 그리기 _ 762
71.8 인쇄 작업 시작시키기 _ 765
71.9 애플리케이션 테스트하기 _ 766
71.10 요약 _ 767

CHAPTER 72 안드로이드 지문 인증 구현하기 _ 768
72.1 지문 인증 개요 _ 768
72.2 지문 인증 프로젝트 생성하기 _ 769
72.3 장치의 지문 인증 구성하기 _ 769
72.4 지문 퍼미션을 매니페스트 파일에 추가하기 _ 770
72.5 지문 아이콘 다운로드하기 _ 771
72.6 사용자 인터페이스 디자인하기 _ 772
72.7 KeyguardManager와 FingerprintManager 사용하기 _ 773
72.8 장치의 보안 설정 확인하기 _ 774
72.9 안드로이드 Keystore와 KeyGenerator 사용하기 _ 775
72.10 키 생성하기 _ 777
72.11 Cipher 초기화하기 _ 779
72.12 CryptoObject 인스턴스 생성하기 _ 781
72.13 지문 인증 처리 클래스 구현하기 _ 782
72.14 프로젝트 테스트하기 _ 785
72.15 요약 _ 786

CHAPTER 73 서로 다른 안드로이드 장치와 화면 처리하기 _ 787
73.1 서로 다른 장치 화면 처리하기 _ 787
73.2 화면 크기에 맞는 레이아웃 생성하기 _ 788
73.3 안드로이드 스튜디오에서 다양한 크기의 레이아웃 생성하기 _ 789
73.4 서로 다른 이미지 제공하기 _ 790
73.5 하드웨어 지원 여부 확인하기 _ 791
73.6 특정 장치에 맞는 애플리케이션 바이너리 제공하기 _ 792
73.7 요약 _ 792

CHAPTER 74 안드로이드 애플리케이션 릴리스하기 _ 793
74.1 릴리스 준비 절차 _ 793
74.2 빌드 변이 변경하기 _ 794
74.3 ProGuard 활성화하기 _ 795
74.4 키스토어 파일 생성하기 _ 795
74.5 개인 키 생성하기 _ 796
74.6 애플리케이션 APK 파일 생성하기 _ 797
74.7 구글 플레이 개발자 콘솔 계정 등록하기 _ 799
74.8 새로운 APK 버전을 구글 플레이 개발자 콘솔에 업로드하기 _ 799
74.9 APK 파일 분석하기 _ 801
74.10 요약 _ 803

CHAPTER 75 구글 플레이 인앱 결제를 애플리케이션에 통합하기 _ 804
75.1 구글 플레이 결제 라이브러리 설치하기 _ 804
75.2 인앱 결제 예제 프로젝트 생성하기 _ 805
75.3 결제 퍼미션을 매니페스트 파일에 추가하기 _ 806
75.4 IInAppBillingService.aidl 파일을 프로젝트에 추가하기 _ 807
75.5 유틸리티 클래스를 프로젝트에 추가하기 _ 808
75.6 사용자 인터페이스 디자인하기 _ 810
75.7 Click Me! 버튼 구현하기 _ 811
75.8 구글 플레이 개발자 콘솔과 구글 계정 _ 812
75.9 애플리케이션의 공개 인증 키 받기 _ 812
75.10 애플리케이션에서 구글 플레이 결제 설정하기 _ 814
75.11 구글 플레이 인앱 결제 구입을 초기 설정하기 _ 815
75.12 onActivityResult 메서드 구현하기 _ 816
75.13 구입 종료 리스너 구현하기 _ 817
75.14 구입 제품 소비하기 _ 818
75.15 IabHelper 인스턴스 해제하기 _ 819
75.16 Security.java 파일 변경하기 _ 820
75.17 인앱 결제 애플리케이션 테스트하기 _ 821
75.18 릴리스용 APK 빌드하기 _ 822
75.19 새로운 인앱 제품 생성하기 _ 823
75.20 알파 배포 채널로 애플리케이션 제출하기 _ 824
75.21 인앱 결제 테스트 계정 추가하기 _ 824
75.22 그룹 테스트 구성하기 _ 826
75.23 인앱 구입의 문제 해결하기 _ 826
75.24 요약 _ 828

CHAPTER 76 안드로이드 스튜디오의 그래들 개요 _ 829
76.1 그래들 개요 _ 829
76.2 그래들과 안드로이드 스튜디오 _ 830
76.3 최상위 수준의 그래들 빌드 파일 _ 832
76.4 모듈 수준의 그래들 빌드 파일들 _ 833
76.5 빌드 파일에 서명 설정 구성하기 _ 837
76.6 명령행에서 그래들 작업 실행하기 _ 838
76.7 요약 _ 840

CHAPTER 77 안드로이드 스튜디오 그래들 빌드 예제 프로젝트 _ 841
77.1 빌드 변이 예제 프로젝트 생성하기 _ 842
77.2 빌드 플레이버를 모듈 빌드 파일에 추가하기 _ 842
77.3 플레이버를 프로젝트 구조에 추가하기 _ 845
77.4 리소스 파일을 플레이버에 추가하기 _ 847
77.5 빌드 플레이버 테스트하기 _ 848
77.6 빌드 변이와 클래스 파일 _ 849
77.7 빌드 플레이버에 패키지 추가하기 _ 849
77.8 각 플레이버의 액티비티 클래스 변경하기 _ 850
77.9 요약 _ 851

찾아보기 _ 853

※ 부록 A, B는 독자들의 이해를 위해 옮긴이가 작성한 특별 부록입니다. 아래의 사이트에서 예제 프로젝트 파일과 함께 무료로 다운로드받으실 수 있습니다. https://github.com/Jpub/AndroidStudio3

APPENDIX A 코틀린 핵심 파악하기: 개요와 실습 환경 구축
A.1 코틀린 언어 개요
A.2 자바 JDK 설치하기
A.3 코틀린 컴파일러 설치하기
A.4 코틀린으로 네이티브 애플리케이션 작성과 실행하기
A.5 요약

APPENDIX B 코틀린 핵심 파악하기: 구성 요소와 문법
B.1 코틀린 프로그램 구조
B.2 코틀린 변수
B.3 코틀린의 타입
B.4 연산자와 연산자 오버로딩
B.5 Null 타입 처리 메커니즘
B.6 코드 실행 제어
B.7 함수
B.8 클래스와 인터페이스
B.9 람다식
B.10 예외 처리
B.11 package와 import