Android Studio 2 Development Essentials by Neil Smyth Copyright c 2016 Neil Smyth. All rights reserved. Korean Translation Copyright c 2016 by J-Pub. co. The Korean edition is published by arrangement with Neil Smyth through Agency-One, Seoul. 이 책의 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 제이펍 출판사에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단복제를 금합니다. 초판 1쇄 발행 2016년 6월 10일 지은이 닐 스미스 옮긴이 심재철 펴낸이 장성두 펴낸곳 제이펍 출판신고 2009년 11월 10일 제406-2009 - 000087호 주소 경기도 파주시 회동길 159 3층 3-B호 전화 070-8201 - 9010 / 팩스 02-6280 - 0405 홈페이지 www.jpub.kr / 원고투고 jeipub@gmail.com 독자문의 readers.jpub@gmail.com / 교재문의 jeipubmarketer@gmail.com 편집부 이민숙, 황유진, 이 슬, 이주원 / 소통 기획팀 민지환, 현지환 용지 신승지류유통 / 인쇄 해외정판사 / 제본 광우제책사 ISBN 979-11 - 85890-55 - 5 (93000) 값 36,000원 이 책은 저작권법에 따라 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금지하며, 이 책 내용의 전부 또는 일부를 이용하려면 반드시 저작권자와 제이펍의 서면동의를 받아야 합니다. 잘못된 책은 구입하신 서점에서 바꾸어 드립니다. 제이펍은 독자 여러분의 아이디어와 원고 투고를 기다리고 있습니다. 책으로 펴내고자 하는 아이디어나 원고가 있으신 분께서는 책의 간단한 개요와 차례, 구성과 저(역)자 약력 등을 메일로 보내주세요. jeipub@gmail.com
드리는 말씀 이 책은 핵심만 골라 배우는 안드로이드 스튜디오 의 개정판입니다. 이 책에 기재된 내용을 기반으로 한 운용 결과에 대해 저/역자, 소프트웨어 개발자 및 제공자, 제이펍 출판사는 일체의 책임을 지지 않으므로 양해 바랍니다. 이 책에 기재한 회사명 및 제품명은 각 회사의 상표 및 등록명입니다. 이 책에서는 TM, C, R 등의 기호를 생략하고 있습니다. 이 책에서 사용하고 있는 실제 제품 버전은 독자의 학습 시점에 따라 책의 버전과 다를 수 있습니다. 이 책에 나오는 각종 예제의 안드로이드 스튜디오 프로젝트 파일들은 다음 사이트에서 다운로드할 수 있습니다. - https://github.com/jpub/androidstudio2 책의 내용과 관련된 문의사항은 옮긴이나 출판사로 연락주시기 바랍니다. - 옮긴이: jcspro@hanafos.com - 출판사: readers.jpub@gmail.com
차 례 xxiv xxvi CHAPTER 1 CHAPTER 2 CHAPTER 3 개요 _ 1 1.1 안드로이드 스튜디오의 장점 2 1.2 소스 코드 다운로드하기 3 1.3 단축키와 코드 표기 4 1.4 독자 A/S 5 1.5 오탈자 5 안드로이드 스튜디오 개발 환경 구성하기 _ 6 2.1 개발 시스템 요구 사항 6 2.2 자바 JDK 설치하기 7 2.3 리눅스에서 설치하기 10 2.4 안드로이드 스튜디오 패키지 다운로드하기 11 2.5 안드로이드 스튜디오 설치하기 11 2.6 안드로이드 스튜디오 설정 위저드 17 2.7 가장 최신 버전의 안드로이드 SDK 패키지 설치하기 18 2.8 명령행에서 안드로이드 SDK 도구 사용하기 21 2.9 안드로이드 스튜디오와 SDK 버전 업그레이드하기 24 2.10 안드로이드 SDK와 자바 JDK 설치 경로 변경하기 25 2.11 요약 25 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기 _ 26 3.1 새로운 안드로이드 프로젝트 생성하기 26 3.2 프로젝트와 SDK 설정 정의하기 28 3.3 액티비티 생성하기 30 3.4 애플리케이션 변경하기 31 3.5 레이아웃과 리소스 파일 살펴보기 38 3.6 레이아웃 미리보기 41 3.7 요약 42 차 례 v
CHAPTER 4 CHAPTER 5 CHAPTER 6 CHAPTER 7 안드로이드 스튜디오 UI둘러보기 _43 4.1 웰컴 스크린 43 4.2 메인 창 44 4.3 도구 창 46 4.4 안드로이드 스튜디오의 단축키 51 4.5 스위처와 최근 파일 기능을 이용한 내비게이션 51 4.6 안드로이드 스튜디오 테마 변경하기 52 4.7 요약 53 안드로이드 스튜디오에서 AVD생성하기 _54 5.1 AVD 개요 54 5.2 새로운 AVD 생성하기 56 5.3 에뮬레이터 시작하기 62 5.4 AVD에서 애플리케이션 실행하기 62 5.5 Run/Debug 구성 65 5.6 실행 중인 애플리케이션 중단시키기 66 5.7 명령행에서 AVD 생성하기 68 5.8 AVD 구성 파일들 70 5.9 AVD의 위치 이동과 이름 변경 71 5.10 Intel HAXM 사용으로 에뮬레이터 성능 향상시키기 72 5.11 요약 73 안드로이드 스튜디오 버전 2 AVD에뮬레이터사용과구성하기 _74 6.1 에뮬레이터 환경 74 6.2 에뮬레이터 툴바 75 6.3 줌 모드 사용하기 77 6.4 에뮬레이터 창의 크기 조정 77 6.5 확장 제어 옵션 77 6.6 드래그 - 드롭 80 6.7 모의 지문 구성하기 81 6.8 멀티 코어 지원 83 6.9 요약 84 실제 안드로이드 장치에서 애플리케이션 테스트하기 _ 85 7.1 ADB 개요 85 7.2 안드로이드 장치에서 ADB 활성화하기 86 7.3 adb 연결 테스트하기 92 7.4 안드로이드 스튜디오에서 장치 확인하기 93 7.5 요약 95 vi 차 례
CHAPTER 8 CHAPTER 9 CHAPTER 10 CHAPTER 11 안드로이드 스튜디오 코드 편집기 _ 96 8.1 안드로이드 스튜디오 코드 편집기 96 8.2 편집기 창 나누기 99 8.3 코드 자동 완성 100 8.4 문장 자동 완성 102 8.5 매개변수 정보 103 8.6 코드 생성 103 8.7 코드 접어 감추기 104 8.8 빠른 문서 검색 106 8.9 소스 코드 형식 변환 107 8.10 요약 108 안드로이드 아키텍처 개요 _ 109 9.1 안드로이드 소프트웨어 스택 109 9.2 리눅스 커널 110 9.3 안드로이드 런타임 ART 111 9.4 안드로이드 라이브러리 111 9.5 애플리케이션 프레임워크 113 9.6 애플리케이션 114 9.7 요약 114 액티비티와 인텐트 개요 _ 115 10.1 안드로이드 액티비티 115 10.2 안드로이드 인텐트 116 10.3 브로드캐스트 인텐트 116 10.4 브로드캐스트 수신자 117 10.5 안드로이드 서비스 117 10.6 콘텐트 제공자 118 10.7 애플리케이션 매니페스트 118 10.8 애플리케이션 리소스 118 10.9 애플리케이션 컨텍스트 119 10.10 요약 119 안드로이드 애플리케이션과 액티비티 생명주기 _ 120 11.1 안드로이드 애플리케이션과 리소스 관리 120 11.2 안드로이드 프로세스 상태 121 11.3 액티비티 생명주기 122 11.4 액티비티 스택 123 11.5 액티비티 상태 124 11.6 구성 변경 124 11.7 요약 125 차 례 vii
CHAPTER 12 CHAPTER 13 CHAPTER 14 CHAPTER 15 CHAPTER 16 액티비티 상태 변화 처리하기 _ 126 12.1 Activity 클래스 126 12.2 동적 상태 vs. 영속적 상태 130 12.3 안드로이드 액티비티 생명주기 메서드 131 12.4 액티비티 생애 133 12.5 요약 134 액티비티 상태 변화 예제 _ 135 13.1 상태 변화 예제 프로젝트 생성하기 135 13.2 사용자 인터페이스 디자인하기 136 13.3 액티비티 생명주기 메서드 오버라이딩 138 13.4 로그캣 패널의 메시지 필터링하기 142 13.5 애플리케이션 실행하기 143 13.6 액티비티로 실험하기 144 13.7 요약 147 액티비티 상태를 저장하고 복원하기 _ 148 14.1 동적 상태 저장 148 14.2 사용자 인터페이스 상태의 자동 저장과 복원 149 14.3 Bundle 클래스 150 14.4 상태 데이터 저장하기 151 14.5 상태 데이터 복원하기 154 14.6 애플리케이션 테스트하기 154 14.7 요약 154 안드로이드 뷰, 뷰 그룹, 레이아웃 _ 156 15.1 서로 다른 안드로이드 장치를 위한 디자인 156 15.2 뷰와 뷰 그룹 157 15.3 안드로이드 레이아웃 매니저 157 15.4 뷰 계층 구조 159 15.5 사용자 인터페이스 생성 161 15.6 요약 161 안드로이드 스튜디오 디자이너 도구 살펴보기 _ 162 16.1 Basic vs. Empty 액티비티 템플릿 162 16.2 안드로이드 스튜디오 디자이너 165 16.3 디자인 모드 165 16.4 텍스트 모드 167 16.5 속성 설정하기 169 16.6 타입 변환 170 16.7 커스텀 장치 정의 생성하기 170 16.8 요약 171 viii 차 례
CHAPTER 17 CHAPTER 18 CHAPTER 19 CHAPTER 20 안드로이드 스튜디오 디자이너 도구로 UI 디자인하기 _ 172 17.1 안드로이드 스튜디오 디자이너 도구 예제 프로젝트 생성하기 172 17.2 새로운 액티비티 생성하기 173 17.3 사용자 인터페이스 디자인하기 175 17.4 뷰 속성 변경하기 176 17.5 애플리케이션 실행하기 177 17.6 XML 레이아웃 직접 생성하기 177 17.7 계층 구조 뷰어 사용하기 180 17.8 요약 183 자바 코드로 안드로이드 UI생성하기 _184 18.1 자바 코드 vs. XML 레이아웃 파일 184 18.2 뷰 생성하기 185 18.3 속성과 레이아웃 매개변수 186 18.4 안드로이드 스튜디오로 예제 프로젝트 생성하기 186 18.5 액티비티에 뷰 추가하기 187 18.6 뷰 속성 설정하기 188 18.7 레이아웃 매개변수와 룰 추가하기 189 18.8 뷰 ID 사용하기 192 18.9 dp를 px로 변환하기 194 18.10 요약 196 안드로이드 스튜디오 디자이너에서 GridLayout매니저사용하기 _197 19.1 안드로이드 GridLayout과 Space 클래스 197 19.2 GridLayout 예제 198 19.3 GridLayout 프로젝트 생성하기 198 19.4 GridLayout 인스턴스 생성하기 199 19.5 GridLayout 셀에 뷰 추가하기 200 19.6 행과 열의 이동과 삭제 202 19.7 여러 행과 열로 구성된 셀 구현하기 203 19.8 GridLayout의 자식 뷰 gravity 변경하기 203 19.9 요약 206 XML레이아웃리소스로GridLayout사용하기 _207 20.1 XML 리소스 파일의 GridLayout 207 20.2 GridLayout에 자식 뷰 추가하기 209 20.3 복수 셀과 셀의 그래비티 및 마진 선언하기 210 20.4 요약 212 차 례 ix
CHAPTER 21 CHAPTER 22 CHAPTER 23 CHAPTER 24 안드로이드 이벤트 처리 개요 _ 213 21.1 안드로이드 이벤트 이해하기 213 21.2 android:onclick 리소스 사용하기 214 21.3 이벤트 리스너와 콜백 메서드 215 21.4 이벤트 처리 예제 216 21.5 사용자 인터페이스 디자인하기 216 21.6 이벤트 리스너와 콜백 메서드 218 21.7 이벤트 소비하기 220 21.8 요약 222 안드로이드 스튜디오의 Instant Run사용하기 _223 22.1 Instant Run 개요 223 22.2 Instant Run의 Swap 레벨 이해하기 224 22.3 Instant Run의 활성화와 비활성화 224 22.4 Instant Run 사용하기 225 22.5 Instant Run 예제 프로젝트 226 22.6 Instant Run의 Hot swap 수행시키기 226 22.7 Instant Run의 Warm swap 수행시키기 227 22.8 강제로 Warm swap 수행시키기 227 22.9 Instant Run의 Cold swap 수행시키기 228 22.10 매니페스트 변경하기 228 22.11 요약 229 터치와 다중 터치 이벤트 처리하기 _ 230 23.1 터치 이벤트 처리하기 230 23.2 MotionEvent 객체 231 23.3 터치 액션 이해하기 231 23.4 다중 터치 처리하기 232 23.5 다중 터치 애플리케이션 생성하기 232 23.6 액티비티 사용자 인터페이스 디자인하기 233 23.7 터치 이벤트 리스너 구현하기 235 23.8 애플리케이션 실행시키기 238 23.9 요약 239 안드로이드 제스처 감지 클래스로 일반 제스처 처리하기 _ 240 24.1 일반 제스처 감지와 처리하기 241 24.2 제스처 처리 프로젝트 생성하기 242 24.3 리스너 클래스 구현하기 242 24.4 GestureDetector 인스턴스 생성하기 245 24.5 ontouchevent( ) 메서드 구현하기 246 24.6 애플리케이션 테스트하기 246 24.7 요약 247 x 차 례
CHAPTER 25 CHAPTER 26 CHAPTER 27 커스텀 제스처와 핀치 인식 구현하기 _ 248 25.1 안드로이드 제스처 빌더 애플리케이션 248 25.2 GestureOverlayView 클래스 249 25.3 제스처 감지하기 249 25.4 제스처 확인하기 249 25.5 제스처 빌더 애플리케이션의 빌드와 실행 249 25.6 제스처 파일 생성하기 252 25.7 SD 카드에서 제스처 파일 추출하기 253 25.8 예제 프로젝트 생성하기 254 25.9 제스처 파일을 프로젝트에 추가하기 255 25.10 사용자 인터페이스 디자인하기 255 25.11 제스처 파일 로드하기 256 25.12 이벤트 리스너 등록하기 257 25.13 ongestureperformed 메서드 구현하기 258 25.14 애플리케이션 테스트하기 260 25.15 GestureOverlayView 구성하기 260 25.16 제스처 가로채기 261 25.17 핀치 제스처 처리하기 261 25.18 핀치 제스처 예제 프로젝트 262 25.19 요약 264 안드로이드 프래그먼트 개요 _ 265 26.1 프래그먼트란? 265 26.2 프래그먼트 생성하기 266 26.3 레이아웃 XML 파일을 사용하여 프래그먼트를 액티비티에 추가하기 267 26.4 코드에서 프래그먼트를 추가하고 관리하기 269 26.5 프래그먼트 이벤트 처리하기 271 26.6 프래그먼트 간의 통신 구현하기 272 26.7 요약 274 안드로이드 스튜디오에서 프래그먼트 사용하기 예제 프로젝트 _ 275 27.1 예제 프래그먼트 애플리케이션 개요 275 27.2 예제 프로젝트 생성하기 276 27.3 첫 번째 프래그먼트 레이아웃 생성하기 276 27.4 첫 번째 프래그먼트 클래스 생성하기 278 27.5 두 번째 프래그먼트 레이아웃 생성하기 280 27.6 프래그먼트를 액티비티에 추가하기 282 27.7 ToolbarFragment가 액티비티와 통신하게 만들기 285 27.8 액티비티에서 TextFragment로 통신하기 289 27.9 애플리케이션 테스트하기 290 27.10 요약 291 차 례 xi
CHAPTER 28 CHAPTER 29 CHAPTER 30 CHAPTER 31 오버플로 메뉴 생성과 관리 _ 292 28.1 오버플로 메뉴 292 28.2 오버플로 메뉴 생성하기 293 28.3 오버플로 메뉴 보여주기 294 28.4 메뉴 항목 선택에 응답하기 295 28.5 체크 가능한 항목 그룹 생성하기 295 28.6 예제 프로젝트 생성하기 297 28.7 메뉴 항목 변경하기 297 28.8 onoptionsitemselected( ) 메서드 변경하기 298 28.9 애플리케이션 테스트하기 300 28.10 요약 300 안드로이드 전환 프레임워크 _ 301 29.1 안드로이드 전환과 장면 302 29.2 전환에 인터폴레이터 사용하기 303 29.3 장면 전환 사용하기 304 29.4 코드의 커스텀 전환과 TransitionSet 305 29.5 XML의 커스텀 전환과 TransitionSet 307 29.6 인터폴레이터 사용하기 309 29.7 커스텀 인터폴레이터 생성하기 311 29.8 begindelayedtransition 메서드 사용하기 312 29.9 요약 312 begindelayedtransition을 사용한 안드로이드 전환 _ 314 30.1 안드로이드 스튜디오 TransitionDemo 프로젝트 생성하기 314 30.2 프로젝트 파일 준비하기 315 30.3 begindelayedtransition 애니메이션 구현하기 315 30.4 우리 입맛에 맞는 전환 만들기 318 30.5 요약 320 안드로이드 장면 전환 구현하기 _ 321 31.1 장면 전환 프로젝트 개요 321 31.2 안드로이드 스튜디오 SceneTransitions 프로젝트 생성하기 321 31.3 루트 컨테이너를 확인하고 준비하기 322 31.4 첫 번째 장면 디자인하기 322 31.5 두 번째 장면 디자인하기 325 31.6 첫 번째 장면 보여주기 327 31.7 두 번째 장면 로드하기 328 31.8 전환 구현하기 328 31.9 전환 파일 추가하기 329 31.10 전환 세트의 로딩과 사용 330 31.11 부가적인 전환 구성하기 331 31.12 요약 332 xii 차 례
CHAPTER 32 CHAPTER 33 CHAPTER 34 CHAPTER 35 플로팅 액션 버튼과 스낵바 사용하기 _ 333 32.1 머티리얼 디자인 333 32.2 디자인 라이브러리 334 32.3 플로팅 액션 버튼(FAB) 334 32.4 스낵바 335 32.5 예제 프로젝트 생성하기 336 32.6 프로젝트 살펴보기 336 32.7 플로팅 액션 버튼 변경하기 338 32.8 ListView를 콘텐트 레이아웃에 추가하기 341 32.9 ListView에 항목 추가하기 341 32.10 액션을 스낵바에 추가하기 344 32.11 요약 346 탭 인터페이스 생성하기 _ 347 33.1 ViewPager 개요 347 33.2 TabLayout 컴포넌트 개요 348 33.3 TabLayoutDemo 프로젝트 생성하기 348 33.4 첫 번째 프래그먼트 생성하기 349 33.5 프래그먼트 복제하기 351 33.6 TabLayout과 ViewPager 추가하기 352 33.7 Pager 어댑터 생성하기 353 33.8 초기화 작업하기 355 33.9 애플리케이션 테스트하기 357 33.10 TabLayout 커스터마이징 358 33.11 아이콘 탭 항목 보여주기 360 33.12 요약 361 RecyclerView와 CardView사용하기 _362 34.1 RecyclerView 개요 362 34.2 CardView 개요 365 34.3 라이브러리를 프로젝트에 추가하기 367 34.4 요약 367 RecyclerView와 CardView예제프로젝트 _368 35.1 CardDemo 프로젝트 생성하기 368 35.2 플로팅 액션 버튼 삭제하기 369 35.3 RecyclerView와 CardView 라이브러리 추가하기 370 35.4 CardView 레이아웃 디자인하기 370 35.5 RecyclerView 추가하기 371 35.6 RecyclerView 어댑터 생성하기 372 35.7 이미지 파일 추가하기 375 35.8 RecyclerView 컴포넌트 초기화하기 376 35.9 애플리케이션 테스트하기 377 35.10 카드 선택에 응답하기 377 35.11 요약 379 차 례 xiii
CHAPTER 36 CHAPTER 37 CHAPTER 38 CHAPTER 39 앱 바와 컬랩싱 툴바 레이아웃 사용하기 _ 380 36.1 AppBar 개요 380 36.2 예제 프로젝트 381 36.3 RecyclerView와 Toolbar 연동시키기 382 36.4 컬랩싱 툴바 레이아웃 개요 384 36.5 제목과 스크림 색상 변경하기 388 36.6 요약 389 내비게이션 드로어 구현하기 _ 390 37.1 내비게이션 드로어 개요 390 37.2 드로어를 열거나 닫기 392 37.3 드로어 항목 선택에 응답하기 393 37.4 내비게이션 드로어 액티비티 템플릿 사용하기 394 37.5 내비게이션 드로어 템플릿으로 프로젝트 생성하기 394 37.6 템플릿 레이아웃 리소스 파일 395 37.7 Header Coloring 리소스 파일 396 37.8 템플릿 메뉴 리소스 파일 396 37.9 템플릿 코드 396 37.10 앱 실행하기 397 37.11 요약 398 안드로이드 스튜디오 마스터/디테일 플로 _ 399 38.1 마스터/디테일 플로 399 38.2 마스터/디테일 플로 액티비티 생성하기 401 38.3 마스터/디테일 플로 템플릿 살펴보기 403 38.4 마스터/디테일 플로 템플릿 변경하기 405 38.5 콘텐트 모델 변경하기 405 38.6 디테일 패널 변경하기 407 38.7 WebsiteDetailFragment 클래스 변경하기 408 38.8 WebsiteListActivity 클래스 수정하기 410 38.9 매니페스트 퍼미션 추가하기 410 38.10 애플리케이션 실행하기 410 38.11 요약 412 안드로이드 인텐트 개요 _ 413 39.1 인텐트 개요 413 39.2 명시적 인텐트 414 39.3 액티비티에서 데이터 반환하기 416 39.4 암시적 인텐트 417 39.5 인텐트 필터 사용하기 417 39.6 인텐트 사용 가능 여부 확인하기 418 39.7 요약 419 xiv 차 례
CHAPTER 40 CHAPTER 41 CHAPTER 42 명시적 인텐트 예제 프로젝트 _ 420 40.1 예제 프로젝트 생성하기 420 40.2 ActivityA의 사용자 인터페이스 디자인하기 421 40.3 두 번째 액티비티 클래스 생성하기 423 40.4 ActivityB의 사용자 인터페이스 레이아웃 디자인하기 424 40.5 애플리케이션의 매니페스트 파일 살펴보기 425 40.6 인텐트 생성하기 426 40.7 인텐트 데이터 추출하기 427 40.8 서브 액티비티로 ActivityB 론칭하기 428 40.9 서브 액티비티에서 데이터 반환하기 430 40.10 애플리케이션 테스트하기 430 40.11 요약 431 암시적 인텐트 예제 프로젝트 _ 432 41.1 암시적 인텐트 예제 프로젝트 생성하기 432 41.2 사용자 인터페이스 디자인하기 433 41.3 암시적 인텐트 생성하기 434 41.4 암시적 인텐트로 론칭되는 액티비티 생성하기 435 41.5 사용자 인터페이스에 웹 뷰 추가하기 436 41.6 인텐트 URL 얻기 437 41.7 MyWebView 프로젝트의 매니페스트 파일 변경하기 439 41.8 MyWebView 패키지를 장치에 설치하기 440 41.9 애플리케이션 테스트하기 441 41.10 요약 443 브로드캐스트 인텐트와 브로드캐스트 수신자 _ 444 42.1 브로드캐스트 인텐트 개요 444 42.2 브로드캐스트 수신자 개요 445 42.3 브로드캐스트 수신자로부터 결과 데이터 받기 448 42.4 스티키 브로드캐스트 인텐트 448 42.5 브로드캐스트 인텐트 예제 프로젝트 448 42.6 예제 애플리케이션 생성하기 449 42.7 브로드캐스트 인텐트를 생성하고 전송하기 449 42.8 브로드캐스트 수신자 생성하기 450 42.9 매니페스트 파일에 브로드캐스트 수신자 구성하기 452 42.10 브로드캐스트 애플리케이션 테스트하기 453 42.11 시스템 브로드캐스트 인텐트 리스닝하기 454 42.12 요약 456 차 례 xv
CHAPTER 43 CHAPTER 44 CHAPTER 45 CHAPTER 46 스레드와 스레드 핸들러 _ 457 43.1 스레드 개요 457 43.2 애플리케이션의 메인 스레드 457 43.3 스레드 핸들러 458 43.4 기본적인 스레드 예제 프로젝트 458 43.5 새로운 스레드 생성하기 462 43.6 스레드 핸들러 구현하기 463 43.7 핸들러에게 메시지 전달하기 465 43.8 요약 467 스타트 서비스와 바운드 서비스 개요 _ 469 44.1 스타트 서비스 469 44.2 인텐트 서비스 470 44.3 바운드 서비스 471 44.4 서비스 생명주기 472 44.5 소멸된 서비스 재시작 옵션 제어하기 472 44.6 매니페스트 파일에 서비스 선언하기 473 44.7 시스템 구동 시 서비스 시작시키기 474 44.8 요약 475 스타트 서비스 구현 예제 프로젝트 _ 476 45.1 예제 프로젝트 생성하기 476 45.2 Service 클래스 생성하기 477 45.3 서비스를 매니페스트 파일에 추가하기 479 45.4 서비스 시작시키기 479 45.5 인텐트 서비스 테스트하기 480 45.6 Service 클래스 사용하기 481 45.7 새로운 서비스 생성하기 481 45.8 사용자 인터페이스 변경하기 483 45.9 애플리케이션 실행하기 485 45.10 서비스를 처리하는 새로운 스레드 생성하기 486 45.11 요약 488 로컬 바운드 서비스 예제 프로젝트 _ 489 46.1 바운드 서비스 이해하기 489 46.2 바운드 서비스 상호작용 옵션 490 46.3 로컬 바운드 서비스 예제 프로젝트 490 46.4 바운드 서비스를 프로젝트에 추가하기 491 46.5 Binder 구현하기 491 46.6 클라이언트를 서비스에 바인딩하기 494 46.7 예제 프로젝트 마무리하기 496 46.8 애플리케이션 테스트하기 499 46.9 요약 499 xvi 차 례
CHAPTER 47 CHAPTER 48 CHAPTER 49 CHAPTER 50 원격 바운드 서비스 예제 프로젝트 _ 501 47.1 클라이언트에서 원격 서비스로 통신하기 501 47.2 예제 애플리케이션 생성하기 502 47.3 사용자 인터페이스 디자인하기 502 47.4 원격 바운드 서비스 구현하기 503 47.5 원격 서비스를 매니페스트 파일에 구성하기 505 47.6 원격 서비스를 론칭하고 바인딩하기 506 47.7 원격 서비스에 메시지 전송하기 507 47.8 요약 508 안드로이드 SQLite데이터베이스개요 _509 48.1 데이터베이스 테이블 이해하기 509 48.2 데이터베이스 스키마 개요 510 48.3 열과 데이터 타입 510 48.4 데이터베이스 행 510 48.5 기본 키 개요 511 48.6 SQLite란? 511 48.7 SQL 512 48.8 AVD에서 SQLite 사용해보기 512 48.9 안드로이드 SQLite 자바 클래스 515 48.10 요약 518 TableLayout과 TableRow개요 _519 49.1 TableLayout과 TableRow 519 49.2 데이터베이스 프로젝트 생성하기 521 49.3 사용자 인터페이스에 TableLayout 추가하기 521 49.4 TableRow를 추가하고 구성하기 522 49.5 버튼을 레이아웃에 추가하기 523 49.6 레이아웃 마진 조정하기 525 49.7 요약 527 안드로이드 SQLite데이터베이스예제프로젝트 _528 50.1 데이터베이스 예제 개요 528 50.2 데이터 모델 생성하기 529 50.3 데이터 핸들러 구현하기 530 50.4 액티비티 이벤트 메서드 구현하기 535 50.5 애플리케이션 테스트하기 537 50.6 요약 538 차 례 xvii
CHAPTER 51 CHAPTER 52 CHAPTER 53 CHAPTER 54 콘텐트 제공자 이해하기 _ 539 51.1 콘텐트 제공자란? 539 51.2 콘텐트 제공자 540 51.3 콘텐트 URI 541 51.4 콘텐트 리졸버 542 51.5 <provider> 매니페스트 요소 542 51.6 요약 543 콘텐트 제공자 구현하기 _ 544 52.1 Database 프로젝트 활용하기 544 52.2 콘텐트 제공자 패키지 추가하기 545 52.3 콘텐트 제공자 클래스 생성하기 545 52.4 Authority와 콘텐트 URI 구성하기 547 52.5 콘텐트 제공자에 UriMatcher 구현하기 548 52.6 콘텐트 제공자의 oncreate( ) 메서드 구현하기 549 52.7 콘텐트 제공자의 insert( ) 메서드 구현하기 550 52.8 콘텐트 제공자의 query( ) 메서드 구현하기 551 52.9 콘텐트 제공자의 update( ) 메서드 구현하기 553 52.10 콘텐트 제공자의 delete( ) 메서드 구현하기 554 52.11 매니페스트 파일에 콘텐트 제공자 선언하기 556 52.12 데이터베이스 핸들러 변경하기 557 52.13 요약 559 구글 클라우드 스토리지 액세스하기 _ 560 53.1 스토리지 액세스 프레임워크 560 53.2 스토리지 액세스 프레임워크 사용하기 562 53.3 피커의 파일 내역 선별하기 562 53.4 인텐트 결과 처리하기 564 53.5 파일의 내용 읽기 565 53.6 파일에 내용 쓰기 566 53.7 파일 삭제하기 566 53.8 파일의 지속적인 액세스 얻기 567 53.9 요약 567 안드로이드 스토리지 액세스 프레임워크 예제 프로젝트 _ 569 54.1 스토리지 액세스 프레임워크 예제 프로젝트 개요 569 54.2 스토리지 액세스 프레임워크 예제 프로젝트 생성 570 54.3 사용자 인터페이스 디자인하기 570 54.4 요청 코드 선언하기 572 54.5 새로운 스토리지 파일 생성하기 574 54.6 onactivityresult( ) 메서드 575 54.7 스토리지 파일에 데이터 저장하기 577 54.8 스토리지 파일을 열고 읽기 580 xviii 차 례
54.9 스토리지 액세스 애플리케이션 테스트하기 582 54.10 요약 583 CHAPTER 55 CHAPTER 56 CHAPTER 57 CHAPTER 58 비디오 재생 구현하기 _ 584 55.1 안드로이드 VideoView 클래스 개요 584 55.2 안드로이드 MediaController 클래스 개요 585 55.3 비디오 재생 테스트 관련 사항 586 55.4 비디오 재생 예제 프로젝트 생성하기 586 55.5 VideoPlayer 애플리케이션의 레이아웃 디자인하기 587 55.6 VideoView 구성하기 588 55.7 인터넷 퍼미션 추가하기 588 55.8 MediaController를 VideoView에 추가하기 590 55.9 onpreparedlistener 설정하기 591 55.10 요약 592 카메라 인텐트를 사용한 비디오 녹화와 이미지 캡처 _ 593 56.1 카메라 지원 여부 확인하기 593 56.2 비디오 캡처 인텐트 호출하기 594 56.3 이미지 캡처 인텐트 호출하기 596 56.4 안드로이드 스튜디오 비디오 녹화 프로젝트 생성하기 596 56.5 사용자 인터페이스 레이아웃 디자인하기 596 56.6 카메라 확인하기 598 56.7 비디오 캡처 인텐트 론칭하기 599 56.8 인텐트의 반환 결과 처리하기 600 56.9 애플리케이션 테스트하기 601 56.10 요약 601 안드로이드 6의 런타임 퍼미션 _ 602 57.1 보통과 위험 퍼미션 이해하기 602 57.2 퍼미션 예제 프로젝트 생성하기 604 57.3 퍼미션 확인하기 604 57.4 런타임 시에 퍼미션 요청하기 606 57.5 퍼미션 요청 이유 제공하기 608 57.6 퍼미션 앱 테스트하기 610 57.7 요약 611 안드로이드 오디오 녹음과 재생하기 _ 612 58.1 오디오 재생하기 612 58.2 MediaRecorder 클래스를 사용해서 오디오 녹음하기 613 58.3 예제 프로젝트 개요 615 58.4 AudioApp 프로젝트 생성하기 615 58.5 사용자 인터페이스 디자인하기 616 58.6 마이크 확인하기 617 차 례 xix
58.7 액티비티 초기화하기 618 58.8 recordaudio( ) 메서드 구현하기 619 58.9 stopaudio( ) 메서드 구현하기 620 58.10 playaudio( ) 메서드 구현하기 621 58.11 매니페스트 파일에 퍼미션 구성하기 621 58.12 애플리케이션 테스트하기 625 58.13 요약 625 CHAPTER 59 CHAPTER 60 CHAPTER 61 구글 맵 API 사용하기 _ 626 59.1 구글 맵 안드로이드 API의 구성 요소 626 59.2 구글 맵 프로젝트 생성하기 628 59.3 개발자 서명 얻기 628 59.4 애플리케이션 테스트하기 631 59.5 지오코딩과 역-지오코딩 이해하기 632 59.6 지도를 애플리케이션에 추가하기 634 59.7 현재 위치 퍼미션 요청하기 635 59.8 사용자의 현재 위치 보여주기 637 59.9 지도 타입 변경하기 638 59.10 맵 컨트롤을 사용자에게 보여주기 639 59.11 지도 제스처 처리하기 640 59.12 지도 표식 생성하기 642 59.13 맵 카메라 제어하기 643 59.14 요약 645 안드로이드 인쇄 프레임워크 사용하기 _ 646 60.1 안드로이드 인쇄 아키텍처 646 60.2 인쇄 서비스 플러그인 647 60.3 구글 클라우드 인쇄 647 60.4 구글 드라이브로 인쇄하기 648 60.5 PDF로 저장하기 648 60.6 안드로이드 장치에서 인쇄하기 649 60.7 안드로이드 애플리케이션에 포함되는 인쇄 지원 옵션 651 60.8 요약 656 HTML과 웹 콘텐트 인쇄 예제 프로젝트 _ 657 61.1 HTML 인쇄 예제 애플리케이션 생성하기 657 61.2 동적 HTML 콘텐트 인쇄하기 658 61.3 기존 웹 페이지 인쇄 예제 애플리케이션 생성하기 661 61.4 플로팅 액션 버튼 삭제하기 662 61.5 사용자 인터페이스 레이아웃 디자인하기 662 61.6 웹 페이지를 WebView에 로드하기 664 61.7 인쇄 메뉴 옵션 추가하기 665 61.8 요약 668 xx 차 례
CHAPTER 62 CHAPTER 63 CHAPTER 64 CHAPTER 65 안드로이드 커스텀 문서 인쇄 _ 669 62.1 안드로이드 커스텀 문서 인쇄 개요 669 62.2 커스텀 문서 인쇄 프로젝트 준비하기 671 62.3 커스텀 인쇄 어댑터 생성하기 673 62.4 onlayout( ) 콜백 메서드 구현하기 674 62.5 onwrite( ) 콜백 메서드 구현하기 677 62.6 페이지가 인쇄 범위에 있는지 확인하기 681 62.7 페이지 캔버스에 콘텐트 그리기 681 62.8 인쇄 작업 시작시키기 684 62.9 애플리케이션 테스트하기 686 62.10 요약 686 안드로이드 지문 인증 구현하기 _ 687 63.1 지문 인증 개요 687 63.2 지문 인증 프로젝트 생성하기 688 63.3 장치의 지문 인증 구성하기 688 63.4 지문 퍼미션을 매니페스트 파일에 추가하기 689 63.5 지문 아이콘 다운로드하기 690 63.6 사용자 인터페이스 디자인하기 690 63.7 KeyguardManager와 FingerprintManager 사용하기 692 63.8 장치의 보안 설정 확인하기 693 63.9 안드로이드 Keystore와 KeyGenerator 사용하기 694 63.10 키 생성하기 696 63.11 Cipher 초기화하기 698 63.12 CryptoObject 인스턴스 생성하기 700 63.13 지문 인증 처리 클래스 구현하기 701 63.14 프로젝트 테스트하기 704 63.15 요약 704 서로 다른 안드로이드 장치와 화면 처리하기 _ 705 64.1 서로 다른 장치 화면 처리하기 705 64.2 화면 크기에 맞는 레이아웃 생성하기 706 64.3 서로 다른 이미지 제공하기 707 64.4 하드웨어 지원 여부 확인하기 708 64.5 특정 장치에 맞는 애플리케이션 바이너리 제공하기 708 64.6 요약 709 안드로이드 애플리케이션 릴리스하기 _ 710 65.1 릴리스 준비 절차 710 65.2 빌드 변이 변경하기 711 65.3 ProGuard 활성화하기 712 65.4 키스토어 파일 생성하기 712 65.5 개인 키 생성하기 713 차 례 xxi
65.6 애플리케이션 APK 파일 생성하기 714 65.7 구글 플레이 개발자 콘솔 계정 등록하기 715 65.8 새로운 APK 버전을 구글 플레이 개발자 콘솔에 업로드하기 716 65.9 요약 718 CHAPTER 66 CHAPTER 67 CHAPTER 68 구글 플레이 인앱 결제를 애플리케이션에 통합하기 _ 719 66.1 구글 플레이 결제 라이브러리 설치하기 719 66.2 인앱 결제 예제 프로젝트 생성하기 721 66.3 결제 퍼미션을 매니페스트 파일에 추가하기 721 66.4 IInAppBillingService.aidl 파일을 프로젝트에 추가하기 722 66.5 유틸리티 클래스를 프로젝트에 추가하기 724 66.6 사용자 인터페이스 디자인하기 725 66.7 Click Me! 버튼 구현하기 726 66.8 구글 플레이 개발자 콘솔과 구글 계정 728 66.9 애플리케이션의 공개 인증 키 받기 728 66.10 애플리케이션에서 구글 플레이 결제 설정하기 729 66.11 구글 플레이 인앱 결제 구입을 초기 설정하기 731 66.12 onactivityresult 메서드 구현하기 732 66.13 구입 종료 리스너 구현하기 733 66.14 구입 제품 소비하기 733 66.15 IabHelper 인스턴스 해제하기 735 66.16 Security.java 파일 변경하기 735 66.17 인앱 결제 애플리케이션 테스트하기 737 66.18 릴리스용 APK 빌드하기 737 66.19 새로운 인앱 제품 생성하기 738 66.20 알파 배포 채널로 애플리케이션 제출하기 739 66.21 인앱 결제 테스트 계정 추가하기 740 66.22 그룹 테스트 구성하기 741 66.23 인앱 구입의 문제 해결하기 742 66.24 요약 743 안드로이드 스튜디오의 그래들 개요 _ 744 67.1 그래들 개요 744 67.2 그래들과 안드로이드 스튜디오 745 67.3 최상위 수준의 그래들 빌드 파일 747 67.4 모듈 수준의 그래들 빌드 파일들 748 67.5 빌드 파일에 서명 설정 구성하기 751 67.6 명령행에서 그래들 작업 실행하기 753 67.7 요약 755 안드로이드 스튜디오 그래들 빌드 예제 프로젝트 _ 756 68.1 빌드 변이 예제 프로젝트 생성하기 757 68.2 Hello World! 문자열을 리소스로 추출하기 757 68.3 빌드 플레이버를 모듈 빌드 파일에 추가하기 757 xxii 차 례
68.4 플레이버를 프로젝트 구조에 추가하기 760 68.5 리소스 파일을 플레이버에 추가하기 761 68.6 빌드 플레이버 테스트하기 763 68.7 빌드 변이와 클래스 파일 764 68.8 빌드 플레이버에 패키지 추가하기 764 68.9 각 플레이버의 액티비티 클래스 변경하기 765 68.10 요약 766 APPENDIX A APPENDIX B 에뮬레이터에서 한글 사용하기 _ 767 A.1 한글 출력하기 767 A.2 한글 입력 771 A.3 애플리케이션에서 한글 입출력하기 774 Button의 textallcaps속성값설정 _777 782 차 례 xxiii
옮 긴 이 머 리말 정성과 최선을 다했습니다. 한마디로 요약해서 독자 여러분께 드리고 싶은 제 진심의 표현입니다. 용어 하나하나, 내용 모 두에 걸쳐 심사숙고하였으며, 실습용 프로젝트 코드의 작성 및 수정과 테스트를 병행하여 이 책을 완성하였습니다. 안드로이드 세계의 모든 길은 안드로이드 스튜디오로 통한다. 이제는 이 말이 기정사실화된 것 같습니다. 안드로이드 스튜디오의 버전이 올라가면서 더욱 강력해지고 쓸 만하게 되었기 때문이죠. 이 책에서는 안드로이드 스튜디오를 사용해서 안드로이드 애플리케이션을 개발하는 데 필요 한 핵심적인 내용을 알려줍니다. 즉, 안드로이드 스튜디오를 사용하는 데 꼭 필요한 내용은 물론이고 안드로이드 애플리케이션 개발에 반드시 알아야 할 내용까지 빠짐없이 가르쳐줍니 다. 그리고 이 모든 것을 안드로이드 스튜디오의 실습 프로젝트로 구성하여 독자 여러분이 직 접 만들어 체험하면서 쉽게 배울 수 있도록 구성되었습니다. 또한, 안드로이드 프로그래밍 기 법과 안드로이드 스튜디오의 최신 내용을 추가로 반영하고 있습니다. 따라서 안드로이드 스튜디오를 사용해서 안드로이드 애플리케이션 개발을 배우고 시작하려는 분들께 적극적으로 권하고 싶은 책입니다. 안드로이드 스튜디오를 빨리 파악하고 싶은 기존 개발자들께도 권하고 싶습니다. 이 책을 번역하면서 다음과 같은 부분에 중점을 두었습니다. xxiv 옮긴이 머리말
111 원서의 모든 내용을 안드로이드 스튜디오 최신 버전에 맞춰 수정하고 보충하였습니다. 222 333 용어 선정을 신중히 하고 독자 여러분의 이해를 돕는 데 필요한 설명을 많이 추가하였습니다. 책의 각종 프로젝트를 독자 여러분이 만들면서 실습하는 데 도움이 될 수 있도록 결함을 수정하고 미비한 점을 보완하였습니다. 여러 차례에 걸쳐 개선되면서 더욱 강력해진 안드로이드 스튜디오의 면모를 반영하여 제작된 이 책은 원서의 최신 개정판이라고 생각하셔도 좋습니다. 독자 여러분께 도움이 될 수 있는 책을 만들어야 한다는 집념이 있었기에 가능했던 것 같습니다. 이 책을 출간하는 데 아낌없는 배려와 수고를 해주신 제이펍 출판사의 장성두 사장님과 이민숙 과장님께 진심으로 감사드립 니다. 2016년 6월 역자 심재철 드림 옮긴이 머리말 xxv
베 타 리 더 후 기 강명원(Vital Hint Korea) 안드로이드 개발에 필요한 것들이 거의 모두 담겨 있고, 최신 안드로이드 관련 내용도 충실히 담겨 있습니다. 안드로이드 스튜디오의 모든 기능을 사용해보고 싶다면 추천하고픈 책입니다. 원고의 품질도 상당히 좋은 편이었으며, 오류도 거의 보이지 않았습니다. 다만, 베타리딩 기간 이 넉넉하지 않아 좀 더 꼼꼼하게 보지 못한 게 아쉽네요. 김선종(이상한모임) 안드로이드 스튜디오를 통한 앱 개발 프로그래밍 입문용 책입니다. 안드로이드 OS의 구조와 개념적인 설명이 포함되어 있어 안드로이드를 잘 모르는 사람도 이해하기 쉽습니다. 책에 있는 안드로이드 스튜디오의 팁과 노하우를 보고 내용을 꼼꼼히 살피면서 내용을 따라가다 보면, 눈앞에 어느새 안드로이드 앱이 만들어져 있을 것입니다. 노현석(이상한모임) 안드로이드 스튜디오가 구글 I/O를 통해서 발표된 지도 어느덧 3년이 되었습니다. 이미 많은 개발자가 사용하는 툴이지만, 아직까지 여러 이유로 이클립스로 개발하는 곳도 있습니다. 이 책은 이런 분들에게 안드로이드 스튜디오에서 작업하는 흐름을 소개하고 있습니다. 개발 IDE 가 바뀐 만큼 더 멋진 개발을 도와주는 안드로이드 스튜디오! 아직 접하시지 않은 분들에게 일독을 권합니다. xxvi 베타리더 후기
박수석(LG CNS) 안드로이드 스튜디오 설치부터 안드로이드 개발의 기초까지 확실히 배울 수 있는 책입니다. 특히, 초보자에게 가장 낯설게 느껴지는 용어에 대한 충실한 설명이 인상 깊습니다. 적절한 분량과 참고 그림이 지치지 않고 완주할 수 있도록 도와줄 것입니다. 송종근(위시컴퍼니) 제목을 보고 섣부른 판단을 한 제가 부끄러울 정도로 폭넓게 또 충실히 안드로이드 앱 제작 방법을 다루고 있습니다. 최신 안드로이드에서 지원하는 기능들을 이용해 앱을 제작하는 방 법과 앱을 만들 때 주의해야 하는 항목들을 가정교사로부터 공부하는 듯한 기분이었습니다. 범위도 내용도 다 좋았는데, 약간의 번역투 문체가 옥에 티로 남는 것 같습니다. 신승우(굿닥) 안드로이드 스튜디오로 안드로이드 개발을 시작한다면 이 책으로 시작해도 좋을 만큼 책 내 용이 충실합니다. 또한, 머티리얼 디자인 기반의 UI 개발 지식도 얻을 수 있어서 쉽고 빠르게 최신 UX 트렌드가 반영된 앱을 개발할 수 있을 것입니다. 베타리딩을 신청할 때 이 도서의 성 격이 안드로이드 스튜디오 IDE에 초점이 맞춰진 도서라고 생각하고 베타리딩을 신청하였는 데, 책 내용은 안드로이드 스튜디오 기반의 개발 환경에서 따라 하기 형태의 개발도서라서 책 제목이 변경되었으면 합니다. 윤필상(상일미디어고등학교) 안드로이드 개발을 위해 구글에서 개발한 최적의 프로그램인 안드로이드 스튜디오. 이 만능 도구의 기능을 온전히 다 사용하기 위한 책이었습니다. 안드로이드 애플리케이션을 개발하고 자 하는 사람들이라면 반드시 모니터 옆에 두고 계속 읽어야 할 모범 교과서라 생각합니다. 한 편, 학생들의 입장에서도 책을 읽어보았습니다. 편안하게 읽히고 어려운 개념을 많은 그림으 로 설명을 해주어 쉽게 접근할 수 있었습니다. 고등학생들이 보아도 충분히 이해할 수 있을 것 같아 구매를 권장해서 수업을 진행해 보고 싶은 생각이 듭니다. 베타리더 후기 xxvii
정연모(스윗트래커) 최신 기술을 다루는 안드로이드 서적은 부족하다고 생각했었는데, 오랜만에 추천할 만한 책 이 나와서 무척 기쁩니다. 이 책은 안드로이드 스튜디오의 기본적인 사용법과 기초적인 지식 그리고 안드로이드 최신 기술까지 두루 섭렵한 책이라고 생각합니다. 이 책 한 권으로 안드로 이드 개발 입문자뿐만 아니라 심도 있게 공부하고 싶은 사람에게도 추천하고 싶습니다. 정재우(용인정보고등학교) 도서의 품질은 전반적으로 만족스러웠습니다. 다만, 개발 툴 설치 이후에 기초 문법부터 설명 하는 것이 아니라 정말로 개발에 필요한 핵심 위주로 챕터를 구성하다 보니 안드로이드를 아 예 모르는 초보자가 처음부터 읽기에는 다소 어렵지 않을까 하는 생각이 듭니다. 그러나 안드 로이드 OS와 안드로이드 스튜디오를 최신 버전 기준으로 설명하고 있고, 필요할 땐 언제나 찾 아볼 수 있는 레퍼런스 형태의 구성은 이 책의 가치를 높여줄 것입니다. 한홍근(고려대학교 세종캠퍼스) 안드로이드 앱을 만들면서 이 기능이 필요해! 라고 생각될 때 참고하면 좋을 것 같습니다. 백 과사전과 같이 두꺼운 책을 처음부터 따라 하는 것보다 핵심 요소만 담아 필요한 부분만 보 고 적용할 수 있는 이 책이 좋다고 생각하는 이유입니다. 입문 단계를 넘어 다음 단계로 가고 자 하는 분들께 추천해 드립니다. 제이펍은 책에 대한 애정과 기술에 대한 열정이 뜨거운 베타리더들로 하여금 출간되는 모든 서적에 사전 검증을 시행하고 있습니다. xxviii 베타리더 후기
C H A P T E R 1 개요 이 책은 최신 버전의 안드로이드 스튜디오(Android Studio)와 안드로이드 SDK(Software Development Kit)를 사용해서 안드로이드 애플리케이션(application, 줄여서 app)을 개발하는 데 필 요한 기법을 가르쳐 준다. 안드로이드 스튜디오는 안드로이드 애플리케이션을 개발할 때 사용 하는 통합 개발 환경(IDE, Integrated Development Environment)이다. 우선은 안드로이드 애플리케이션을 개발하고 테스트하는 환경을 구축하는 데 필요한 내용을 설명한다. 그리고 안드로이드 스튜디오의 주요 기능과 사용법을 살펴본다. 예를 들어, 각종 도 구 창, 코드 편집기, 디자이너 도구와 같은 것들이다. 또한, 안드로이드 스튜디오 2.0 버전부터 새로 도입된 기능인 인스턴트 런(Instant Run)과 향상된 AVD(Android Virtual Device) 에뮬레이터 도 살펴본다. 그다음에 안드로이드의 아키텍처를 간략히 살펴본 후 안드로이드 스튜디오를 사용해서 애플 리케이션과 사용자 인터페이스를 설계하고 만드는 방법들을 자세히 알아볼 것이다. 이때 데이 터베이스, 콘텐트 제공자(content provider), 인텐트(intent)와 같은 여러 고급 주제들도 다룬다. 또 한, 터치 스크린 처리, 제스처 인식, 카메라 사용, 비디오와 오디오의 재생과 녹화 방법도 설명 한다. 그리고 인쇄, 애니메이션 화면 전환, 클라우드 기반 파일 스토리지도 다룬다. 이러한 보편적인 안드로이드 애플리케이션 개발 기법들 외에도 이 책에서는 구글 플레이 (Google Play)와 연관된 내용들도 설명한다. 구글 맵(Google Map) API를 사용한 지도 구현이 1
라든지, 구글 플레이 개발자 콘솔에 우리가 만든 애플리케이션을 게시하고 인앱 결제(in-app billing)를 하는 방법 등이다. 또한, 애플리케이션 프로젝트 파일들을 구성 및 관리하고 빌드(build)하기 위해 안드로이드 스 튜디오에서 플러그인하여 사용하는 자동화 프로젝트 시스템(도구)인 그래들(Gradle)에 대해서 도 살펴본다. 그리고 안드로이드 버전 5에 소개된 머티리얼(material) 디자인의 개념과 안드로이드 버전 6에 서 완벽하게 구현된 머티리얼 사용자 인터페이스도 설명한다. 즉, 플로팅 액션 버튼(floating action button), 스낵바(Snackbar), 탭 인터페이스(tabbed interface), 카드 뷰(card view), 내비게이션 드로어(navigation drawers), 컬랩싱 툴바(collapsing toolbar) 등이다. 또한, 변경된 퍼미션 메커니즘 과 지문 인식 구현 방법도 알아본다. 이 책에서는 여러분이 자바(Java) 프로그래밍을 해본 경험이 있다고 간주하므로 자바 언어에 관한 언급은 따로 하지 않을 것이다. 그리고 윈도우(Windows)나 맥(Mac) 또는 리눅스(Linux)가 실행되는 컴퓨터가 있고 안드로이드 스튜디오와 안드로이드 SDK를 다운로드 및 설치할 수 있 으면 시작 준비가 된 것이다. 이 책의 모든 본문과 그림 및 프로젝트 코드는 안드로이드 스튜디오 2.1.1 최신 버전을 사용하 여 작성되었다. 따라서 독자 여러분이 안드로이드 스튜디오를 사용한 안드로이드 프로그래밍 을 배우는 데 어려움이 없을 것이다. 1.1 안드로이드 스튜디오의 장점 안드로이드 스튜디오에서는 종전의 이클립스 IDE보다 훨씬 강력하고 특화된 기능을 제공한 다. 그리고 앞으로 구글에서는 구글 클라우드 플랫폼(Google Cloud Platform)과 연계시켜 더욱 확장된 기능을 제공할 것이다. 중요한 것만 요약하면 다음과 같다. 유연성이 좋은 그래들 (Gradle) 기반의 자동화 프로젝트 빌드 시스템을 사용한다(이클립스에 서는 Ant 사용). 하나의 프로젝트 코드로 여러 안드로이드 장치용 애플리케이션을 구현할 수 있다. 이 기 능은 안드로이드 웨어(Android Wear)에서 특히 유용하다. 구글의 각종 서비스와 다양한 장치 유형을 지원하는 각종 템플릿들이 있어서 프로젝트에 필요한 기본적인 코드와 파일들을 자동으로 생성해준다. 2 CHAPTER 1 개요
그래픽 레이아웃 편집기의 기능이 강력하고 사용하기 쉬워서 사용자 인터페이스 디자인이 편리하다. 코드의 성능이나 버전 호환성 및 기타 문제점을 잡아내는 Lint의 기능이 강화되었다. 구글 클라우드 플랫폼을 자체적으로 지원하여 구글 클라우드 메시징/앱 엔진과 쉽게 통합 할 수 있다. 우리의 코드를 사전에 분석하여 완성도를 보완해주고 리팩토링 (refactoring)을 해주는 각종 분석 도구를 지원한다. 1.2 소스 코드 다운로드하기 이 책에 나오는 각종 예제의 안드로이드 스튜디오 프로젝트 파일들은 다음에서 다운로드할 수 있다. URL https://github.com/jpub/androidstudio2 예제 프로젝트 코드를 안드로이드 스튜디오로 로드하는 절차는 다음과 같다. 111 222 Welcome to Android Studio 대화상자에서 Open an existing Android Studio project를 선 택하거나 안드로이드 스튜디오 메인 메뉴의 File Open...을 선택한다. 프로젝트 선택 대화상자가 나오면 열려는 프로젝트 관련 파일들이 있는 서브 디렉터리 (프 로젝트 이름과 동일함)를 선택하고 OK를 클릭한다. 333 Sync Android SDKs 대화상자가 나오면 OK를 클릭한다 (열려는 프로젝트에 지정되어 있는 안드 로이드 SDK 설치 디렉터리와 현재 사용 중인 컴퓨터의 안드로이드 SDK 설치 디렉터리가 달라서 이 대 화상자가 나오는 것이다. OK를 클릭하면 현재 사용 중인 컴퓨터의 안드로이드 SDK 설치 디렉터리가 프로젝트의 디폴트로 사용된다). 444 프로젝트가 로드된 후 아무 창도 열려 있지 않으면 Alt와 숫자 1[맥 OS X에서는 Cmd와 숫자 1] 키를 같이 눌러 프로젝트 도구 창을 연 후 필요한 파일을 편집기 창으로 로드한다. 이 책의 모든 실습 프로젝트는 최소 SDK 버전이 API 22: Android 5.1(Lollipop) 또는 API 23: Android 6.0(Marshmallow)로 지정되어 있다. 그리고 애플리케이션으로 실행할 때는 AVD 에 뮬레이터와 삼성 갤럭시 S6 엣지 스마트폰을 같이 사용하였다. 만일 다운로드한 프로젝트 소스를 에뮬레이터가 아닌 각자의 스마트폰이나 태블릿으로 실행하고자 할 때는 그 장치의 1.2 소스 코드 다운로드하기 3
안드로이드 버전과 같거나 또는 낮은 버전으로 최소 SDK 버전을 변경해야 한다. 이때는 프로 젝트 도구 창의 Gradle Scripts build.gradle (Module: app) 파일을 더블 클릭하여 편집기에 로드한 후, minsdkversion 번호를 해당 안드로이드 버전의 API 레벨 번호로 수정하고 실행하 면 된다(그림 1-1). 그림 1-1 또한, 이 책의 실습 프로젝트 애플리케이션을 에뮬레이터에서 실행할 때 한글로 입출력하고 싶다면 부록 A의 에뮬레이터에서 한글 처리 를 참조하자. 1.3 단축키와 코드 표기 이 책에서는 두 개 이상의 키보드 키를 누를 때 + 기호로 나타내었다. 예를 들어, Alt 키와 Enter 키를 같이 누를 때는 Alt + Enter로 표기하였다. 또한, 단축 키는 윈도우 키[맥 OS X 키]의 형태로 표시되어 있다. 예를 들면 Alt + Enter[Option + Enter]. 소스 코드의 삭제는 글자 가운데를 가로지르는 취소선으로 표시하였으며, 추가되는 코드는 진 한 글씨로 나타내었다. 4 CHAPTER 1 개요
1.4 독자 A/S 여러분이 만족하는 책이 되었으면 한다. 혹시 오류를 발견하거나 문의 사항이 있으면 jcspro@ hanafos.com 혹은 readers.jpub@gmail.com으로 메일을 보내 주기 바란다. 1.5 오탈자 이 책의 내용에 오류가 없도록 최선의 노력을 했지만, 혹시 오탈자가 있을지도 모르겠다. 그런 경우는 제이펍(www.jpub.kr)의 이 책 소개 페이지에 있는 정오표 코너에서 안내하도록 하겠다. 1.5 오탈자 5
C H A P T E R 2 안드로이드 스튜디오 개발환경구성하기 안드로이드 애플리케이션을 개발하기에 앞서 제일 먼저 할 일은 우리의 컴퓨터 시스템을 개발 플랫폼으로 구성하는 것이다. 그러기 위해서는 자바 JDK(Java Development Kit)와 안드로이드 스튜디오 IDE 및 안드로이드 SDK를 설치해야 한다. 단, 안드로이드 SDK는 안드로이드 스튜 디오 패키지에 포함되어 제공되므로 별도로 다운로드할 필요는 없다. 이 장에서는 그런 소프트웨어들의 다운로드와 설치에 대해 설명한다(윈도우, 맥 OS X, 리눅스 운 영체제 모두). 2.1 개발 시스템 요구 사항 안드로이드 애플리케이션 개발은 다음 중 어떤 운영체제에서도 가능하다(지원이 완전히 중단된 윈도우 XP 버전과 일반 지원이 중단된 윈도우 비스타의 경우도 현재는 가능하지만 앞으로는 사용하지 않 는 것이 좋다). 윈도우 7, 8, 10 (32비트 또는 64비트) 맥 OS X 10.8.5 이상(인텔 기반의 시스템) 리눅스 시스템: 2.15 버전 이상 또는 GNU C 라이브러리 (glibc) 이후 버전 그리고 필요한 하드웨어는 다음과 같다. 6
최소 2GB의 RAM(8GB 이상 권장) 4.5GB 이상의 디스크 공간 2.2 자바 JDK 설치하기 안드로이드 SDK는 자바 프로그래밍 언어를 사용해서 개발되었다. 마찬가지로, 안드로이드 애 플리케이션도 자바로 개발한다. 따라서 자바 JDK를 제일 먼저 설치해야 한다. 안드로이드 애플리케이션 개발 시 필요한 자바 JDK는 JDK SE(Standard Edition) 7 버전 이상이 면 된다. 그러나 앞으로는 안드로이드에서 자바 8 버전의 기능을 지원하는 Jack(Java Android Compiler Kit) 컴파일러를 사용하므로 최신 버전의 JDK를 설치해야 한다. 참고로, 안드로이 드 DEX 파일을 생성할 때 기존에는 javac(.java.class) dx(.class.dex)의 두 단계로 컴파일 하였지만, 새로운 Jack 컴파일러를 사용하면 (.java.jack.dex)의 형태, 즉 자바 바이트코드 (bytecode)가 생성되지 않고 한 번에 안드로이드 DEX 파일이 생성된다. 2.2.1 윈도우에서 설치하기 다음의 오라클(Oracle) 사이트에서 최신 윈도우용 JDK를 다운로드하자. URL http://www.oracle.com/technetwork/java/javase/downloads/index.html 이 웹 페이지의 맨 앞에 나오는 것이 최신 버전이다. JDK DOWNLOAD 버튼을 클릭하면 다 운로드 페이지가 나올 것이다. 거기에서 Accept License Agreement를 클릭한 후, Windows x86(32비트) 또는 Windows x64(64비트)용 exe 파일을 클릭하여 다운로드하면 된다. 그리고 다 운로드된 exe를 실행시켜 설치하자(설치할 위치만 지정하면 되므로 간단하다). 설치가 끝나면 다음과 같은 절차로 Path와 JAVA_HOME 두 개의 환경 변수를 지정한다 (윈도우 7). 111 시작 메뉴의 컴퓨터에서 오른쪽 마우스 버튼을 클릭한 후 속성을 선택한다. 222 시스템 창에서 고급 시스템 설정 클릭 고급 탭 선택 환경 변수 버튼을 누른다. 333 환경 변수 대화상자에서 시스템 변수의 새로 만들기 버튼을 누른다. 변수 이름은 JAVA_ HOME으로 입력하고(모두 대문자임에 유의), 변수 값은 JDK가 설치된 디렉터리를 입력한 후 확인 버튼을 누른다. 2.2 자바 JDK 설치하기 7
예를 들어, JDK가 C:\Program Files\Java\jdk1.8.0_77에 설치되었다면 다음을 입력한다. C: Program Files Java jdk1.8.0_77 만일 JAVA_HOME 변수가 이미 있다면 편집 버튼을 누르고 변수 값만 변경한다. 444 그다음에는 시스템 변수의 Path 변수를 찾고 편집 버튼을 누른다. 문자열의 맨 끝에 다음 을 추가한다. ;%JAVA_HOME% bin 이때 문자열의 맨 끝에 세미콜론(;)이 없다면 이처럼 제일 앞에 세미콜론(;)을 붙여야 한다. 555 각 대화상자에서 확인 버튼을 눌러 속성 창을 닫는다. 윈도우 8.1에서는 다음과 같이 환경 변수를 지정한다. 111 시작 화면에서 화면의 오른쪽 아래 모서리로 마우스 커서를 이동한 후, 메뉴의 검색 (Search)을 선택하고 제어판(Control Panel)을 입력한다. 검색 결과에서 제어판 아이콘이 나타 나면 클릭한다. 222 제어판 창이 열리면 오른쪽 위의 범주(Category)를 큰 아이콘(Large Icons)으로 선택한다. 그 리고 아이콘 목록에서 시스템(System)을 선택한다. 333 앞에서 설명한 2번부터 5번까지를 똑같이 수행한다. 윈도우 10에서는 다음과 같이 환경 변수를 지정한다. 111 바탕 화면에서 시작 버튼을 클릭하고 메뉴의 설정을 선택한다. 222 시스템 버튼을 클릭하고 왼쪽 제일 밑의 정보를 클릭한다. 333 앞에서 설명한 2번부터 5번까지를 똑같이 수행한다. 2.2.2 맥 OS X에서 설치하기 맥 OS X 최신 버전에는 기본적으로 자바가 설치되어 있지 않다. 자바의 설치 유무를 확인하 기 위해 터미널 창(terminal window)을 열고 다음 명령을 실행해보자. java -version 8 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
혹시 이전에 자바를 설치한 적이 있다면 다음과 같은 내용이 터미널 창에 나타날 것이다. java version "1.8.0_77" Java(TM) SE Runtime Environment (build...) Java HotSpot(TM) 64-Bit Server VM (build..., mixed mode) 그러나 자바가 설치되지 않은 경우는 오라클 자바 웹 페이지를 보여주는 More Info 버튼이 있 는 대화상자와 함께 다음 메시지가 나타난다. No Java runtime present, requesting install 오라클 자바 웹 페이지에 접속하여 맥 OS X용 자바 SE 8을 다운로드하자. 그리고 다운로드된 디 스크 이미지(.dmg 파일)를 열고 아이콘을 더블 클릭하여 자바 패키지를 설치한다(그림 2-1 참조). 그림 2-1 Java for OS X 인스톨러 창이 나타나고 JDK 설치가 진행될 것이다. 그리고 설치가 완료되면 터 미널 창에서 다음 명령을 실행하자. 앞에서처럼 자바 버전 정보가 터미널 창에 나올 것이다. java -version 2.2 자바 JDK 설치하기 9
2.3 리눅스에서 설치하기 만일 우분투(Ubuntu) 64비트 버전이 실행 중인 시스템이라면 다음과 같이 32비트 라이브러리 지원 패키지를 먼저 설치해야 한다. sudo apt-get install lib32stdc++6 그리고 윈도우 시스템에서처럼 다음의 오라클 웹사이트에서 리눅스용 자바 JDK 패키지를 다 운로드하자. URL http://www.oracle.com/technetwork/java/javase/downloads/index.html 리눅스 JDK 패키지는 두 가지 형태로 제공된다. 레드햇 엔터프라이즈(Red Hat Enterprise) 리눅 스, 페도라(Fedora), 센트OS(CentOS) 등의 레드햇 기반 리눅스 시스템에 설치하기 위한 RPM 포 맷과 우분투와 같은 다른 리눅스 시스템을 위한 tar 포맷이다. 레드햇 기반 리눅스 시스템에서는.rpm JDK 파일을 다운로드한 후에 터미널 창에서 rpm 명 령을 사용하여 설치한다. 예를 들어, 다운로드한 JDK 파일의 이름이 jdk-8u77-linux-x64.rpm 이라면 설치하는 명령은 다음과 같다. su rpm -ihv jdk-8u77-linux-x64.rpm tar 압축 패키지를 사용해서 설치할 때는 다음과 같이 하면 된다. 111 JDK를 설치할 디렉터리를 생성한다. 예를 들어, 여기서는 /home/demo/java로 할 것이다. 222 오라클 웹사이트에서 각자 시스템에 적합한 tar.gz 패키지를 다운로드한다. 333 1번의 디렉터리로 이동한 후 다음 명령을 실행한다. 여기서 <jdk-file>은 다운로드된 JDK 파일명으로 대체하면 된다. tar xvfz <jdk-file>.tar.gz 444 다운로드된 tar.gz 파일을 삭제한다. 555 JDK가 설치된 디렉터리 밑에 있는 bin 디렉터리 경로를 $PATH 변수에 추가한다. 만일 JDK를 설치한 디렉터리가 /home/demo/java/jdk1.8.0_77이면 다음 내용을 $PATH 환경 10 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
변수에 추가하면 된다. /home/demo/java/jdk1.8.0_77/bin 이 경우 우리 홈 디렉터리의.bashrc 파일에 하나의 명령을 추가하는 것이 일반적이다. 예를 들어, 우리 홈 디렉터리로 이동한 후 거기에 있는.bashrc 파일의 맨 끝에 다음 라인 을 추가하고 저장한다. export PATH=/home/demo/java/jdk1.8.0_77/bin:$PATH 이렇게 변경한 후에는 새로이 터미널 창을 열어 bash 셸(shell)을 사용할 때마다 JDK의 경로 가 $PATH 환경 변수에 포함될 것이다. 따라서 자바 컴파일러(javac)와 그 외의 각종 도구를 쉽게 사용할 수 있다. 2.4 안드로이드 스튜디오 패키지 다운로드하기 대부분의 안드로이드 애플리케이션 개발 작업은 안드로이드 스튜디오 환경에서 이루어진다. 안드로이드 스튜디오는 다음 웹 페이지에서 다운로드할 수 있다. URL http://developer.android.com/sdk/index.html 페이지 중앙의 DOWNLOAD ANDROID STUDIO FOR <각자 컴퓨터의 운영체제> 버튼을 누르면 접속한 컴퓨터의 운영체제에 맞는 최신 버전의 안드로이드 스튜디오 다운로드가 시작된다. 그 리고 그다음 화면에서 I have read and agree with the above terms and conditions 를 체크하 고 다운로드 버튼을 누르면 다운로드가 시작된다(파일 다운로드 대화상자가 나오는 경우는 저장 버 튼을 누르고 저장할 위치를 지정하면 된다). 2.5 안드로이드 스튜디오 설치하기 다운로드된 패키지에는 안드로이드 스튜디오와 안드로이드 SDK 및 플러그인 모두가 포함되 어 있어서 이것을 안드로이드 스튜디오 번들(bundle)이라고 한다. 따라서 다운로드된 패키지를 설치하면 한 번에 모두 설치되어 안드로이드 스튜디오에서 바로 애플리케이션 개발을 시작할 수 있다. 설치하는 방법은 운영체제에 따라 다르며 그 내용은 다음과 같다(최신 컴포넌트가 필요 할 때 실시간으로 다운로드되므로 인터넷 접속이 가능한 상태로 설치해야 한다). 2.5 안드로이드 스튜디오 설치하기 11
2.5.1 윈도우에서 설치하기 다운로드된 안드로이드 스튜디오 설치 파일(android-studio-bundle-<버전번호>-windows.exe)을 윈 도우 탐색기 창에서 찾은 후 더블 클릭하여 실행시키면 설치가 시작된다. 설치 절차는 간단 하고 쉬우며, 다음과 같다. 그림 2-2의 안드로이드 스튜디오 설치 대화상자가 나타나면 Next 버튼을 누른다. 그림 2-2 그러면 설치할 컴포넌트를 선택할 수 있는 대화상자가 나타난다(그림 2-3). 그림 2-3 12 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
안드로이드 스튜디오는 기본적으로 설치가 되며, AVD(Android Virtual Device)는 5장에서 생성할 것이므로 체크를 지우자. 그리고 안드로이드 SDK는 이미 설치된 것이 없을 때만 체크하면 된 다. Next 버튼을 누르면 안드로이드 SDK의 License Agreement 대화상자가 나타난다(그림 2-4). 그림 2-4 I Agree 버튼을 누른다. 그다음에는 안드로이드 스튜디오를 설치할 위치와 안드로이드 SDK를 설치할 위치를 지정할 수 있는 대화상자가 나타난다(그림 2-5). 그림 2-5 (이미 설치된 안드로이드 SDK를 사용하기 위해 그림 2-3에서 안드로이드 SDK의 체크를 지운 경우는 그림 2-5 대신 그 SDK의 위치를 지정하는 대화상자와 안드로이드 스튜디오의 설치 위치를 지정하는 대화상자 가 따로 나타난다.) 2.5 안드로이드 스튜디오 설치하기 13
여기에 나타난 디폴트 디렉터리에 설치해도 되고 Browse... 버튼을 눌러 위치를 변경해도 된다. Next 버튼을 누르면 시작 메뉴 폴더를 지정하는 대화상자가 나타난다(그림 2-6). Install 버튼을 누르면 설치가 시작된다. 그림 2-6 설치가 정상적으로 끝나면 그림 2-7의 대화상자가 나타나며, Next 버튼을 누르면 그림 2-8의 설치 완료 대화상자가 나타난다. 여기서는 기본적으로 Start Android Studio가 체크되어 있으 므로 Finish 버튼을 누르면 안드로이드 스튜디오가 최초로 실행된다. 이후의 설명은 더 뒤의 2.6 안드로이드 스튜디오 설정 위저드 절을 참조한다. 그림 2-7 14 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
그림 2-8 안드로이드 스튜디오 실행 파일은 32비트 버전(studio.exe)과 64비트 버전(studio64.exe)으로 제공 되므로 각자 시스템에 적합한 것을 사용해야 한다. 2.5.2 맥 OS X에서 설치하기 맥 OS X 버전의 안드로이드 스튜디오는 디스크 이미지 파일(.dmg)로 다운로드된다. 다운로드 가 완료되면 파인더(Finder) 창에서 그 파일(android-studio-ide-<버전 번호>-mac.dmg)을 찾아서 더 블 클릭하자. 그러면 그림 2-9와 같이 보일 것이다. 그림 2-9 2.5 안드로이드 스튜디오 설치하기 15
설치는 간단하다. Android Studio 아이콘을 마우스로 끌어서 응용 프로그램 폴더에 놓으면 된 다. 그러면 안드로이드 스튜디오 패키지가 시스템의 응용 프로그램 폴더에 설치될 것이다. 설치된 안드로이드 스튜디오를 실행할 때는 파인더 창을 사용해서 응용 프로그램 폴더에 있는 실행 파일을 찾아 더블 클릭하면 된다. 그리고 더 쉽게 실행시키려면 파인더 창의 안드로이드 스튜디오 실행 파일 아이콘을 마우스로 끌어서 Dock에 넣으면 된다(Dock은 윈도우 시스템의 작 업 표시줄과 유사하다). 안드로이드 스튜디오를 실행할 때 JVM을 찾을 수 없다는 에러 대화상자가 나타날 수 있다. 이 경우에는 Mac OS X 자바 6 JRE 패키지를 다운로드하고 설치할 필요가 있다. 이때는 다음 링크에 접속하여 애플 사이트에서 다운로드하면 된다. URL http://support.apple.com/kb/dl1572 그리고 OS X 자바 패키지가 설치되면 안드로이드 스튜디오가 에러 없이 실행될 것이다. 2.5.3 리눅스에서 설치하기 터미널 창을 열고 안드로이드 스튜디오를 설치할 디렉터리로 이동한 후에 다음 명령을 실행 한다. unzip /<패키지 경로>/android-studio-ide-<버전 번호>-linux.zip 다운로드된 안드로이드 스튜디오 번들 패키지는 android-studio라는 서브 디렉터리에 설치된 다. 따라서 이 명령이 /home/demo 디렉터리에서 실행되었다면 /home/demo/android-studio 밑에 압축이 풀려 설치될 것이다. 설치된 안드로이드 스튜디오를 실행할 때는 터미널 창을 열고 android-studio/bin 서브 디렉터 리로 이동한 후 다음 명령을 실행하면 된다../studio.sh 리눅스 시스템에서는 안드로이드 스튜디오 설치가 끝난 후에 다음과 같이 자바 JDK의 위치를 지정해야 한다. 16 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
111 안드로이드 스튜디오를 실행하면 그림 2-11의 웰컴 스크린이 나타난다. 222 대화상자의 오른쪽 아래에서 Configure Project Defaults Project Structure를 선택한다. 333 JDK가 설치된 전체 경로를 JDK location 필드에 입력한다. 444 Apply 버튼을 누른 후 다시 OK 버튼을 눌러 대화상자를 닫는다. 2.6 안드로이드 스튜디오 설정 위저드 안드로이드 스튜디오가 설치된 후 처음 실행될 때는 이전 버전의 안드로이드 스튜디오 설정 내역을 가져오기 위한 옵션을 제공하는 대화상자가 나타날 수 있다. 만일 여러분의 컴퓨터에 이전 버전의 안드로이드 스튜디오가 설치된 적이 있어서 새로 설치한 최신 버전에 그것의 설 정 내역을 가져오고자 한다면, 그 대화상자에서 I want to import my settings from a custom location 을 선택한다. 그러나 처음 설치하거나 이전 설정 내역이 필요 없는 경우는 I do not have a previous version of Android Studio or I do not want to import my settings 를 선택한다. 그다음에 OK 버튼을 누른다. 이어서 나타나는 대화상자에서 계속 Next 버튼을 누르면 그림 2-10의 설치 확인 대화상자가 나타난다. 그리고 Finish 버튼을 누르면 최신 버전의 각종 컴포넌트(SDK 포함)를 다운로드 및 업데이트한다. 그림 2-10 2.6 안드로이드 스튜디오 설정 위저드 17
모든 설치 작업이 끝나면 그림 2-11과 같은 안드로이드 스튜디오 웰컴 스크린(Welcome to Android Studio)이 나타날 것이다. 이후에 안드로이드 스튜디오를 실행할 때는 Setup Wizard가 나타나지 않고 곧바로 웰컴 스크린이 나타난다. 그림 2-11 2.7 가장 최신 버전의 안드로이드 SDK 패키지 설치하기 지금까지는 자바 JDK와 안드로이드 스튜디오 IDE 및 안드로이드 SDK를 설치하였다. 이제는 필요한 패키지들이 제대로 설치되었는지 그리고 누락된 패키지는 없는지를 확인해야 한다. 또 한, SDK의 다른 버전들(최신 버전 포함)도 추가로 설치 또는 제거할 수 있다. 그런 작업은 안드로이드 SDK에 포함된 도구(소프트웨어)인 안드로이드 SDK 매니저가 해주며, 안드로이드 스튜디오에서 메뉴로 선택하여 실행할 수 있다. 안드로이드 SDK의 각종 도구가 안드로이드 스튜디오에 플러그인되어 있기 때문에 애플리케이션 개발에 필요한 모든 작업을 안드로이드 스튜디오를 벗어나지 않고 쉽게 할 수 있는 것이다. 프로젝트가 열려 있는 안드로이드 스튜디오 메인 메뉴의 Tools Android SDK Manager를 선택하거나, File Settings... Appearance & Behavior System Settings Android SDK를 선택하면 그림 2-12와 같이 SDK 설정 대화상자가 나타난다. 그리고 제일 위에는 SDK가 설치 된 위치를 보여준다. 18 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
그림 2-12 위에 있는 Android SDK Location의 오른쪽 Edit 버튼을 누르면 SDK가 설치된 위치를 변경할 수 있다. 그리고 설치 또는 삭제할 컴포넌트는 탭으로 분류되어 있다. SDK Platforms 탭을 누 르면 안드로이드 시스템의 컴포넌트들을 선택할 수 있으며, SDK Tools 탭을 누르면 각종 도구 를 선택할 수 있다. SDK Update Sites 탭에서는 업그레이드할 것이 있는지 SDK 매니저가 확인 하는 사이트를 선택할 수 있다. 탭 아래에는 설치나 삭제할 수 있는 컴포넌트들을 보여주며, 오른쪽 밑의 Show Package Details를 체크하면 상세한 내역이 나타난다. 제일 오른쪽의 Status에서는 해당 컴포넌트가 설치되었는지(Installed) 또는 아닌지(Not installed) 의 여부와 업그레이드 버전(Update available)이 있는지를 보여준다. 또한, 설치되지 않은 컴포넌 트의 제일 왼쪽 체크상자를 선택하면 설치하라는 의미이며, 설치된 항목의 체크를 지우면 삭 제를 나타낸다. 그리고 선택이 끝나고 Apply 버튼을 누르면 작업을 할 것인지의 여부를 확인 받은 후 대화상자가 추가로 나타나서 컴포넌트 설치 작업 진행 내역을 알려준다. 그림 2-12에서 왼쪽 밑의 Launch Standalone SDK Manager를 클릭하면 독립된 창으로 실행되 는 SDK 매니저가 나타난다. 여기서는 그림 2-12의 SDK Platforms와 SDK Tools 탭에서 하는 기능을 모두 처리할 수 있다. 2.7 가장 최신 버전의 안드로이드 SDK 패키지 설치하기 19
그림 2-13 우선 다음에 열거한 패키지들의 Status 열에 Installed(설치됨)로 나와 있는지를 확인한다. Tools Android SDK Tools Tools Android SDK Platform-tools Tools Android SDK Build-tools (가장 최신 버전의) Android 버전 SDK Platform (가장 최신 버전의) Android 버전 ARM EABI v7a System Image, Intel x86 Atom System Image (가장 최신 버전의) Android 버전 Documentation for Android SDK: 애플리케이션 개발 시에 수시로 참조할 API 문서 등이 있으므로 설치하는 것이 좋다. 안드로이드 SDK가 설 치된 디렉터리 밑의 \docs 서브 디렉터리에 각종 문서 파일들이 저장된다. Extras Android Support Repository Extras Android Support Library Extras Google Repository Extras Google USB Driver(윈도우 시스템에서만 필요함) 20 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
Extras Intel x86 Emulator Accelerator(HAXM installer) 위의 패키지들 중 Not Installed(설치 안 됨)로 나온 것이 있을 때는 해당 패키지의 체크상자를 체 크한 후 맨 오른쪽 밑의 Install packages... 버튼을 누르면 패키지 설치 대화상자가 나타난다. 그 리고 Accept License를 선택하고 Install 버튼을 누르면 설치가 시작되며, 우리가 지정한 패키지를 SDK 매니저가 다운로드하고 설치한다. 이때 진행 상태를 SDK 매니저 창 맨 아래쪽에 보여준다. 설치가 끝나면 선택한 패키지들의 Status 열에 모두 Installed로 나와 있는지 확인하자. 만일 여전히 Not installed로 나오는 것이 있으면 그 패키지가 선택되었는지 다시 확인 후에 Install packages... 버튼을 눌러 추가로 설치한다(서로 다른 종류의 여러 패키지를 한 번에 선택해서 설치할 때는 패키지마다 Accept License를 따로 받으므로 Install 버튼을 여러 번 눌러야 되는 경우가 있다). 2.8 명령행에서 안드로이드 SDK 도구 사용하기 안드로이드 애플리케이션을 개발하기 위해서는 여러 도구(유틸리티 프로그램)들이 필요하다. 예 를 들어, 앞에서 설명했던 SDK 매니저와 같은 도구들이다. 안드로이드 SDK에는 API 라이브 러리 외에 그런 도구들이 실행 파일로 같이 제공된다. 애플리케이션을 개발하는 과정에서 그 런 도구들을 우리가 일일이 찾아서 명령행(command-line)에서 따로따로 실행시켜야 한다면 무 척 불편할 것이다. 따라서 안드로이드 스튜디오에서는 그런 도구들을 플러그인하여 우리가 스 튜디오 환경을 벗어나지 않아도 쉽게 실행할 수 있도록 해준다. 그러나 때로는 그런 도구들을 명령 프롬프트 창(윈도우 시스템)이나 터미널 창(리눅스나 맥 OS X 시스템)의 명령행에서 우리가 직접 실행해야 할 때가 있다. 그때는 운영체제에서 실행 파일을 쉽게 찾을 수 있도록 그런 도 구들이 있는 디렉터리 경로를 시스템의 PATH 환경 변수에 지정해야 한다. 다음 경로를 PATH 변수에 추가하자. 여기서 <path_to_android_sdk_installation>은 안드로이드 SDK가 설치된 파일 시스템 위치를 나타낸다(여기서 맥 OS X이나 리눅스의 경우는 \ 대신 / 사용). <path_to_android_sdk_installation>\tools <path_to_android_sdk_installation>\platform-tools 각자 시스템에 설치된 SDK의 위치는 SDK 설정 창의 위를 보면 알 수 있다. 예를 들어, 윈도 우 시스템에서는 그림 2-14와 같다. 2.8 명령행에서 안드로이드 SDK 도구 사용하기 21
그림 2-14 PATH 변수에 추가하는 방법은 사용 중인 운영체제에 따라 다르며 그 내용은 다음과 같다. 2.8.1 윈도우 7 111 시작 메뉴의 컴퓨터에서 오른쪽 마우스 버튼을 클릭한 후 속성을 선택한다 (윈도우 10에서는 바탕 화면의 시작 버튼 클릭 설정 선택 시스템 버튼 클릭 왼쪽 제일 밑의 정보 클릭). 222 고급 시스템 설정을 클릭하고 고급 탭을 선택한 후 환경 변수 버튼을 누른다. 333 환경 변수 대화상자에서 시스템 변수의 Path 변수를 찾고 편집 버튼을 누른다. 문자열의 맨 끝에 바로 위의 두 가지 경로를 추가한다. 이때 각 경로는 세미콜론(;)으로 구분해야 한다 는 것에 유의하자. 예를 들어, 안드로이드 SDK가 C:\Users\demo\AppData\Local\Android\ sdk에 설치되었다면 Path 변수 끝에 다음을 추가하면 된다. ;C:\Users\demo\AppData\Local\Android\sdk\platform-tools; C:\Users\demo\AppData\Local\Android\sdk\tools 444 각 대화상자에서 확인 버튼을 눌러서 속성 창을 닫는다. 그러면 path 지정이 잘 되었는지 확인해보자. 명령 프롬프트 창을 열고 다음 명령을 실행한다. echo %Path% 반환되는 path 변수의 값에 안드로이드 플랫폼 도구의 경로가 포함되어 있어야 한다. 그리고 다음과 같이 adb를 실행시켜서 SDK의 platform-tools 경로가 잘 지정되었는지 확인해보자. adb 제대로 실행되면 지정 가능한 명령행 옵션들의 내역을 보여줄 것이다. 마찬가지로, 안드로이드 SDK 매니저를 실행시켜서 SDK의 tools 경로가 잘 지정되었는지 확인하자. 22 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
android 이 두 가지 명령 중 어느 하나라도 다음과 같은 메시지가 나온다면 Path 환경 변수에 추가한 경로가 잘못된 것이다. 'adb'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 2.8.2 윈도우 8.1 111 시작 화면에서 화면의 오른쪽 아래 모서리로 마우스 커서를 이동한 후 메뉴의 검색(Search) 을 선택하고 제어판(Control Panel)을 입력한다. 검색 결과에서 제어판 아이콘이 나타나면 클 릭한다. 222 제어판 창이 열리면 오른쪽 위의 범주(Category)를 큰 아이콘(Large Icons)으로 선택한다. 그리 고 아이콘 목록에서 시스템(System)을 선택한다. 333 앞의 2.8.1절에서 설명한 2번부터 4번까지를 똑같이 해준다. 그다음에는 path 지정이 잘 되었는지 확인해보자. 화면의 오른쪽 밑 모서리로 마우스 커서를 이동한 후 검색을 선택하고 cmd를 입력한다. 검색 결과에서 명령 프롬프트를 선택하여 명령 프롬프트 창을 연다. 그리고 명령 프롬프트 창에서 다음 명령을 실행한다. echo %Path% 반환되는 path 변수의 값에 안드로이드 플랫폼 도구의 경로가 포함되어 있어야 한다. 그리고 다음과 같이 adb를 실행시켜서 SDK의 platform-tools 경로가 잘 지정되었는지 확인해보자. adb 제대로 실행되면 지정 가능한 명령행 옵션들의 내역을 보여줄 것이다. 마찬가지로, 안드로이드 SDK 매니저를 실행시켜서 SDK의 tools 경로가 잘 지정되었는지 확인하자. android 2.8 명령행에서 안드로이드 SDK 도구 사용하기 23
2.8.3 리눅스 리눅스에서는 자바 JDK 설치 시 수정했던.bashrc 파일을 한 번 더 수정하면 된다. 안드로이드 SDK가 /home/demo/android/sdk에 설치되었다면.bashrc 파일의 export 라인을 다음과 같이 수정하면 된다. export PATH=/home/demo/java/jdk1.8.0_77/bin:/home/demo/ Android/sdk/platformtools:/home/demo/Android/sdk/tools:/home/demo/android-studio/ bin:$path 맨 끝에 android-studio/bin 디렉터리를 추가한 것에 유의하자. 안드로이드 스튜디오를 실행 시키는 studio.sh 스크립트를 터미널 창의 현재 디렉터리와 관계없이 실행할 수 있게 하기 위 함이다. 2.8.4 맥 OS X 맥 OS X에서 $PATH 환경 변수를 변경하는 방법은 여러 가지가 있을 수 있다. 그중에서 가장 확실한 방법은 $PATH에 추가될 경로를 포함하는 새로운 파일을 /etc/paths.d 디렉터리에 추 가하는 것이다. 안드로이드 SDK를 설치한 위치가 /Users/demo/Library/Android/sdk라고 한다 면, 다음 두 라인을 포함하는 android-sdk라는 파일을 /etc/paths.d 디렉터리에 생성하여 경로 를 구성할 수 있다. /Users/demo/Library/Android/sdk/tools /Users/demo/Library/Android/sdk/platform-tools 이것은 시스템 디렉터리이므로 파일을 생성할 때 sudo 명령을 사용해야 한다는 것에 유의하 자. 예를 들면, 다음과 같다. sudo vi /etc/paths.d/android-sdk 2.9 안드로이드 스튜디오와 SDK 버전 업그레이드하기 종종 안드로이드 스튜디오와 안드로이드 SDK의 새로운 릴리스(release)가 나오곤 한다. SDK의 경우는 그림 2-12에서 설명한 SDK 설정 대화상자를 사용하여 업그레이드한다. 24 CHAPTER 2 안드로이드 스튜디오 개발 환경 구성하기
안드로이드 스튜디오의 경우는 다음 두 가지 중 한 가지 방법으로 업그레이드한다. 안드로이 드 스튜디오 웰컴 스크린 아래쪽의 Configure Check for Update를 클릭하거나, 프로젝트가 열려 있는 안드로이드 스튜디오 메인 메뉴에서 Help Check for Update...를 선택하면 된다. 안드로이드 스튜디오에서는 안드로이드 스튜디오 자체의 새로운 버전이 나왔거나 또는 안드로 이드 SDK 컴포넌트를 업그레이드할 것이 생기면 자동으로 통보해준다. 그리고 통보된 메시지의 Update 버튼을 클릭하면 SDK 매니저가 실행되어 우리가 원하는 것을 업그레이드할 수 있다. 2.10 안드로이드 SDK와 자바 JDK 설치 경로 변경하기 안드로이드 스튜디오를 설치하고 사용하다가 여러 이유로 안드로이드 SDK나 자바 JDK의 설 치 경로를 변경할 경우가 있을 수 있다. 예를 들어, 자바 JDK의 새로운 버전을 다른 경로에 설 치하고 그것을 안드로이드 스튜디오에서 사용하고자 할 경우다. 이때는 변경된 경로를 안드로 이드 스튜디오에게 알려주어야 한다. 그 방법은 간단하다. 우선, 안드로이드 스튜디오를 실행시키면 웰컴 스크린이 나타난다. 그리 고 아래쪽의 Configure Project Defaults를 클릭한 후 Project Structure를 선택하면 안드로이 드 SDK와 자바 JDK의 설치 경로를 변경할 수 있는 대화상자가 나타난다. 그다음에 오른쪽의 버튼( )을 눌러 원하는 경로로 변경한 후 OK 버튼을 누르면 된다. 이렇게 경로를 변경하면 이후의 모든 안드로이드 스튜디오 프로젝트에 이 설정이 적용되어 처리된다. 안드로이드 스튜디오에서 프로젝트가 열려 있을 때는 메인 메뉴의 File Project Structure를 선택하면 된다. 2.11 요약 안드로이드 애플리케이션을 개발하기에 앞서 제일 먼저 할 일은 자신에게 맞는 개발 환경을 구축하는 것이다. 그러기 위해서는 자바 JDK, 안드로이드 SDK, 안드로이드 스튜디오를 설치 해야 한다. 이번 장에서는 세 가지 운영체제(윈도우, 맥 OS X, 리눅스)에 필수 패키지들을 설치하 는 데 필요한 내용을 알아보았다. 2.11 요약 25
C H A P T E R 3 안드로이드 스튜디오로 첫번째애플리케이션만들기 안드로이드 스튜디오를 사용해서 안드로이드 애플리케이션 개발에 적합한 환경을 구성하는 데 필요한 내용을 앞의 두 장에서 알아보았다. 본격적인 애플리케이션 개발에 앞서 이제는 필 요한 개발 패키지들이 모두 설치되고 제대로 기능을 수행하는지 살펴볼 때가 되었다. 이럴 때 는 간단한 애플리케이션을 하나 만들어서 빌드(build)하고 실행해보는 것이 가장 좋은 방법이 다. 이번 장에서는 안드로이드 스튜디오를 사용해서 간단한 안드로이드 애플리케이션 프로젝 트 하나를 생성하는 방법을 설명할 것이다. 그리고 5장과 7장에서는 안드로이드 에뮬레이터 (emulator)와 실제 장치를 사용해서 우리의 애플리케이션을 실행시키는 방법을 알아볼 것이다. 3.1 새로운 안드로이드 프로젝트 생성하기 앱 개발 시 제일 먼저 할 일은 안드로이드 스튜디오에서 새로운 프로젝트를 만드는 것이다. 안 드로이드 스튜디오를 실행시키자. 그러면 그림 3-1과 같은 안드로이드 스튜디오 웰컴 스크린 (Welcome to Android Studio)이 나올 것이다. 26
그림 3-1 이 대화상자가 나오면 새로운 프로젝트를 생성할 준비가 된 것이다. 여기서 Start a new Android Studio project를 클릭하면 그림 3-2와 같이 새 프로젝트를 구성하는 New Project 위 저드 대화상자가 나타난다. 그림 3-2 3.1 새로운 안드로이드 프로젝트 생성하기 27
3.2 프로젝트와 SDK 설정 정의하기 New Project(새 프로젝트) 창에서 Application name(애플리케이션 이름) 필드에 AndroidSample을 입력한다. 이것은 안드로이드 스튜디오 내부에서 참조와 식별에 사용되는 이름이다. 또한, 완 성된 애플리케이션을 구글 플레이(Google Play) 스토어에서 판매할 때 사용되는 애플리케이션 이름이기도 하다. Company Domain(회사 도메인) 필드에는 자신의 도메인 URL을 입력한다(www는 뺌). 만일 도메인 URL이 없다면 우리 애플리케이션을 테스트할 동안 이 책의 도메인 이름인 www. ebookfrenzy.com을 사용해도 좋다. 그러나 애플리케이션의 개발이 끝나고 구글 플레이 스토 어에 게시하기 전에는 수정해야 할 것이다. 여기서는 ebookfrenzy.com을 입력한다. Package name(패키지 이름)은 안드로이드 생태계 전체(구글 플레이 스토어 포함)에서 우리 애플 리케이션을 고유하게 식별하는 데 사용된다. 이름을 짓는 형식은 안드로이드 표준에 따르며, Company Domain 필드에 입력한 우리 도메인 URL을 거꾸로 하고 그 뒤에 애플리케이션 이 름이 붙어서 자동으로 생성된다. 따라서 여기서는 다음과 같이 된다(사이에 점을 넣고, 애플리케 이션 이름은 모두 소문자로 한다). com.ebookfrenzy.androidsample 패키지 이름을 굳이 변경하고자 한다면 패키지 이름 필드의 오른쪽 끝에 있는 Edit 버튼을 누 르고 값을 변경한 후에 Done 버튼을 누르면 된다. 그러나 그럴 필요는 거의 없을 것이다. Project location(프로젝트 위치) 필드는 우리 프로젝트의 모든 파일이 저장되고 관리되는 디렉 터리 경로를 나타낸다. 이 필드의 오른쪽 버튼을 눌러서 우리가 원하는 디렉터리로 변경 할 수 있다. 그리고 변경된 디렉터리는 우리 프로젝트의 홈 디렉터리가 되고, 그 밑에 앞에 서 지정한 애플리케이션 이름과 같은 이름의 서브 디렉터리가 생성되어 우리 프로젝트의 모 든 파일이 저장된다. 예를 들어, C:\AndroidStudioProjects를 홈 디렉터리로 지정하면 그 밑에 AndroidSample 서브 디렉터리가 생성되어 우리 프로젝트의 모든 파일이 저장된다(각자 자신의 홈 디렉터리를 만들어 사용하는 것이 좋을 것이다). 한번 입력했던 회사 도메인 값과 프로젝트 위치의 홈 디렉터리 값은 안드로이드 스튜디오에서 기억하고 있다가 다음번 새 프로젝트 생성 시에 기본값으로 보여준다. 28 CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기
Next 버튼을 누르면 애플리케이션이 실행될 안드로이드 장치의 유형을 선택하는 화면이 나온 다. 여기서는 우리 애플리케이션을 구글의 어떤 안드로이드 플랫폼으로 개발할 것인지를 선택 한다(복수 개로 선택 가능). 또한, 우리 애플리케이션이 실행 가능한 각 플랫폼의 안드로이드 운 영체제 버전이 최소 얼마 이상이 되어야 하는지를 지정한다. 구글 폰(Phone)과 태블릿(Tablet)은 과거의 여러 안드로이드 버전부터 최신 버전(예를 들어, 안드 로이드 6.x 마시멜로) 중 선택이 가능하며, 구글 TV는 안드로이드 5.x 롤리팝 버전부터만 선택 가능하다. 그리고 구글 웨어(Wear)는 안드로이드 웨어 4.4W(KitKat Wear) 버전부터 선택 가능 하며, 구글 글래스는 안드로이드 4.0.4부터 선택 가능하다. 여기서는 폰과 태블릿(Phone and Tablet)만 선택하고, 최소(Minimum) SDK 버전은 API 22: Android 5.1 (Lollipop)으로 선택한다. 최소 SDK 버전을 더 오래된 것으로 선택하면 개발한 애 플리케이션이 훨씬 더 많은 안드로이드 장치에서 실행될 수 있다는 장점이 있다. 현재 사용 중 인 장치들의 안드로이드 운영체제 버전이 여러 가지이기 때문이다(반면에 최신 안드로이드 버전에 추가된 기능 중 일부는 사용할 수 없는 단점이 생길 수 있다). 그림 3-3 그림 3-3에서는 현재 시장에서 사용되는 장치들의 안드로이드 운영체제 버전을 백분율로 보 여준다(이 내용은 구글에서 정기적으로 업데이트한다). 예를 들어, 최소 SDK 버전을 2.2(Froyo)로 선 택하면 거의 모든 안드로이드 장치에서 애플리케이션을 실행시킬 수 있다. 그러나 우리 애플 리케이션에서 최신 버전에만 추가된 기능이 필요하다면 최소 SDK 버전을 그 버전으로 지정하 면 된다. 최소 SDK 버전을 선택하는 드롭다운(drop-down) 상자 아래의 설명 글 맨 끝에 있는 3.2 프로젝트와 SDK 설정 정의하기 29
Help me Choose 링크를 클릭하면 그림 3-3의 도표를 볼 수 있다. 그리고 도표에서 특정 API 레벨(안드로이드 운영체제 버전)을 클릭하면 그 버전에서 지원 가능한 기능을 보여준다. OK 버튼 을 누르면 다시 플랫폼 선택 화면으로 돌아온다(이 프로젝트 애플리케이션을 에뮬레이터가 아닌 각 자의 스마트폰이나 태블릿으로 실행하고자 할 때는 그 장치의 안드로이드 버전과 같거나 낮은 버전으로 최 소 SDK 버전을 지정해야 한다). 구글 TV와 구글 글래스(Glass) 및 웨어러블 플랫폼은 선택하지 말고 Next 버튼을 누른다(여기 서는 그런 장치에서 실행되는 애플리케이션을 개발하려는 것이 아니기 때문이다). 3.3 액티비티 생성하기 그다음에는 우리 애플리케이션이 실행될 때 제일 처음 실행될 액티비티(Activity)의 타입을 선 택한다. 안드로이드 애플리케이션에서는 다양한 타입의 액티비티를 사용할 수 있다. Empty, Master/Detail Flow, Google Maps, Navigation Drawer 액티비티는 이후의 다른 장에서 자세히 알아볼 것이다. 여기서는 Basic Activity를 선택하자. 이것을 선택하면 앱 바(app bar), 메뉴, 콘 텐트 영역, 플로팅 액션 버튼(floating action button)으로 구성되는 기본적인 액티비티 코드와 레 이아웃을 자동으로 생성해준다. 그리고 Next 버튼을 누른다(그림 3-4). 그림 3-4 새 프로젝트 생성의 마지막 화면이 나타난다(그림 3-5). Activity Name(액티비티 이름)에 AndroidSampleActivity를 입력한다. 액티비티 이름은 생성될 액티비티 클래스 이름을 나타내 30 CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기
며, 이것은 안드로이드 Activity 클래스의 서브 클래스가 된다. 따라서 이름 맨 뒤에는 Activity 를 붙이는 것이 좋다. 액티비티는 하나의 사용자 인터페이스 화면 레이아웃(layout)으로 구성 되므로 레이아웃을 지정할 필요가 있다. 여기서는 Layout Name(레이아웃 이름)이 자동으로 activity_android_sample이 된다. 왜냐하면 우리가 입력한 액티비티 이름을 반영하여 액티비 티 이름의 맨 끝 단어를 맨 앞으로 가져오고 모두 소문자로 만든 후 단어 사이에는 밑줄을 넣 기 때문이다. Menu(메뉴) 리소스 이름인 menu_android_sample과 Title(제목) 명칭인 Android SampleActivity도 자동으로 부여된 것을 사용하는 것이 좋다. 그림 3-5 마지막으로, Finish 버튼을 누르면 프로젝트가 생성된다. 3.4 애플리케이션 변경하기 이 시점에서 안드로이드 스튜디오는 최소한의 애플리케이션 프로젝트를 생성하고 메인 창을 연다(안드로이드 스튜디오에서는 여러 개의 프로젝트를 독립된 창으로 동시에 열고 작업할 수 있다). 이때 앞의 그림 3-4에서 우리가 선택한 액티비티 타입과 관련된 템플릿(template)을 사용해서 액티비티 클래스(java 파일)와 사용자 인터페이스 레이아웃(xml 파일)의 소스 코드를 자동 생 성하고 메인 창의 중앙에 위치한 편집기에 열어서 보여준다. 그림 3-6의 화살표가 가리키는 3.4 애플리케이션 변경하기 31
content_android_sample.xml 탭을 클릭하자. 그림 3-6 새로 생성된 프로젝트와 관련 파일들의 참조는 프로젝트(Project) 도구 창에 나타난다(메인 프 로젝트 창의 왼쪽). 프로젝트 도구 창은 프로젝트를 구성하는 파일들의 정보를 볼 수 있는 여러 뷰를 갖고 있으며, 기본적으로는 Android 뷰로 보여준다. 뷰 설정은 프로젝트 도구 창의 위에 있는 드롭다운 아이콘( 선택 가능한 뷰 항목을 보여준다(그림 3-7). )으로 할 수 있으며, 클릭하면 그림 3-7 Project 뷰에서는 프로젝트를 구성하는 모든 디렉터리와 파일을 컴퓨터 파일 시스템에 저장된 물리적인 형태로 볼 수 있으며, Android 뷰에서는 주로 사용하는 파일을 쉽게 찾을 수 있도록 32 CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기
그룹으로 분류하여 보여준다. 프로젝트 도구 창의 항목은 폴더(디렉터리)나 파일을 나타낸다. 그리고 각 항목 왼쪽의 작은 삼각형을 클릭하면 그 항목에 포함된 서브 디렉터리나 파일이 확장되어 나타난다. 또한, 파일을 더블 클릭하면 오른쪽의 편집기 창에 로드된다. Basic Activity를 선택해서 하나의 액티비티로 생성된 프로젝트는 Hello World! 라는 라벨(label) 하나만 포함하는 사용자 인터페이스(화면)로 구성되며, 이 프로젝트를 애플리케이션으로 빌드 하여 실행시키면 화면에 Hello World! 가 나타난다. 이제부터는 우리 애플리케이션의 사용자 인터페이스를 변경하여 다른 메시지를 갖는 더 큰 텍 스트 뷰 객체를 보여주게 할 것이다(안드로이드에서는 화면에 나타나는 것들을 여러 뷰(View) 객체로 제공한다). 생성된 액티비티의 사용자 인터페이스는 activity_android_sample.xml이라는 이름의 XML 레 이아웃 파일에 저장된다. 그리고 이 파일은 프로젝트 파일 계층 구조의 app res layout에 위치한다(파일 시스템에서는 AndroidSample\app\src\main\res\layout 디렉터리 경로가 된다). 이 레이아웃 파일은 장치 화면의 위에 나타나는 앱 바(종전의 액션 바)를 포함한다(그림 3-8의 A 부분). 또한, 플로팅 액션 버튼(그림 3-8의 B 버튼)도 포함하며, 콘텐트 레이아웃(그림 3-8의 C 부분) 파일의 참조도 포함한다. A C B 그림 3-8 3.4 애플리케이션 변경하기 33
프로젝트를 생성할 때 Basic Activity 템플릿을 선택하면 두 개의 레이아웃 파일을 생성해준다. 액티비티의 레이아웃 파일(여기서는 activity_android_sample.xml)과 콘텐트 레이아웃 파일(여기서는 content_android_sample.xml)이다. 우리가 화면에 보여줄 내용은 콘텐트 레이아웃 파일에 정의한다 (그림 3-9). 그림 3-9 이 파일은 안드로이드 스튜디오가 사용자 인터페이스 디자이너 도구 창에 자동으로 로드해준 다. 이 창은 안드로이드 스튜디오 메인 창의 중앙에 나타나며, 레이아웃 편집기라고도 한다. 디자이너 도구 창의 왼쪽 밑을 보면 두 개의 탭이 있다. Text 탭이 선택된 경우는 사용자 인터 페이스를 XML 소스로 보여주며, Design 탭이 선택된 경우는 그래픽 형태로 보여준다. Design 탭을 클릭하자(그림 3-10). 34 그림 3-10 CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기
디자이너 창 위의 왼쪽에 있는 장치 툴바(toolbar)에는 현재 Nexus 4로 설정되어 있으며, 디자 이너 패널에는 그 장치를 시각적으로 나타내고 있다. 장치 툴바를 클릭하면 다양한 장치를 선 택할 수 있다. 장치의 방향(가로나 세로)을 변경하고자 할 때는 장치 툴바의 바로 오른쪽에 있는 아이콘( ) 을 클릭하면 된다. 장치 화면에서 볼 수 있듯이, 레이아웃에는 Hello World! 메시지를 보여주는 라벨 하나가 포 함되어 있다. 장치 그림이 있는 패널 바로 왼쪽에는 팔레트(palette)가 있다. 팔레트에는 사용 자 인터페이스 화면을 구성하는 서로 다른 종류의 사용자 인터페이스 컴포넌트들이 포함되 어 있다. 예를 들어, 버튼, 라벨, 텍스트 필드 등이다. 그러나 사용자들이 모든 사용자 인터페 이스 컴포넌트들을 볼 수 있는 것은 아니다. 예를 들어, 레이아웃(layout) 자체는 화면에 보이 지 않는다. 시각적인 사용자 인터페이스 컴포넌트들이 화면에 위치하고 관리되는 방법을 제 공하는 것이기 때문이다. 안드로이드는 다양한 종류의 레이아웃을 지원한다. 생성된 애플리 케이션의 레이아웃이 어떤 것인지 그림 3-10만 봐서는 알기 어렵겠지만, 현재의 레이아웃은 RelativeLayout을 사용해서 생성된 것이다. 정말 그런지 확인하려면 컴포넌트 트리(Component Tree) 패널의 정보를 보면 된다. 기본적으로 이 패널은 디자이너 창의 오른쪽 위에 있으며, 우 리가 원한다면 얼마든지 위치를 변경할 수 있다. 장치 화면의 빈 곳을 클릭하면 그림 3-11과 같이 컴포넌트 트리에 나타난다. 그림 3-11 컴포넌트 트리의 계층 구조를 보면 알 수 있듯이, 여기서는 사용자 인터페이스가 하나의 RelativeLayout 부모로 구성되고 이 레이아웃은 하나의 TextView 객체를 자식으로 갖고 있다. 그러면 우선 TextView 컴포넌트를 삭제해보자. 디자이너 패널의 장치 그림에 있는 TextView를 마우스로 클릭하면 주위에 푸른 경계선이 나타날 것이다. 그리고 키보드의 Delete 키를 누르 면 레이아웃에서 삭제된다(컴포넌트 트리에서 선택하고 해도 된다). 그다음에 팔레트 패널에서 위젯(Widgets) 부류의 컴포넌트를 보면 Large Text 객체가 있다. 3.4 애플리케이션 변경하기 35
그것을 마우스로 선택하고 끌어서 디자이너 패널 레이아웃의 중앙에 놓는다. 교차되는 수직 선과 수평선이 모두 나타나야만 중앙이 된다(그림 3-12). 그림 3-12 팔레트의 컴포넌트를 마우스로 끌지 않고 선택만 한 후에 레이아웃의 원하는 곳을 클릭해도 된다. 물론, 이때도 마우스 커서를 레이아웃에서 움직이면 수직선과 수평선이 나타난다. 이 방법이 더 편리할 수 있다. 그다음에는 TextView 컴포넌트에 보여줄 텍스트를 변경해보자(Large Text는 TextView 컴포넌트 다). 디자인 레이아웃의 그 객체를 더블 클릭하면 그림 3-13의 대화상자가 나타난다. 거기에서 텍스트 속성(text) 값을 Large Text 에서 Welcome to Android Studio 로 변경하자. id 속성값은 textview 그대로 두고 Enter 키를 누른다. 그림 3-13 여기서 알아둬야 할 중요한 내용이 있다. 레이아웃의 TextView 객체를 클릭한 후 바로 왼쪽을 보면 조그만 전구 아이콘이 있다. 이 전구는 문제가 생길 수 있다는 것을 알려주면서 권장되 는 해결 방법을 제공한다는 것을 나타낸다. 그것을 클릭하면 다음과 같은 문제점을 알려준다. 36 CHAPTER 3 안드로이드 스튜디오로 첫 번째 애플리케이션 만들기