95

자율학습! 안드로이드 프로그래밍 : 하루 한 시간

  • View
    245

  • Download
    17

Embed Size (px)

DESCRIPTION

로런 다시, 셰인 콘더 지음 | 이대엽 옮김 | 임베디드 & 모바일 시리즈 _ 008 | ISBN: 9788992939577 | 25,000원 | 2010년 09월 8일 발행 | 560쪽

Citation preview

Page 1: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간
Page 2: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간
Page 3: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

자율학습!

안드로이드 프로그래밍

Page 4: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

iv

•목 차•

대상 독자 .................................................................................................xxxi

이 책의 구성 ............................................................................................xxxi

이 책의 내용 ......................................................................................... xxxiii

이 책에서 쓴 개발 환경 ....................................................................... xxxiii

이 책의 조판 관례 .................................................................................xxxiv

01장 안드로이드 시작하기 1안드로이드 소개 .................................................................................................1

구글과 개방형 단말기 연합.........................................................................1

안드로이드의 등장 ......................................................................................2

이클립스에 익숙해지기 .....................................................................................3

안드로이드 프로젝트 생성..........................................................................4

안드로이드 프로젝트 파일 구성 .................................................................7

프로젝트 리소스 편집하기..........................................................................8

애플리케이션 실행과 디버깅 ......................................................................... 12

안드로이드 가상 기기 관리.......................................................................12

디버그 환경과 실행 환경 생성 ..................................................................14

에뮬레이터로 안드로이드 애플리케이션 실행 .......................................15

DDMS를 이용한 안드로이드 애플리케이션 디버깅 ..............................17

단말기에서 안드로이드 애플리케이션 실행 ...........................................18

정리 .................................................................................................................. 20

퀴즈 ...........................................................................................................21

해답 ...........................................................................................................22

실습 문제 ....................................................................................................22

Page 5: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

v

02장 안드로이드 개발 환경 25안드로이드 문서 활용 ..................................................................................... 25

DDMS를 이용한 애플리케이션 디버깅 ........................................................ 26

태스크 관리 ................................................................................................28

안드로이드 파일 시스템 탐색 ...................................................................29

에뮬레이터와의 상호작용.........................................................................29

에뮬레이터나 단말기의 화면 캡처 ...........................................................32

로그 정보 확인 ...........................................................................................33

안드로이드 에뮬레이터 활용 ......................................................................... 33

에뮬레이터에 내용 입력 ...........................................................................34

안드로이드 시스템 둘러보기 ....................................................................34

에뮬레이터 스킨 활용 ...............................................................................36

에뮬레이터에서 SD 카드 이미지 사용 ....................................................36

그 밖의 안드로이드 도구 활용 ....................................................................... 37

정리 ................................................................................................................... 38

퀴즈 ...........................................................................................................39

해답 ...........................................................................................................40

실습 문제 ....................................................................................................40

03장 안드로이드 애플리케이션 제작 43일반적인 안드로이드 애플리케이션 설계 .................................................... 43

애플리케이션의 기능 설계........................................................................43

애플리케이션 액티비티의 요구사항 파악 ...............................................44

애플리케이션 기능 구현 ...........................................................................45

Page 6: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

vi

애플리케이션 컨텍스트 활용 ......................................................................... 46

애플리케이션 리소스 획득........................................................................47

애플리케이션 환경설정에 접근 ................................................................47

컨텍스트를 이용한 다른 애플리케이션의 기능 활용 .............................47

액티비티 다루기 .............................................................................................. 48

액티비티 실행 ............................................................................................48

액티비티의 상태 관리 ...............................................................................49

액티비티 종료 ............................................................................................51

인텐트 다루기 .................................................................................................. 52

인텐트를 이용한 정보 전달.......................................................................52

인텐트를 이용한 다른 애플리케이션 실행 ..............................................53

대화상자 다루기 .............................................................................................. 54

애플리케이션 정보 로깅 ................................................................................. 55

정리 ................................................................................................................... 56

퀴즈 ...........................................................................................................57

해답 ...........................................................................................................58

실습 문제 ....................................................................................................58

04장 애플리케이션 리소스 관리 61애플리케이션 리소스와 시스템 리소스 활용 ............................................... 61

애플리케이션 리소스 이용........................................................................61

시스템 리소스 다루기 ...............................................................................65

단순 리소스 값 다루기 .................................................................................... 65

문자열 리소스 다루기 ...............................................................................66

색상 리소스 다루기 ...................................................................................67

치수 다루기 ................................................................................................68

단순 그래픽 리소스 다루기 ............................................................................ 68

이미지 다루기 ............................................................................................69

다른 유형의 그래픽 리소스 다루기 ..........................................................70

Page 7: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

vii

레이아웃 다루기 .............................................................................................. 70

레이아웃 리소스 편집기를 이용한 레이아웃 설계 .................................71

XML을 이용한 레이아웃 디자인 .............................................................72

파일 다루기 ...................................................................................................... 74

XML 파일 다루기 ......................................................................................74

원시 파일 다루기 .......................................................................................75

다른 유형의 리소스 다루기 ............................................................................ 76

정리 ................................................................................................................... 76

퀴즈 ...........................................................................................................78

해답 ...........................................................................................................78

실습 문제 ....................................................................................................79

05장 안드로이드 매니페스트 파일 구성 81안드로이드 매니페스트 파일 구성 ................................................................ 81

Manifest 탭 .................................................................................................82

Application 탭............................................................................................82

Permissions 탭 ...........................................................................................84

Instrumentation 탭 ...................................................................................84

AndroidManifest.xml 탭 ..........................................................................84

기본 애플리케이션 설정 구성 ........................................................................ 86

안드로이드 패키지의 이름 지정 ...............................................................86

보조 라이브러리 연결 ...............................................................................86

애플리케이션의 버전 설정........................................................................86

최소 안드로이드 SDK 버전 설정 .............................................................87

애플리케이션의 이름 설정........................................................................88

애플리케이션의 아이콘 설정 ....................................................................89

애플리케이션 설명 지정 ...........................................................................90

애플리케이션의 디버그 정보 설정 ...........................................................90

기타 애플리케이션 속성 설정 ...................................................................90

Page 8: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

viii

액티비티 정의 .................................................................................................. 91

액티비티 등록 ............................................................................................91

실행 액티비티 지정 ...................................................................................92

애플리케이션 권한 관리 ................................................................................. 93

그 밖의 애플리케이션 설정 관리 ................................................................... 96

정리 ................................................................................................................... 97

퀴즈 ...........................................................................................................98

해답 ...........................................................................................................99

실습 문제 ....................................................................................................99

06장 애플리케이션 뼈대 설계 101안드로이드용 별난체험 게임 설계 .............................................................. 101

기본 게임 기능 파악 ................................................................................102

액티비티 요구사항 파악 .........................................................................102

화면에 특화된 게임 기능 파악 ................................................................103

애플리케이션 프로토타입 구현 ................................................................... 108

새 안드로이드 프로젝트 생성 .................................................................108

프로젝트 리소스 추가 .............................................................................109

애플리케이션 액티비티 구현 ..................................................................110

애플리케이션 환경설정 만들기 ..............................................................112

게임 프로토타입 실행 ................................................................................... 114

디버그 환경설정 구성 .............................................................................114

에뮬레이터에서 프로토타입 실행 ..........................................................114

프로토타입 설치 ......................................................................................115

정리 ................................................................................................................. 116

퀴즈 .........................................................................................................117

해답 .........................................................................................................117

실습 문제 ..................................................................................................117

Page 9: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

ix

07장 애니메이션이 적용된 시작 화면 구현 119시작 화면 설계 ............................................................................................... 119

시작 화면의 레이아웃 구현 .......................................................................... 120

새 프로젝트 리소스 추가 ........................................................................122

시작 화면의 레이아웃 업데이트 .............................................................123

애니메이션 다루기 ........................................................................................ 125

애니메이션 리소스 추가 .........................................................................126

특정 뷰에 애니메이션 적용.....................................................................128

한 레이아웃에 든 모든 뷰에 애니메이션 적용 ......................................128

애니메이션의 생명 주기 이벤트 처리 ....................................................129

정리 ................................................................................................................. 130

퀴즈 .........................................................................................................132

해답 .........................................................................................................132

실습 문제 ..................................................................................................133

08장 메뉴 화면 구현 135메뉴 화면 설계 ............................................................................................... 135

메뉴 화면의 레이아웃 요구사항 파악 ....................................................136

RelativeLayout을 이용한 화면 머리말 제작 ..........................................136

ListView 컨트롤 추가 ..............................................................................137

메뉴 레이아웃에 터치 기능 입히기 ........................................................137

메뉴 화면의 레이아웃 구현 .......................................................................... 138

새 프로젝트 리소스 추가 ........................................................................138

메뉴 화면의 레이아웃 업데이트 .............................................................138

ListView 컨트롤 다루기 ............................................................................... 141

ListView 컨트롤 채우기 ..........................................................................141

ListView 이벤트 대기 ..............................................................................143

ListView 컨트롤의 특성 조정 .................................................................144

Page 10: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

x

그 밖의 메뉴 형식 다루기 ............................................................................. 145

게임 화면에 옵션 메뉴 추가....................................................................146

정리 ................................................................................................................. 149

퀴즈 .........................................................................................................150

해답 .........................................................................................................151

실습 문제 ..................................................................................................151

09장 도움말 화면과 점수 화면 개발 153도움말 화면 설계 ........................................................................................... 153

도움말 화면의 레이아웃 구현 ...................................................................... 154

새 프로젝트 리소스 추가 ........................................................................154

도움말 화면의 레이아웃 갱신 .................................................................155

파일 다루기 .................................................................................................... 156

원시 리소스 파일 추가 ............................................................................156

원시 파일 리소스 접근 ............................................................................156

점수 화면 설계 ............................................................................................... 158

점수 화면 레이아웃의 요구사항 파악 ....................................................158

TabHost 컨트롤 추가 ..............................................................................159

점수 화면의 레이아웃 구현 .......................................................................... 160

새 프로젝트 리소스 추가 ........................................................................160

점수 화면의 레이아웃 갱신.....................................................................160

탭이 포함된 화면 설계 .................................................................................. 163

TabHost 컨트롤 구성 ..............................................................................163

TabHost 컨트롤에 탭 추가 .....................................................................163

기본 탭 설정 .............................................................................................164

XML 다루기 .................................................................................................. 164

XML 리소스 가져오기 ............................................................................165

XmlResourceParser를 이용한 XML 파일 파싱 ....................................165

점수 화면 마무리 .....................................................................................166

Page 11: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xi

정리 ................................................................................................................. 167

퀴즈 .........................................................................................................168

해답 .........................................................................................................168

실습 문제 ..................................................................................................169

10장 사용자 입력을 받기 위한 폼 제작 171환경설정 화면 설계 ....................................................................................... 171

환경설정 화면의 레이아웃 구현 .................................................................. 174

새 문자열 리소스 추가 ............................................................................174

설정 화면의 레이아웃 갱신.....................................................................176

공통 폼 컨트롤 활용 ...................................................................................... 177

EditText 컨트롤 다루기 ..........................................................................177

Spinner 컨트롤 다루기 ............................................................................182

SharedPreferences를 이용한 폼 데이터 저장 ............................................. 185

SharedPreferences 항목 정의 .................................................................185

SharedPreferences에 설정 저장 .............................................................186

SharedPreferences의 설정 조회 .............................................................187

정리 ................................................................................................................. 188

퀴즈 .........................................................................................................189

해답 .........................................................................................................189

실습 문제 ..................................................................................................189

11장 사용자 입력을 받기 위한 대화상자 활용 191액티비티 대화상자 다루기 ........................................................................... 191

다양한 유형의 Dialog 창 둘러보기 ........................................................191

액티비티 대화상자의 생명주기 추적 .....................................................192

DatePickerDialog 활용 ................................................................................ 194

QuizSettingsActivity 클래스에 DatePickerDialog 추가 .....................194

Page 12: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xii

DatePickerDialog 초기화 .......................................................................196

DatePickerDialog 실행 ...........................................................................197

사용자 정의 대화상자 다루기 ...................................................................... 198

설정 화면에 사용자 정의 대화상자 추가 ...............................................198

정리 ................................................................................................................. 205

퀴즈 .........................................................................................................206

해답 .........................................................................................................206

실습 문제 ..................................................................................................206

12장 애플리케이션 로직 추가 209게임 화면 설계 ............................................................................................... 209

게임 화면의 레이아웃 구현 .......................................................................... 212

새 프로젝트 리소스 추가 ........................................................................212

게임 화면의 레이아웃 수정.....................................................................213

ViewSwitcher 컨트롤 다루기 ....................................................................... 215

ViewFactory를 이용한 ViewSwitcher 뷰 생성 .....................................215

TextSwitcher 다루기 ...............................................................................217

ImageSwitcher 다루기 ............................................................................218

ViewSwitcher에 애니메이션 적용 .........................................................218

게임 로직 추가 ............................................................................................... 220

정리 ................................................................................................................. 227

퀴즈 .........................................................................................................228

해답 .........................................................................................................229

실습 문제 ..................................................................................................229

13장 이미지와 카메라 다루기 231아바타 기능 설계 ........................................................................................... 231

환경설정 화면 레이아웃에 아바타 추가 ..................................................... 233

환경설정 화면의 레이아웃 수정 .............................................................233

Page 13: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xiii

ImageButton 컨트롤 다루기 ........................................................................ 234

ImageButton 컨트롤의 이미지 설정 ......................................................235

ImageButton 이벤트 처리 ......................................................................236

이미지 미디어 다루기 ................................................................................... 238

비트맵 다루기 ................................................................................................ 242

정리 ................................................................................................................. 244

퀴즈 .........................................................................................................245

해답 .........................................................................................................246

실습 문제 ..................................................................................................246

14장 위치 기반 서비스 지원 249즐겨 찾는 위치 기능 설계 ............................................................................. 249

즐겨 찾는 위치 기능의 레이아웃 수정 ...................................................250

즐겨 찾는 위치 대화상자 설계 ................................................................251

즐겨 찾는 위치 대화상자의 레이아웃 구현 ...........................................252

즐겨 찾는 위치 기능의 뼈대 구현 ................................................................ 253

위치 기반 서비스 활용 .................................................................................. 255

에뮬레이터에서의 위치 테스트 활성화 .................................................256

위치 기반 서비스에 접근 ........................................................................259

위치 갱신 내역 조회 ................................................................................260

지오코딩 서비스 활용 ................................................................................... 261

안드로이드에서 지오코딩 서비스 활용 .................................................262

지도 다루기 .................................................................................................... 263

인텐트를 이용한 지도 애플리케이션 실행 ............................................263

서드 파티 서비스와 애플리케이션 다루기 ............................................265

정리 ................................................................................................................. 266

퀴즈 .........................................................................................................267

해답 .........................................................................................................268

실습 문제 ..................................................................................................268

Page 14: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xiv

15장 네트워크 지원 271네트워크 애플리케이션 설계 ....................................................................... 271

애플리케이션 서버 다루기......................................................................272

사용자에게 네트워크 활동 상태 알리기 ................................................273

네트워크 애플리케이션 개발 ....................................................................... 274

에뮬레이터에서 네트워크 테스트하기 ..................................................275

하드웨어에서 네트워크 애플리케이션 테스트하기 .............................275

네트워크 서비스 접근 ................................................................................... 276

네트워크 권한 설정 .................................................................................276

네트워크 상태 확인 .................................................................................277

HTTP 네트워크 활용 ..............................................................................278

프로그레스 바를 이용한 네트워크 활동 상태 표시.................................... 279

부정형 진행상태 표시 .............................................................................279

한정형 진행상태 표시 .............................................................................279

진행상태 대화상자 표시 .........................................................................280

비동기적인 작업 수행 ................................................................................... 281

AsyncTask 활용 .......................................................................................282

스레드와 핸들러 활용 .............................................................................282

점수 다운로드와 표시 ................................................................................... 283

ScoreDownloaderTask 시작...................................................................284

진행상태 지시자 시작하기......................................................................284

백그라운드 처리 다루기 .........................................................................285

진행상태 갱신 내역 처리 ........................................................................287

진행상태 지시자 정리 .............................................................................287

취소 처리 ..................................................................................................288

질문 다운로드와 파싱 ................................................................................... 289

진행상태 대화상자 시작 .........................................................................290

백그라운드 처리 다루기 .........................................................................290

진행상태 대화상자 소거 .........................................................................291

Page 15: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xv

정리 ................................................................................................................. 292

퀴즈 .........................................................................................................293

해답 .........................................................................................................294

실습 문제 ..................................................................................................294

16장 네트워크 지원 강화 297서버로 보낼 데이터 파악 .............................................................................. 297

전화기 상태 정보에 접근 .............................................................................. 298

전화기 상태 권한 설정 ............................................................................298

전화통신 정보 조회 .................................................................................299

원격 애플리케이션 서버에 데이터 업로드하기 ......................................... 301

HTTP GET 메서드를 이용한 사용자 데이터 업로드 ..........................302

HTTP POST를 이용한 사용자 아바타 업로드 .....................................306

정리 ................................................................................................................. 310

퀴즈 .........................................................................................................310

해답 .........................................................................................................311

실습 문제 ..................................................................................................311

17장 소셜 기능 지원 313소셜 기능을 이용한 애플리케이션 개선 ..................................................... 313

애플리케이션에 소셜 기능 적용하기 .....................................................314

기본적인 사용자 관계 지원.....................................................................314

애플리케이션에 친구 지원 기능 추가 ......................................................... 315

설정 화면에서 친구 요청 기능 추가하기 ...............................................315

친구 점수 표시 .........................................................................................321

사용자 관계 개선 .....................................................................................322

소셜 네트워크 서비스와의 통합 .................................................................. 322

페이스북 지원 ..........................................................................................323

Page 16: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xvi

트위터 지원 ..............................................................................................323

오픈소셜 이니셔티브 활용......................................................................323

정리 ................................................................................................................. 324

퀴즈 .........................................................................................................326

해답 .........................................................................................................327

실습 문제 ..................................................................................................327

18장 홈 화면 앱 위젯 제작 329앱 위젯 설계 ................................................................................................... 329

앱 위젯 프로퍼티 정의 ............................................................................330

안드로이드 매니페스트 파일 갱신 .........................................................331

앱 위젯 레이아웃 설계 ............................................................................332

앱 위젯 제공자 구현 ................................................................................333

앱 위젯의 사용자 이벤트 처리 ..................................................................... 338

위젯의 백그라운드 연산 처리 ...................................................................... 339

서비스 생성 ..............................................................................................340

서비스 제어 ..............................................................................................342

정리 ................................................................................................................. 343

퀴즈 .........................................................................................................344

해답 .........................................................................................................345

실습 문제 ..................................................................................................345

19장 애플리케이션 국제화 347일반적인 국제화 원칙 ................................................................................... 347

안드로이드의 현지화 원리 ........................................................................... 348

안드로이드 운영체제의 로캘 처리 방법 ................................................350

애플리케이션에서의 로캘 처리 방법 .....................................................350

안드로이드 마켓의 로캘 처리 방법 ............................................................. 353

안드로이드 국제화 전략 ............................................................................... 353

Page 17: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xvii

애플리케이션 국제화하지 않기 ..............................................................354

제한적인 애플리케이션 국제화 ..............................................................354

애플리케이션의 완전한 국제화 구현 .....................................................355

현지화 유틸리티 활용 ................................................................................... 356

시스템 로캘 결정 .....................................................................................356

날짜 및 시간과 같은 문자열 형식화하기 ...............................................357

통화 처리 ..................................................................................................357

정리 ................................................................................................................. 357

퀴즈 .........................................................................................................359

해답 .........................................................................................................359

실습 문제 ..................................................................................................360

20장 다양한 기기 지원 363안드로이드의 구성 관리 ............................................................................... 363

다양한 화면 방향 처리 ............................................................................365

다양한 화면 특성 지원 ............................................................................369

다양한 단말기 기능 지원 ........................................................................370

다양한 안드로이드 SDK를 대상으로 개발하기 ....................................370

정리 ................................................................................................................. 373

퀴즈 .........................................................................................................374

해답 .........................................................................................................374

실습 문제 ..................................................................................................374

21장 안드로이드 심화 학습 377핵심적인 안드로이드 기능 탐구 .................................................................. 377

애플리케이션 권한의 선언과 적용 .........................................................377

알림 기능을 이용한 사용자 알림 ............................................................378

고급 사용자 인터페이스 설계 ...................................................................... 379

스타일과 테마 활용 .................................................................................379

Page 18: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xviii

사용자 정의 View 및 ViewGroup 컨트롤 설계 ....................................380

입력 방법 다루기 .....................................................................................381

사용자 제스처 처리 .................................................................................381

텍스트를 음성으로 변환하기 ..................................................................382

음성을 텍스트로 변환 .............................................................................383

멀티미디어 다루기 ........................................................................................ 383

오디오 재생과 녹음 .................................................................................384

동영상 재생과 녹화 .................................................................................384

2D 그래픽과 3D 그래픽 다루기 .................................................................. 385

안드로이드 그래픽 라이브러리 이용 .....................................................385

OpenGL ES 그래픽 API 활용 ................................................................386

안드로이드 기기의 개인화 ........................................................................... 386

벨소리 설정 ..............................................................................................387

배경화면 설정 ..........................................................................................387

라이브 배경화면 만들기 .........................................................................387

데이터 관리와 공유 ....................................................................................... 388

파일과 디렉터리 다루기 .........................................................................389

SQLite 데이터베이스에 구조적인 데이터 저장하기 ............................390

다른 애플리케이션과 데이터 공유하기 .................................................390

전역 검색과 통합하기 .............................................................................392

기기 하드웨어에 접근 ................................................................................... 392

원시 센서 데이터 읽기 ............................................................................393

Wi-Fi 다루기 ............................................................................................394

블루투스 활용 ..........................................................................................394

전원 설정과 배터리 수명 관리 ................................................................394

정리 ................................................................................................................. 395

퀴즈 .........................................................................................................396

해답 .........................................................................................................397

실습 문제 ..................................................................................................397

Page 19: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xix

22장 안드로이드 애플리케이션 테스트 399테스트 우수 실천법 ....................................................................................... 399

코딩 표준 수립 .........................................................................................400

주기적인 버전 관리하의 빌드 .................................................................401

결함 추적 시스템 활용 ............................................................................401

훌륭한 테스트 계획 수립 ........................................................................402

테스트 커버리지 높이기 ............................................................................... 403

테스트 환경 관리 .....................................................................................403

에뮬레이터에서 테스트하기 ...................................................................405

타겟 단말기에서 테스트하기 ..................................................................406

자동화된 테스트 수행 .............................................................................407

정리 ................................................................................................................. 414

퀴즈 .........................................................................................................415

해답 .........................................................................................................416

실습 문제 ..................................................................................................417

23장 애플리케이션 배포 준비 419출시 과정 이해 ............................................................................................... 419

출시 후보 빌드 준비 ...................................................................................... 421

출시를 위한 안드로이드 매니페스트 파일 준비 ...................................421

관련 서비스의 출시 준비 ........................................................................422

애플리케이션 출시 후보 테스트 .................................................................. 423

애플리케이션 패키지화와 서명 ................................................................... 424

애플리케이션에 전자 서명하기 ..............................................................424

패키지 파일 내보내기와 서명하기 .........................................................425

서명된 애플리케이션 패키지 테스트 .......................................................... 427

서명된 애플리케이션 패키지 설치 .........................................................427

서명된 애플리케이션 검증......................................................................428

Page 20: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xx

정리 ................................................................................................................. 428

퀴즈 .........................................................................................................430

해답 .........................................................................................................431

실습 문제 ..................................................................................................431

24장 안드로이드 마켓에 배포하기 433안드로이드 마켓에 판매하기 ....................................................................... 433

개발자 계정 등록 .....................................................................................434

안드로이드 마켓에 애플리케이션 업로드하기 .....................................435

안드로이드 마켓에 배포하기 ..................................................................438

다른 개발자 계정의 혜택 활용 ................................................................440

그 밖의 안드로이드 배포 방법 ................................................................440

자체적인 사이트에서 애플리케이션 판매하기 .....................................440

다른 판로를 통한 애플리케이션 판매 ....................................................441

정리 ................................................................................................................. 443

퀴즈 .........................................................................................................444

해답 .........................................................................................................445

실습 문제 ..................................................................................................446

부록A 안드로이드 개발 환경 구성 449개발 장비 제원 ............................................................................................... 449

지원 운영체제 ..........................................................................................449

이용 가능한 공간 .....................................................................................450

자바 개발 도구 설치 ...................................................................................... 450

이클립스 IDE 설치 ........................................................................................ 450

윈도에 설치 시 주의사항 ........................................................................451

맥 OS X에 설치 시 주의사항 ..................................................................451

안드로이드 SDK 설치 ................................................................................... 451

Page 21: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxi

윈도에 설치 시 주의사항 ........................................................................452

맥 OS X에 설치 시 주의사항 ..................................................................452

리눅스 OS에 설치 시 주의사항 ..............................................................452

이클립스용 안드로이드 플러그인(ADT) 설치와 구성.............................. 452

안드로이드 SDK 업그레이드 ....................................................................... 453

기기 디버깅을 위한 개발 하드웨어 구성 .................................................... 454

안드로이드 기기에 USB 디버깅 활성화하기 ........................................454

기기 디버깅을 위한 운영체제 설정 ........................................................455

부록B 이클립스 IDE 팁과 활용 457새 클래스와 메서드 생성 .............................................................................. 457

임포트문 정리 ................................................................................................ 458

코드 문서화 .................................................................................................... 458

자동 완성 활용 ............................................................................................... 459

효율적인 코드 편집 ....................................................................................... 459

이름 바꾸기 .................................................................................................... 460

코드 형식화 .................................................................................................... 460

코드 구성 ........................................................................................................ 461

리팩터링 기능 활용 ....................................................................................... 461

알 수 없는 빌드 오류 해결 ............................................................................ 463

사용자 정의 로그 필터 생성 ......................................................................... 463

탭 이동 ............................................................................................................ 464

버전 관리 시스템과의 통합 .......................................................................... 464

부록C 보충 자료 467출판사 웹 사이트 ........................................................................................... 467

저자 연락처 .................................................................................................... 469

인터넷 상의 안드로이드 참고 자료 활용 .................................................... 469

Page 22: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxii

부록D 안드로이드 2.2 소개 473개요 ................................................................................................................. 473

주요 변경 사항 ............................................................................................... 473

성능 개선 ..................................................................................................473

홈 화면의 변화 .........................................................................................474

익스체인지 지원 강화 .............................................................................474

포터블 핫스팟 ..........................................................................................474

API 레벨 ...................................................................................................475

프레임워크 API 변경 사항 ........................................................................... 475

외부 저장소 매체에 앱 설치....................................................................475

데이터 백업 ..............................................................................................477

그래픽 .......................................................................................................493

미디어 .......................................................................................................493

음성 인식 및 서드 파티 인식 엔진 ..........................................................493

카메라 및 캠코더 .....................................................................................494

기기 정책 관리자 .....................................................................................494

UI 프레임워크 .........................................................................................494

계정과 동기화 ..........................................................................................495

새 매니페스트 요소와 속성.....................................................................495

권한 .........................................................................................................495

API 변경 사항 ..........................................................................................496

내장 애플리케이션 ..................................................................................496

로캘 .........................................................................................................497

에뮬레이터 스킨 ......................................................................................498

찾아보기..............................................................................499

Page 23: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxiii

전 세계의 모든, 특히 친절하고 너그러우시고, 기막히게 맛있는 피칸 파이를 구우시며,

현상 수배(America's Most Wanted) 프로그램을 즐겨 보시는

할머니 할아버지께 이 책을 바칩니다.

여러분은 절대로 성가신 존재가 아닙니다. 오히려 세상의 축복입니다.

그리고 저희가 이렇게 말씀 드린 것을 기억하지 못하시더라도 신경 쓰지 마세요.

내일 다시 한번 말씀드릴 거니까요.

Page 24: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxiv

옮긴이 글

스마트폰 시장이 뜨겁다. 그래서인지 요즘에는 영화관에만 가도 본 영화가 시작하기 전에 나오는

기업 광고를 보면 거의 하나같이 스마트폰 광고다. 또 거리를 걷거나 지하철을 타도 스마트폰에 빠

져 있는 사람들을 자주 본다. IT 학원은 물론 대학교에서도 스마트폰 개발과 관련된 과목이 개설

되기도 한다. 신문이나 뉴스에서도 스마트폰 관련 기사가 쏟아진다. 그리고 이러한 열풍의 중심에

는 아이폰과 안드로이드폰이 있다.

아이폰에 탑재되는 iOS와 달리 안드로이드폰에 탑재되는 안드로이드 플랫폼은 개방형 플랫폼

이다. 따라서 안드로이드 플랫폼은 휴대전화를 비롯해서 다양한 기기에 탑재될 가능성이 iOS에

비해 훨씬 더 많다(서문에도 나오지만 안드로이드를 탑재한 전자렌지도 있다!). 이는 앞으로 새로

운 형태의 제품이 나올 가능성과 그러한 제품을 만들어 낼 기회가 무궁무진하다는 뜻이기도 하다.

그리고 개발자 입장에서 보면 안드로이드 플랫폼에서 애플리케이션을 개발하는 데는 별다른

진입장벽이 없다. 기존 자바 개발을 해오던 사람이라면 이클립스 환경을 토대로 에뮬레이터에 애

플리케이션을 띄우는 데 채 1시간도 걸리지 않을 것이다. 익숙한 자바 언어와 개발 환경을 적극적

으로 활용함으로써 안드로이드 진영은 이미 검증된 개발자 풀을 확보한 상태라고도 할 수 있다.

지금까지는 안드로이드 플랫폼의 잦은 업그레이드와 보안상의 결함은 많은 원망과 우려를 낳았

지만 플랫폼이 안정화되고 성숙해지면 그러한 문제는 자연스럽게 해결될 것이다. 이미 SDK 2.2 버

전인 프로요(Froyo)가 이전 버전의 마이너 업그레이드였음에도 엄청난 속도 개선과 기능 향상을

한 걸로 미뤄보면 앞으로 나올 SDK 3.0인 진저브레드(Gingerbread)는 또 얼마나 변화한 모습을

보여줄지 사뭇 기대된다.

이 책은 『Teach Yourself Android Application Development in 24 Hours』의 한국어판이다. 시

리즈 특성에 맞게 이 책은 안드로이드 플랫폼은 무엇인가부터 시작해서 실제로 안드로이드 마켓

에 안드로이드 애플리케이션을 올리는 과정까지 단계별로 설명해준다. 또한 부담스럽지 않게 하루

한 시간, 24일이면 전반적인 안드로이드 개발과 관련된 모든 사항을 파악할 수 있게 구성돼 있다.

또한 『시작하세요! 안드로이드 프로그래밍』의 저자답게 개발을 진행하면서 반드시 알아야 하거나

중요한 내용은 중간 중간 빠짐없이 일러주므로 안드로이드 개발을 처음 접하는 분이라면 이 책이

분명 크나큰 도움을 주리라 생각한다.

Page 25: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxv

끝으로 이 책을 번역하는 데 항상 물심양면으로 도와주신 위키북스 사장님과 팀장님께 감사 드

린다.

이대엽

Page 26: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxvi

지은이 소개

로런 다시 (Laren Darcey)

로런 다시는 안드로이드, 아이폰, 블랙베리, 팜 프리, BREW, J2ME를 포함한 모바일 기술에 특화

된 소규모 소프트웨어 회사에서 기술 지도와 운영을 맡고 있다. 20년이 넘는 전문 소프트웨어 제

작 경력을 지닌 로런은 엔터프라이즈 아키텍처와 상용급 모바일 애플리케이션 개발 분야의 권위

자로 통한다. 로런은 산타 크루즈에 위치한 캘리포니아 대학에서 전산학 학사 학위를 받았다.

로런은 엄청난 자유 시간을 모바일 기기에 심취한 자신의 괴짜 남편과 전세계를 여행하는 데 보

내며 자연 경관을 대상으로 하는 열정적인 사진가이기도 하다. 로런의 작품은 책과 신문의 형태로

전세계로 퍼져나가고 있다. 남아프리카에서는 4미터에 달하는 대형 백상어와 함께 다이빙을 한 적

이 있으며, 광분한 하마 떼와 화가 난 수컷 코끼리 사이에 끼인 적도 있다. 일본에서는 원숭이의 공

격을 받고, 케냐에서는 굶주린 사자 두 마리와 함께 협곡에 갇힌 적도 있으며, 이집트에서는 심한 갈

증을 느꼈으며, 태국에서는 쿠데타를 가까스로 모면한 적도 있고, 스위스의 알프스를 지나는 길에

는 지오캐시(geocache)를 남겨두기도 했으며, 독일의 비어 홀을 술에 취한 채로 돌아다녔으며, 다

쓰러져 가는 유럽의 성에서 잠을 자기도 하고, 아이슬란드의 빙하에 혀가 달라붙은 적도 있다(야생

순록 떼가 자신을 수상쩍은 눈초리로 지켜보고 있는 가운데).

셰인 콘드 (Shane Conder)

셰인 콘더는 폭넓은 개발 경험을 지녔으며 지난 10여년은 모바일 및 임베디드 개발에 주력하고 있

다. 그는 BREW, J2ME, 팜, 윈도 모바일, 안드로이드에서 동작하는 다수의 상용 애플리케이션을

설계하고 계발했으며, 그러한 애플리케이션 가운데 일부는 전세계 수백만 대에 이르는 전화기에

설치되어 사용되고 있다. 셰인은 자신의 블로그를 통해 모바일 산업에 관해 폭넓은 주제로 글을

쓰고 모바일 개발 플랫폼을 평가해 오고 있으며, 그의 블로그는 블로그 세계에서 매우 잘 알려져

있다. 셰인은 캘리포니아 대학에서 전산학 학사 학위를 받았다.

자칭 전자기기 폐인인 셰인은 항상 최신 휴대 전화기나 노트북을 갖고 다닌다. 그는 종종 아마존

웹 서비스나 안드로이드, 아이폰, 구글 앱 엔진을 비롯해서 자신의 뇌에서 창의성을 담당하는 부분

을 자극하는 흥미진진하고 최첨단 기술에 푹 빠져있는 자신을 발견하곤 한다. 또한 자신의 괴짜 아

내가 4미터에 달하는 대형 백상어와 함께 다이빙하게 만들고, 케냐에서는 사자한테 잡아 먹힐 뻔

Page 27: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxvii

하게 만들어도 아내와 함께 전세계를 여행 다니기를 좋아한다. 셰인은 일본에서 원숭이에게 공격을

당한 당한 것과, 로런이 아이슬란드에서 빙하에 혀가 달라붙었을 때 낄낄거리면서 안드로이드 전화

기를 꺼내 사진을 찍은 것, 그리고 자기 소개 글을 적는 방법을 아직까지도 배우지 않은 것이 자신의

실수임을 인정한다.

저자의 다른 책

이 책의 저자는 Addison-Wesley 출판사의 "개발자의 서재" 시리즈의 일부인 『시작하세요! 안드

로이드 프로그래밍』을 출간한 적이 있다. 뿐만 아니라 http://developer.com와 http://informIT.

com, 그리고 저자의 안드로이드 관련 블로그인 http://androidbook.blogspot.com에 수많은 기술

관련 글을 올리기도 했다.

감사의 말

이 책은 편집 팀과 동료, 친구, 가족을 포함해서 참을성 있고 배려심 넘치는 여러 사람들의 지도와

격려가 없었다면 결코 쓰지 못했을 것이다.

이 저술 프로젝트 전체를 통틀어 Pearson(Sams 출판사)의 편집 팀의 노고가 가장 크다. 특히

Trina MacDonald, Olivia Basegio, Betsy Harris에게 감사 드린다. 우리의 멋진 기술 검토자인

Jonathan Jackson은 이 책이 거짓됨 없이 올바르고 고품질의 기술 정보를 제공할 수 있게 도와줬

다. 끝으로 식구들이 심각한 병에 걸려서 할머니의 부엌 식탁에서 이 책을 써야 했음에도 원고 마

감일을 지켜야 했던 힘든 시기를 보내는 동안 우리를 지원해준 여러 친구와 가족들에게 감사한다.

(그렇다 안드로이드 앱은 어디서든 개발할 수 있다.) 그리고 Liz Reid, Guy Grayson, Lenz네 식구

(특히 �omas와 Patrick), Shoshi Brown과 그의 가족(특히 Jacob), Badger네 가족(특히 Wi-Vi

와 Nolia), Richard deCastongrene, Asher Siddiqui, Anthony Sha�er, Spencer Nassar, Mary

�ompson에게 아낌없는 지원과 격려에 대해 감사 드린다.

Page 28: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxviii

피드백을 기다립니다!

이 책의 독자로서 여러분은 우리에게 가장 중요한 비평가이자 조언자다. 우리는 여러분의 의견을

소중하게 여기며 우리가 제대로 하고 있는지, 더 잘할 수는 없는지, 그리고 우리가 어떤 분야를 대

상으로 글을 썼으면 하고, 또 그밖에 우리의 앞길을 밝혀줄 지혜로운 말들을 들려주길 바란다.

이 책을 좀 더 개선하려면 어떻게 해야 할지를 비롯해서 이 책의 어떤 부분이 좋거나 싫었는지

우리에게 이메일을 보내거나 직접 알려줬으면 한다.

그리고 이 책의 주제와 관련된 기술적인 문제에 대해서는 도움을 주지 못하며, 하루에 받는 메일

이 너무 많아서 보내준 메일에 대해 모두 답장을 보낼 수도 없다는 점을 알아줬으면 한다.

이메일을 쓸 때는 이 책의 제목과 저자를 비롯해서 여러분의 이름과 전화나 이메일 주소를 함께

적어주기 바란다. 이메일로 보내준 조언은 꼼꼼히 읽어보고 이 책을 펴내는 데 참여한 저자와 편집

자와 공유하겠다.

이메일: [email protected]

우편: Mark Taub

Editor-in-Chief

Sams Publishing

800 East 96th Street

Indianapolis, IN 46240 USA

Page 29: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxix

독자 서비스

이 책과 관련된 업데이트나 다운로드, 오탈자에 관한 정보가 필요하다면 웹사이트(http://

informit.com/register)를 방문해서 이 책을 등록하기 바란다.

위키북스 홈페이지 www.wikibook.co.kr 에서도 소스코드를 다운로드할 수 있다.

번역서에 대한 오탈자나 오류는 [email protected]로 연락 바란다.

Page 30: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxx

시 작 하 면 서

안드로이드 플랫폼은 오늘날 모바일 시장에서 위세를 떨치고 있으며 세계적인 관심을 끌고 있다.

안드로이드 플랫폼은 SDK의 기능성과 단말기 가용성, 기능 집합이라는 측면에서 수많은 발전을

이뤘다. 현재 굉장히 다양한 안드로이드 단말기와 장치가 출시되고 있으며, (최종적으로는) 사용

자의 손에 들어갈 것이다. 그리고 전화기에 대해서는 이야기하지 않겠지만 안드로이드는 넷북이나

인터넷 태블릿(ARCHOS 5), 전자책 리더(반즈 & 노블 눅), 디지털 액자, 그 밖의 다양한 가전 기기

에도 탑재되기 시작했다. 또한 안드로이드 전자렌지나 식기 세척기와 같은 가전기기에 대한 개념

검증(proof-of-concept)도 이뤄지고 있다. (그러지 말란 법도 있는가? http://bit.ly/bGqmZp를 확

인해보라.) 이동 통신사에서는 안드로이드 플랫폼을 비중 있게 다루고 있으며 베리존의 드로이드

와 같은 안드로이드 전화기를 홍보하는 데 엄청난 금액을 쏟아 붓고 있다.

지난 1년여 동안 안드로이드 플랫폼은 "프로그래머만 사용하는" 플랫폼에서 굉장한 경쟁력을

갖춘 좀더 입지를 굳힌 플랫폼으로 바뀌었다. (그렇다. 아이폰과 같은 플랫폼을 이야기하는 것이

다.)

하지만 어떤 플랫폼이 더 나은지를 따지는 문제로 빠지진 말자. 왜냐하면 솔직히 말해서 그러한

플랫폼을 모두 아우르는 단 하나의 플랫폼이 있다고 생각하는 건 정말 시간 낭비이기 때문이다.

전세계 사람들은 제각기 저마다의 이유(가격, 가용성, 통화 품질, 기능, 디자인, 친근함, 호환성)로

각기 다른 지역(CDMA, GSM)에서 다양한 전화기를 사용하는 것이 현실이다. 이러한 논쟁에 모

두 맞는 단 한 가지 해답이란 없다.

우리는 시중에 나온 거의 모든 주요 모바일 플랫폼을 대상으로 개발한 적이 있기에 각 플랫폼이

주는 혜택과 단점을 빠짐없이 알고 있다. 따라서 우리는 한 플랫폼이 다른 플랫폼에 비해 낫다고

주장하지는 않으며, 각 플랫폼에는 나머지 플랫폼과 비교했을 때 각기 고유한 이점이 있으며, 이러

한 이점들을 극대화할 수 있다.

특정 프로젝트에서 어떤 플랫폼을 사용할지 결정하는 것은 매우 까다로운 문제다. 때때로 해답

은 가능한 다양한 플랫폼을 사용해 보는 것일 때가 있다. 최근에 우리는 안드로이드 플랫폼이 해

답이라는 것을 알게 됐다. 안드로이드 플랫폼은 개발하는 데 비용이 많이 들지 않고 개발하기도

Page 31: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxxi

쉽고, 전세계에서 잠재적으로 이용할 수 있는 사용자가 수백만에 이른다. 게다가 다른 플랫폼에

비해 제약도 적다.

하지만 여전히 안드로이드 플랫폼은 비교적 신생 플랫폼에 속하며, 잠재력을 완전히 발휘하지

는 못하고 있다. 이것이 의미하는 바는 잦은 SDK 업데이트를 비롯해 새로운 기기의 폭발적인 시장

출시, 그리고 안드로이드 세계에 쏟아지는 모든 것들을 파악하기 위해 업무 시간을 거의 모조리

쏟아 부어야 한다는 것이다.

다시 말하면 다소 고생길이 될지도 모르지만 이러한 행사에 동참해서 끝내주는 애플리케이션

을 개발함으로써 이름을 떨칠 기회가 있을 것이다. 어서 여기에 동참하자.

대상 독자

안드로이드 단말기와 모바일 애플리케이션에 관한 기막힌 아이디어를 가지고 있는 누군가가 이

책을 가지고 재미를 보거나 이익을 얻지 말라는 법은 없다. 여러분이 모바일 기술을 파고들려고

하는 프로그래머든 멋진 앱 아이디어를 가지고 있는 기업가든 이 책은 여러분을 위한 것이다.

우리는 이 책을 읽는 독자에 대해 몇 가지 사항을 가정한다. 이 책의 독자는 기본적인 (클래스,

메서드, 상속 등과 같은) 자바 프로그래밍 언어에 대해 이해하고 있겠지만 안드로이드는 자바를

배우기 위한 멋진 터전을 만들어준다. 이 책에서는 지나치게 기교가 넘치거나 혼동되는 자바 용법

은 사용하지 않으려고 노력했다. 때문에 프로그래밍을 처음 시작했더라도 아무 자바 입문서나 붙

잡고 처음 몇 장(chapter)을 읽거나 온라인 자습서만 따라 해봐도 이 책을 읽는 데 필요한 자바 지

식은 충분히 습득할 수 있을 것이다.

우리는 여러분이 애플리케이션(예를 들면, 이클립스, 자바 JDK, 안드로이드 SDK)을 비롯해서

도구와 드라이버(USB를 통해 전화기에 연결하기 위해)를 설치하는 데 어느 정도 익숙하고, 또 안

드로이드 단말기에서 애플리케이션과 같은 것을 띄울 수 있을 만큼 단말기를 다룰 수 있다고 가정

한다. 무선 개발 경험은 아무것도 필요하지 않다.

이 책의 구성

24개 장에 걸친 내용을 익히는 동안 여러분은 완전히 기능하고 네트워크 및 위치 기반 서비스

(LBS, Location-Based Service)가 가능한 안드로이드 애플리케이션을 설계하고 개발할 것이며,

소셜 네트워크 기능으로 마무리할 것이다. 각 장의 내용은 새로 소개한 안드로이드의 개념에 기초

를 두고 있으며, 각 장을 읽어 나가면서 애플리케이션을 점차 개선해 나갈 것이다.

Page 32: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxxii

이 책은 크게 6가지 부분으로 나뉜다.

1부: 안드로이드 기초

1부에서는 안드로이드를 소개한 다음 안드로이드 SDK와 도구를 익히고 개발 도구를 설치한 후,

첫 안드로이드 애플리케이션을 작성한다. 또한 안드로이드 애플리케이션의 구조와 구성을 비롯해

서 문자열, 그래픽, 사용자 인터페이스 컴포넌트와 같은 애플리케이션 리소스를 프로젝트에서 통

합하는 방법과 안드로이드 애플리케이션을 작성하는 데 필요한 설계 원칙을 소개한다.

2부: 애플리케이션 뼈대 제작

2부에서는 이 책의 나머지 부분에서 주요 학습 수단으로 쓸 애플리케이션의 뼈대를 개발한다. 먼

저 애니메이션이 적용된 시작 화면을 개발하는 것으로 시작해서, 이어서 메뉴, 환경설정, 도움말,

점수 화면을 개발한다. 이 과정에서 기초적인 사용자 인터페이스 설계 원칙과 사용자 입력을 수집

하는 방법, 사용자에게 대화상자를 보여주는 방법을 배운다. 마지막으로 게임 화면의 핵심적인 애

플리케이션 로직을 구현할 것이다.

3부: 강력한 안드로이드 기능을 활용한 애플리케이션 강화

3부에서는 안드로이드 SDK에 좀더 깊이 파고들어 가봤노라, 해봤노라! 애플리케이션에 좀더 특화

된 기능을 추가한다. 여기서는 그래픽과 내장 카메라를 이용하고 LBS를 활용하는 방법을 비롯해

서 애플리케이션에서 네트워크 기능을 지원하고 소셜 네트워크 기능을 통해 애플리케이션을 개선

하는 방법을 배운다.

4부: 안드로이드 애플리케이션 다듬기

4부에서는 다양한 단말기와 화면 크기, 외국어에 맞게 애플리케이션을 수정하는 방법을 배운다.

또한 4부에서는 모바일 애플리케이션을 테스트하는 각종 방법에 관해서도 배운다.

5부: 애플리케이션 배포

5부에서는 안드로이드 애플리케이션을 안드로이드 마켓에 올리기 위해 준비해야 할 사항과 배포

방법에 관해 배운다.

6부: 부록

6부에서는 안드로이드 개발 환경 구성과 이클립스 IDE 사용, 이 책의 웹 사이트나 소스 코드와 같

은 이 책의 보충 자료를 접하는 데 유용하게 활용할 수 있는 여러 참고 자료를 소개한다.

Page 33: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxxiii

이 책의 내용

구체적으로 이 책은 안드로이드 SDK 버전 2.1 1 을 대상으로 썼지만 예제 중 다수는 다양한 안드로

이드 SDK를 실행하는 단말기에서도 테스트를 마쳤다.

안드로이드 SDK는 굉장히 자주(몇 달마다) 업데이트된다. SDK의 어떤 기능을 중점적으로 사

용할지 결정할 때는 이러한 사실을 염두에 둬서 최대한 상하위 호환성을 확보한다. 필요한 경우에

는 사용자가 쓸 수 있는 특정 기능 가운데 안드로이드 SDK 버전이 영향을 줄 수 있는 부분들을

짚어주겠다.

이 책은 초보자가 따라 하면서 배울 수 있는 형식으로 썼다. 안드로이드 개발과 관련해서 기능

별 코드 예제와 안드로이드 플랫폼의 모든 기능을 빠짐없이 보여주는 참고서가 필요하다면 우리

가 쓴 좀더 고급 안드로이드 서적인 『시작하세요! 안드로이드 프로그래밍』을 추천한다.

이 책에서 쓴 개발 환경

이 책의 코드는 다음과 같은 개발 환경을 이용해 작성했다.

윈도 7과 맥 OS X 10.6 ▶

이클립스 자바 IDE 버전 3.5(갈릴레오) ▶

이클립스 JDT 플러그인과 WTP(Web Tools Platform) ▶

썬 자바 SE 개발 도구(JDK) 6 Update 18 ▶

안드로이드 SDK 버전 2.1 (주요 타겟 SDK 버전이며, 다양한 SDK 버전을 대상으로 개발과 ▶

테스트를 마쳤음)

다양한 안드로이드 단말기(안드로이드 SDK 1.6, 2.0.1, 2.1) ▶

1   (옮긴이) 원서에서 제공하는 소스 코드는 SDK 버전 2.1에 맞춘 버전이나 번역서에서는 2.2를 기반으로 소스 코드를 테스트했으

며, 필요에 맞게 수정한 부분은 주석으로 표시했다.

Page 34: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxxiv

이 책의 조판 관례

이 책에서는 특별한 정보를 담고 있는 관련 정보가 여럿 포함돼 있다.

알아두세요▶▶

알아두세요 본문 내용과 관련된 유용한 정보나 힌트를 제공한다.?

잠깐만요▶▶

잠깐만요 흥미롭거나 관련이 있을 법한 추가 정보를 제공한다.

▶ 조심하세요

조심하세요 본문 내용과 관련해서 마주칠 법한 함정에 관한 힌트나 팁, 그리고 그러한 함

정을 피하는 방법을 제공한다.!

아 책에서는 코드와 관련해서 다음과 같은 관례를 따른다.

코드와 프로그래밍 용어는 고정폭 ▶ TheSansMono 글꼴로 표시한다.

▶▶ 를 사용해서 이전 코드와 동일한 줄에 있는 코드를 나타냈다.

명확함과 책의 너비를 적절히 유지하기 위해 책에 출력된 코드 예제에서 예외 처리와 오류 ▶

확인을 위한 코드를 제거하기도 했다.

이 책에서는 단계별 내용이나 본문 내용을 설명할 때 다음과 같은 관례를 따랐다.

이 책에서 개발한 핵심 애플리케이션은 반복적인 과정을 거쳐 개발했다. 이것은 새로운 개 ▶

념을 처음 설명할 때는 그러한 새로운 개념과 관련된 모든 항목을 상세하게 설명한다는 것

을 의미한다. 이어지는 장에서 좀더 심화된 주제로 나아갈 때는 이전 장에서 다룬 안드로

이드 개발과 관련된 기초적인 측면은 완벽하게 숙지했다고 가정하고, 반복해서 설명하지

않는다. 어떤 경우에는 이전 장에서 다룬 내용 가운데 일부를 구현해보라고 일러준 다음

이후 장에서 그것을 개선하는 방식을 취하기도 했다.

Page 35: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

xxxv

이 책에서는 독자가 이 책을 순서대로 읽을 것이라 가정한다. 책을 읽다 보면 핵심 애플리 ▶

케이션 예제를 개발하는 과정을 이어나가기 위해 각 기능을 구현할 때 취해야 할 모든 단

계를 일일이 상세히 설명하지는 않는다는 점을 알게 될 것이다. 예를 들면, 화면에 구현해

야 할 버튼이 세 개 있다면 첫 번째 버튼을 구현하는 과정은 단계별로 알려주겠지만 나머

지 두 버튼을 구현하는 과정은 연습 문제로 남겨둔다는 얘기다. 이후의 다른 주제를 다루

는 장에서도 독자가 직접 다른 화면에 버튼을 구현해보라고 요청할지도 모른다.

메뉴를 따라 이동하는 부분에서는 쉼표를 이용해 각 메뉴를 분리한다. 이를테면, 새 문서 ▶

창을 열라고 한다면 "파일, 새 문서를 차례로 선택한다."라고 적을 것이다.

Page 36: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

LESS

ON

01 이번 시간에 배울 내용

안드로이드 플랫폼의 간략한 역사 �

이클립스에 익숙해지기 �

안드로이드 프로젝트 만들기 �

애플리케이션 실행과 디버깅 �

Page 37: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01안드로이드 시작하기

안드로이드는 최초의 완전하고, 개방형이자, 무료 모바일 플랫폼이다. 개발자들은 강력하고 기능

이 풍부한 애플리케이션을 제작하기 위한 각종 도구를 비롯해서 종합적인 SDK를 사용할 수 있다.

안드로이드 플랫폼은 오픈소스이며, 개발자들에게 익숙할 검증된 공개 표준에 기반을 두고 있다.

그리고 무엇보다도 안드로이드의 가장 좋은 점은 개발자들에게 값비싼 진입 장벽이라는 추가 비

용을 요구하지 않는다는 것이다(그나마 비용이라고 해도 안드로이드 마켓과 같은 서드파티 배포

메커니즘에 공개하는 데 드는 비용 정도다). 안드로이드 개발자들이 개발한 애플리케이션을 배포

하고 상업화하는 방법은 수도 없이 많다.

안드로이드 소개

안드로이드와 다른 모바일 기술과의 관계를 이해하기 위해 먼저 안드로이드 플랫폼의 탄생 배경

을 잠시 알아보자.

구글과 개방형 단말기 연합

2007년, 단말기 제조사, 무선망 공급자, 그리고 여러 소프트웨어 개발 회사(특히 구글)가 한데 모

여 차세대 무선 플랫폼 개발을 목표로 개방형 단말기 연합(OHA, Open Handset Alliance)이라

는 조직을 만들었다. 기존 플랫폼과 달리 이 새로운 플랫폼은 독점적이지 않으며 공개 표준에 기

반을 둬서 개발 비용을 낮추고 수익을 늘려줄 것이다. 또한 모바일 소프트웨어 개발자들은 이 플

랫폼에서 제공하는 전례가 없는 단말기 기능을 활용해서 더욱 혁신적인 성과를 이뤄낼 수 있다.

수업 시작~~

Page 38: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

2 l 자율학습! 안드로이드 프로그래밍

한편 RIM 블랙베리(BlackBerry)나 애플 아이폰(iPhone)과 같은 독점적인 플랫폼이 인기를 끌자

모바일 개발 커뮤니티에서도 이처럼 잠재적으로 시장의 판도를 바꿔버릴 만한 플랫폼이 나오길

고대했다.

안드로이드의 등장

2008년, OHA에서는 안드로이드 플랫폼을 발표하고 개발자들을 위한 베타 프로그램을 시작했다.

안드로이드도 새로운 플랫폼이 일반적으로 거치는 개정 과정을 밟았다. 즉, 안드로이드 소프트웨

어 개발 도구(Android So�ware Development Kit)도 정식 버전이 출시되기 전에 여러 번 출시된 바

있다. 첫 안드로이드 단말기(T-Mobile G1)는 2008년 후반에 출시되기 시작했다. 2009년 내내 안드

로이드가 탑재된 단말기와 다양한 기기들이 전 세계 시장에 문을 두드렸다. 이 책을 쓰고 있는 지

금 전 세계적으로 통신사를 통해 구입 가능한 안드로이드 전화기는 36가지가 넘는다. 이 수치에는

현재 이용 가능한 수많은 안드로이드 태블릿과 전자책 리더는 물론 이미 발표됐지만 출시 대기중

인 수십 종류의 기기와 소비자가 직접 제작한 안드로이드 기기는 포함되지 않는다. 세계 시장으로

뻗어 나가는 안드로이드 기기의 비율은 증가일로에 있으며, 미국에서만도 현재 모든 주요 망 공급

자에서 안드로이드 전화기를 자사의 제품 계열에 포함해둔 상태다.

구글은 초창기부터 OHA의 구성원으로 기여하고 있다. 구글은 http://developer.android.com 1

에서 안드로이드 개발자 프로그램과 안드로이드 오픈 소스 프로젝트를 운영하고 있다. 이 웹 사이

트에서는 안드로이드 SDK를 내려 받거나 최신 플랫폼 관련 문서와 안드로이드 개발자 포럼을 확

인할 수 있다. 또한 구글은 최종 사용자에게 안드로이드 애플리케이션을 판매하기 위한 가장 인기

있는 서비스인 안드로이드 마켓(Android Market)도 운영하고 있다.

안드로이드 마스코트는 그림 1.1에 나온 녹색 로봇이다.

그림 1.1 | 안드로이드 마스코트

1   (옮긴이) http://d.android.com으로도 접속 가능하다.

Page 39: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 3

안드로이드 개발자 대회

구글에서는 개발자들의 안드로이드 애플리케이션 개발을 장려할 목적으로 개발자 대회

(Developer Challenge)라고 하는 행사를 여러 번 개최한 바 있다. 첫 회 상금은 무려 천만 달러

에 달했다.

‘저렴하고 손쉬운’이 혜택을 줄 때가 있지만 모바일 개발에서만큼은 예외다. 무선 애플리케이션

개발은 터무니없이 값비싼 컴파일러와 비공개적인 개발자 프로그램을 제공하며, 데스크톱 애플리

케이션 개발과 비교해서 진입하기 힘들기로 악명 높다. 안드로이드는 이러한 기존의 비개방적이라

는 개발 관행을 깨부순다. 다른 모바일 플랫폼과 달리 안드로이드 애플리케이션을 개발하는 데는

실질적으로 거의 비용이 들지 않는다.

안드로이드 SDK와 도구는 안드로이드 개발자 웹 사이트(http://developer.android.com)에서

무료로 내려 받을 수 있다. 자유롭게 사용할 수 있는 이클립스(Eclipse) 프로그램은 안드로이드 애

플리케이션 개발을 위한 가장 대중적인 통합 개발 환경(IDE, Integrated Development Environment)

이며, 안드로이드 개발자 사이트에서 안드로이드 개발을 돕는 강력한 플러그인도 이용할 있다.

그럼 ‘저렴한’에 관해서는 살펴봤으니, 이제 안드로이드 개발이 왜 쉬운가에 관해 이야기해보

자. 안드로이드 애플리케이션은 자바로 작성하기 때문에 개발자들은 java.net과 같은 안드로이드

SDK에서 제공하는 여러 패키지에 금방 익숙해질 것이다. 게다가 개발자들은 안드로이드의 학습

곡선이 굉장히 완만하다는 사실을 금방 알게 될 것이다.

이제 시작해보자!

이클립스에 익숙해지기

먼저 사용자에게 한 줄짜리 텍스트를 보여주는 간단한 안드로이드 버전의 "Hello, World" 애플

리케이션을 작성하는 것으로 시작하자. 애플리케이션을 작성하는 동안에는 이클립스 환경을 체

험하게 될 것이다. 구체적으로 말해서 이클립스용 안드로이드 개발 도구(Android Development

Tools) 플러그인에서 제공하는 기능에 관해 배울 것이다. ADT 플러그인은 안드로이드 애플리케

이션의 개발, 컴파일, 패키지화, 배포 기능을 제공해준다. 구체적으로 다음과 같은 기능을 제공

한다.

Page 40: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

4 l 자율학습! 안드로이드 프로그래밍

필요한 모든 프로젝트 파일을 생성해주는 안드로이드 프로젝트 마법사 ▶

안드로이드에 특화된 리소스 편집기 ▶

안드로이드 SDK와 AVD(Android Virtual Devices, 안드로이드 가상 기기) 관리자 ▶

안드로이드 애플리케이션의 모니터링과 디버깅을 위한 이클립스 DDMS 퍼스펙티브 ▶

안드로이드 LogCat 로깅 통합 ▶

자동화된 빌드 및 안드로이드 에뮬레이터와 단말기로의 애플리케이션 배포 ▶

출시 버전 배포를 위한 애플리케이션 패키지화와 코드 서명 도구 ▶

안드로이드 SDK와 도구 설치

안드로이드 애플리케이션을 개발하기 위한 자세한 설치 및 구성 방법에 관해서는 부록 A, "안드

로이드 개발 환경 구성"에서 다룬다. 안드로이드 애플리케이션을 개발하려면 이클립스와 안드

로이드 SDK, 이클립스용 ADT 플러그인을 설치하고 구성해야 한다. 또한 개발 시 사용하게 될

안드로이드 단말기용 USB 드라이버도 설치해야 할 것이다.

이제 이러한 기능에 대해 좀더 살펴보자.

안드로이드 프로젝트 생성

안드로이드 프로젝트 마법사를 이용하면 안드로이드 애플리케이션에 필요한 파일을 모두 만들

수 있다. 이클립스를 열고 다음 단계에 따라 새 프로젝트를 만든다.

File, New, Android Project 메뉴를 차례로 선택하거나 이클립스 툴바에서 폴더처럼 생긴11

(a라는 글자와 더하기 기호가 있는) Android Project 생성 아이콘( )을 클릭한다.

조심하세요 처음으로 안드로이드 프로젝트를 만들 때는 File, New, Project 메뉴를 선택

한 다음 Android, Android Project를 선택해야 할지도 모른다. 일단 이렇게 하고 나면

Android Project가 이클립스 프로젝트 유형에 나타날 것이고 1번 단계에서 설명한 방법을

이용할 수 있다.

!

Page 41: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 5

프로젝트 이름을 지정한다. 여기서는 Droid1로 지정한다.21

프로젝트 위치를 선택한다. 이 프로젝트는 신규 프로젝트이므로 Create New Project in 31

Workspace 라디오 버튼을 선택한다. 또한 Use Default Location 체크박스에 체크한다.

알아두세요 프로젝트 파일을 다른 위치에 저장해도 괜찮다면 그냥 Use Default Location

체크박스의 체크를 취소하고 원하는 디렉터리를 지정하면 된다.

?

애플리케이션의 41 빌드 타겟(build target)을 선택한다. 대부분의 애플리케이션에서는 최종

사용자가 쓸 기기와 애플리케이션의 요건에 가장 부합하는 안드로이드 버전을 선택해야

할 것이다. 구글 애드온(예, 구글 지도)을 사용할 예정이라면 대상 플랫폼에 맞는 구글 API

버전을 선택해야 한다. 이 예제의 경우에는 안드로이드 2.2(API 레벨 8) 2 빌드 타겟만으로

도 충분하다.

애플리케이션의 이름을 지정한다. 이 이름은 사용자가 보게 될 이름이다. 여기서는 애플리51

케이션의 이름을 Droid #1로 한다.

자바의 표준 패키지 이름공간 관례에 따라 패키지 이름을 지정한다. 이 책의 코드는 모두 61

com.androidbook.* 이름공간 아래에 있을 것이므로 패키지 이름을 com.androidbook.

droid1로 지정한다.

Create Activity 체크박스를 체크한다. 이렇게 하면 마법사가 애플리케이션에서 기본값으로 71

실행되는 Activity 클래스를 만들어준다. 이 액티비티의 이름은 DroidActivity라 지정한다.

액티비티가 뭔가요?

액티비티(Activity)는 안드로이드 플랫폼의 핵심 구성요소다. 각 액티비티는 애플리케이션에서

수행할 수 있는 작업을 표현하며, 애플리케이션 사용자 인터페이스의 화면과 대응하기도 한다.

Droid #1 애플리케이션은 액티비티가 하나이며, 이름은 DroidActivity이고 String 하나를 사

용자에게 보여주는 일만 한다. 액티비티에 관해서는 3장, "안드로이드 애플리케이션 제작"에서

좀더 알아보겠다.

2   (옮긴이) 원서에서는 안드로이드 2.1 SDK를 기준으로 설명하고 있으나, 번역서에서는 2.2(API 레벨 8)를 기준으로 예제를 작성

하겠다.

Page 42: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

6 l 자율학습! 안드로이드 프로그래밍

이제 프로젝트 설정은 그림 1.2와 같은 모습일 것이다.

그림 1.2 | 이클립스의 안드로이드 프로젝트 마법사

Min SDK Version 필드가 올바르게 설정돼 있는지 확인한다. 이 필드는 기본적으로 빌드 81

타겟의 API 레벨로 설정돼 있을 것이다 3 (안드로이드 2.2 API 레벨 8). 이전 버전의 안드로

이드 SDK도 지원하고자 한다면 이 필드의 값을 바꿔야 한다. 하지만 이 예제에서는 기본

값으로 둔다.

Next 버튼을 클릭한다.91

안드로이드 프로젝트 마법사를 이용하면 안드로이드 애플리케이션과 함께 테스트 프로젝111

트도 만들 수 있다. 이 예제의 경우 테스트 프로젝트는 불필요하다. 하지만 나중에 이클립

스 도구 바의 안드로이드 프로젝트 마법사 아이콘(a, J, u라는 글자가 포함된 ) 오른

쪽에 있는 안드로이드 테스트 프로젝트 생성 아이콘을 클릭해서 언제든지 테스트 프로젝

트를 추가할 수 있다. 테스트 프로젝트에 관해서는 22장, "안드로이드 애플리케이션 테스

트"에서 자세히 논의하겠다.

3   (옮긴이) 현재 버전의 ADT에서는 이 필드의 값을 자동으로 채워주지 않는다. 그러므로 직접 해당 프로젝트에 적합한 값으로

채운다. 이 프로젝트에서는 기본값으로 8을 지정했다.

Page 43: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 7

Finish 버튼을 클릭한다.111

안드로이드 프로젝트 파일 구성

이제 이클립스 패키지 탐색기에서 Droid1이라는 안드로이드 프로젝트를 볼 수 있다. 여기서는 적

절한 안드로이드 SDK에 해당하는 jar 파일이 연결된 것과 더불어 아래에 나열한 중요 파일과 디렉

터리가 생성된 것을 확인할 수 있다.

AndroidManifest.xml ▶ : 애플리케이션의 주요 설정 파일.

▶ default.properties: 이클립스와 안드로이드 ADT 플러그인에서 사용되는 자동 생성된 빌

드 파일. 이 파일을 편집해서는 안 된다.

/src 폴더 ▶ : 모든 소스 코드가 들어갈 필수 폴더.

▶ /src/com.androidbook.droid1/DroidActivity.java: DroidActivity라는 이름을 지닌 이 애

플리케이션의 주요 진입점. 이 액티비티는 안드로이드의 매니페스트 파일에 기본 실행되는

액티비티로 정의돼 있다.

/gen/com.androidbook.droid1/R.java ▶ : 자동 생성되는 리소스 관리 소스 파일. 이 파일을

편집해서는 안 된다.

/assets 폴더 ▶ : 프로젝트를 구성하는 파일 가운데 컴파일되지 않은 파일이 들어가는 필수

폴더

▶ /res 폴더: 관리되는 애플리케이션 리소스가 들어가는 필수 폴더. 애플리케이션 리소스로

는 애니메이션, 단순 그래픽(drawable graphics), 레이아웃 파일, 데이터 형식의 문자열 및

숫자, 원시 파일이 있다.

/res/drawable ▶ : 애플리케이션 아이콘 그래픽 리소스가 다양한 크기로 저장되는 곳

/res/layout/main.xml ▶ : 화면에 그리기 위해 DroidActivity가 사용하는 레이아웃 파일

/res/values/strings.xml ▶ : 문자열 리소스가 정의된 파일

Page 44: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

8 l 자율학습! 안드로이드 프로그래밍

알아두세요 안드로이드 프로젝트 마법사를 이용하면 기존 안드로이드 프로젝트를 이클

립스에 추가할 수도 있다. 이렇게 하려면 New Android Project 대화상자(그림 1.2)에

서 기본값인 Create New Project in Workspace를 선택하는 대신 Create Project from

Existing Source를 선택하면 된다. 안드로이드 SDK의 /samples 디렉터리에는 지원되는

특정 플랫폼에 맞게 다양한 예제 프로젝트가 준비돼 있다. 예를 들어, 안드로이드 SDK 예

제 프로젝트는 /samples/android-xxx/(xxx는 플랫폼 버전 번호임)에서 찾아볼 수 있다.

아니면 세 번째 방법인 Create Project from Existing Sample을 선택해도 된다. 그렇지

만 생성 가능한 예제 프로젝트의 목록을 보려면 빌드 타겟을 먼저 선택해야 한다.

?

프로젝트 리소스 편집하기

기본적으로 새 안드로이드 프로젝트를 만들면 안드로이드 매니페스트 파일 리소스 편집기가 열

린다. 다양한 프로젝트 파일을 확인하기 위해 이 화면을 닫았더라도 신규 프로젝트에 들어 있는

AndroidManifest.xml 파일을 더블클릭하면 안드로이드 매니페스트 파일 리소스 편집기로 돌아

갈 수 있다(그림 1.3)

그림 1.3 | 이클립스에서 안드로이드 리소스 파일 편집

Page 45: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 9

안드로이드 매니페스트 파일 편집

안드로이드 매니페스트 파일은 안드로이드 애플리케이션의 주요 설정 파일에 해당한다. 편집기에

는 매니페스트 정보가 다수의 탭으로 구성돼 있다.

Manifest ▶ : 그림 1.3의 이 탭에서는 패키지 이름이나 애플리케이션의 버전 정보(설치 및 업

그레이드 용도로 사용됨)와 같은 애플리케이션 차원의 설정을 할 수 있다.

Application: 이 탭에서는 실행 가능한 액티비티(기본 실행되는 DroidActivity를 포함)와 ▶

애플리케이션에서 제공하는 다른 여느 기능이나 서비스와 같이 애플리케이션의 핵심적인

부분과 아이콘 이름이나 애플리케이션의 화면과 같은 애플리케이션의 세부 사항을 정의

할 수 있다.

▶ Permissions: 이 탭에서는 애플리케이션의 권한(permission)을 정의할 수 있다. 예를 들

면, 애플리케이션이 전화기에 저장된 연락처를 읽을 수 있으려면 매니페스트에 android.

permission.READ_CONTACTS라는 이름으로 Uses-Permission 태그를 등록해야 한다.

▶ Instrumentat ion : 이 탭은 안드로이드 SDK에서 사용 가능한 바이트코드 조작

(instrumentation)과 관련된 클래스를 이용해 단위 테스트를 수행하는 데 사용된다.

▶ AndroidManifest.xml: 이 탭에서는 매니페스트 파일을 직접 편집하기 위한 간단한 XML

편집기를 제공한다.

AndroidManifest.xml 탭으로 전환하면 매니페스트 파일은 다음과 같은 모습일 것이다.

<?xml version="1.0" encoding="utf-8"?>

<manifest

xmlns:android="http://schemas.android.com/apk/res/android"

package="com.androidbook.droid1"

android:versionCode="1"

android:versionName="1.0">

<application

android:icon="@drawable/icon"

android:label="@string/app_name">

<activity

android:name=".DroidActivity"

android:label="@string/app_name">

<intent-filter>

<action

android:name="android.intent.action.MAIN" />

Page 46: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

10 l 자율학습! 안드로이드 프로그래밍

<category

android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-sdk android:minSdkVersion="8" />

</manifest>

알아두세요 안드로이드 매니페스트 파일을 포함해서 모든 안드로이드 리소스 파일은 단

순 XML 파일이므로 언제든지 리소스 편집기를 쓰는 대신 원시 리소스 파일을 직접 편집

할 수 있다. 이클립스 도구 표시줄에서 파일처럼 생긴 안드로이드 XML 생성 아이콘(a라

는 글자와 더하기 기호가 있는 )을 클릭하면 새로운 안드로이드 XML 파일을 생성

할 수 있다.

?

안드로이드 매니페스트 파일 편집따라하기▶

이제 안드로이드의 매니페스트 파일을 편집해보자. 여기서 한 가지 알아야 할 속성은

debuggable 속성이다. 이 값을 설정하지 않으면 애플리케이션을 디버깅하지 못하므로 다음

단계에 따라 속성을 설정한다.

리소스 편집기에서 AndroidManifest.xml 파일을 연다.11

Application 탭으로 간다.21

debuggable 속성의 드롭다운 목록을 내려 true를 선택한다.31

매니페스트 파일을 저장한다.41

AndroidManifest.xml 탭으로 가서 XML을 살펴보면 이제 application 태그에 다음과 같이

debuggable 속성이 있음을 확인할 수 있다.

android:debuggable="true"

다른 리소스 파일 편집

대부분의 안드로이드 애플리케이션 리소스는 프로젝트의 /res 하위 디렉터리에 저장된다. /res 디

렉터리 안에는 다음과 같은 하위 디렉터리가 있다.

Page 47: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 11

▶ /drawable-ldpi, /drawable-hdpi, /drawable-mdpi: 이 세 가지 하위 디렉터리에는 화면에

서 사용되는 다양한 밀도와 해상도를 지닌 그래픽 및 단순 그래픽 리소스 파일이 저장된

다. 이클립스의 프로젝트 탐색기(Project Explorer)를 이용해서 이 디렉터리들을 열어 보

면 각 디렉터리마다 icon.png 그래픽 파일이 있음을 확인할 수 있다(이 파일이 바로 애플리

케이션의 아이콘이다). 이 세 디렉터리의 차이점에 관해서는 20장, "다양한 기기 지원"에서

알아보겠다.

/layout ▶ : 이 하위 디렉터리에는 사용자 인터페이스의 레이아웃 파일이 저장된다. 이 하위 디

렉터리에서는 기본 액티비티의 사용자 인터페이스를 정의한 main.xml 화면 레이아웃 파

일을 확인할 수 있다.

▶ /values: 이 하위 디렉터리는 텍스트 문자열, 색상 값 등을 비롯한 다양한 유형의 리소스로

구성돼 있다. 이 디렉터리에서는 애플리케이션에서 사용하는 모든 리소스 문자열을 담은

strings.xml 리소스 파일을 확인할 수 있다.

어떤 리소스 파일을 더블클릭하든 리소스 편집기가 실행된다. 언제든지 XML을 직접 수정할 수

있음을 기억해 두자.

따라하기▶ 문자열 리소스 편집

프로젝트의 main.xml 레이아웃 파일을 유심히 살펴보면 TextView 컨트롤에 대한 레이아웃

이 정의돼 있음을 볼 수 있다. 이 사용자 인터페이스 컨트롤은 단순히 문자열을 보여주는 역할

만 한다. 이 경우 화면에 표시되는 문자열은 @string/hello라는 문자열 리소스에 정의돼 있다.

문자열 리소스 편집기로 @string/hello라는 문자열 리소스를 편집하려면 다음과 같은 절차

를 따른다.

strings.xml 파일을 리소스 편집기에서 연다.11

hello라는 String을 선택하고 텍스트 편집기에 나타난 이름(hello)과 값(Hello World, 21

DroidActivity!)을 확인한다.

Value 필드에서 텍스트를 Hello, Dave로 바꾼다.31

파일을 저장한다.41

strings.xml로 가서 원본 XML을 살펴보면 <resources> 블록 안에 string 요소가 두 개 정의

돼 있음을 확인할 수 있다.

Page 48: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

12 l 자율학습! 안드로이드 프로그래밍

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello, Dave</string>

<string name="app_name">Droid #1</string>

</resources>

첫 번째는 @string/hello 문자열이다. 두 번째는 @string/app_name으로 애플리케이션의 이

름을 담고 있다. 안드로이드 매니페스트 파일을 다시 한번 살펴보면 애플리케이션 설정에서

@string/app_name을 쓰고 있음을 확인할 수 있다.

프로젝트 리소스에 관해서는 4장, ‘애플리케이션 리소스 관리’에서 좀더 자세히 알아보겠다. 지

금은 애플리케이션을 컴파일하고 실행하는 단계로 넘어가자.

애플리케이션 실행과 디버깅

안드로이드 애플리케이션을 빌드하고 디버깅하려면 먼저 프로젝트를 디버깅 상태로 설정해야 한

다. ADT 플러그인을 이용하면 이러한 일을 이클립스 개발 환경 안에서 모두 할 수 있다. 좀더 구체

적으로 설명하면 다음과 같은 작업을 해야 한다.

에뮬레이터로 쓸 ▶ 안드로이드 가상 기기(Android Virtual Device, AVD)를 설정한다.

프로젝트의 디버그 환경을 생성한다. ▶

안드로이드 프로젝트를 빌드하고 디버그 환경을 실행한다. ▶

이러한 각 작업을 모두 마치면 이클립스에서 자체적으로 탑재한 디버거를 안드로이드 에뮬레이

터에 부착해준다. 그러고 나면 애플리케이션을 마음껏 디버깅할 수 있다.

안드로이드 가상 기기 관리

안드로이드 에뮬레이터에서 애플리케이션을 실행하려면 먼저 안드로이드 가상 기기를 구성해야

한다. AVD 프로필은 지원하는 안드로이드 플랫폼을 포함해서 시뮬레이션하고자 하는 에뮬레이

터의 유형을 기술한다. AVD 프로필에서는 화면 크기나 방향을 다양하게 지정할 수 있고, 에뮬레

이터에 SD 카드 장착 여부와 카드의 용량을 지정할 수 있다. 이 예제에서는 안드로이드 2.2에 기본

값으로 설정된 AVD로도 충분하다. 다음은 기본 AVD를 생성하는 단계를 나열한 것이다.

Page 49: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 13

이클립스의 도구 표시줄에서 화살표가 포함된 약간 녹색을 띤 안드로이드 아이콘(11 )

을 클릭해서 "Android SDK and AVD Manager"를 실행한다.

왼쪽 메뉴의 Virtual Devices 메뉴를 클릭한다. 설정된 AVD가 목록 형태로 나타날 것21

이다.

새 AVD를 생성하기 위해 New 버튼을 클릭한다.31

AVD의 이름을 지정한다. 모두 기본값을 사용할 것이므로 이 AVD의 이름은 VanillaAVD41

로 주자.

빌드 타겟을 선택한다. 예를 들어, 안드로이드 2.2을 지원하려면 드롭다운 항목에서 51

Android 2.2 – API Level 8이라는 빌드 타겟을 선택하면 된다.

61 SD 카드의 용량을 키비바이트(kibibyte)나 미비바이트(mibibyte) 단위로 지정한다. 여기서

설정한 SD 카드 이미지는 하드 디스크의 공간을 점유하므로 1024MiB나 그 이하로 적당

한 수준으로 지정한다. (최소 용량은 9MiB지만 SD 카드에 할당된 크기만큼 개발 장비의

공간을 차지한다는 점을 염두에 둔다.)

스킨을 선택한다. 이 옵션을 이용하면 에뮬레이터의 시각적인 모습을 달리할 수 있다. 이 71

예제에서는 기본 HVGA 화면(세로 화면)으로 설정한다.

지금까지 설명한 프로젝트 설정은 그림 1.4와 같다.81

Create AVD 버튼을 클릭하고 작업이 완료될 때까지 기다린다.91

Finish 버튼을 클릭한다.111

잠깐만요 안드로이드 가상 기기 관리자는 SD 카드 이미지에 할당된 메모리를 포맷하므로

SD 카드로 설정된 AVD를 생성하는 데는 조금 시간이 걸릴지도 모른다.

Page 50: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

14 l 자율학습! 안드로이드 프로그래밍

그림 1.4 | 이클립스에서 새 AVD 생성

디버그 환경과 실행 환경 생성

이제 애플리케이션을 실행할 준비가 거의 끝났을 것이다. 이제 마지막으로 하나가 더 남았다. 바로

프로젝트에 대한 디버그 환경(Debug Con�guration) 또는 실행 환경(Run Con�guration)을 만드는

것이다. 이를 위해 다음과 같은 절차를 따른다.

이클립스에서 Run, Debug Con�gurations 메뉴를 차례로 선택한다.11

Android Application 항목을 더블클릭해서 새 항목을 만든다.21

New_con�guration이라는 새 항목을 선택한다.31

새 항목의 이름을 DroidDebug로 바꾼다.41

Browse 버튼을 클릭해서 Droid1 프로젝트를 선택한다.51

Target 탭에서 생성한 AVD 옆의 체크박스를 체크한다.61

Page 51: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 15

Apply 버튼을 클릭해서 변경 사항을 적용한다.71 Debug Con�gurations 대화상자는 그림 1.5

와 같은 모습일 것이다.

알아두세요 처음으로 작은 녹색 벌레 드롭다운에서 DroidDebug 디버그 환경설정을 선택

했다면 환경설정 관리자를 꼼꼼히 살펴봐두자. 나중에 다시 열어보면 버그 드롭다운 아래

에 이 환경설정이 나타날 것이다.

?

그림 1.5 | 이클립스에서의 DroidDebug 디버그 환경설정

에뮬레이터로 안드로이드 애플리케이션 실행

이제 예제를 실행할 차례다! 애플리케이션을 실행하려면 Debug Con�guration 화면에서 Debug

버튼을 클릭하거나 이클립스 도구 표시줄의 작은 녹색 벌레 아이콘( )을 클릭한 후, 목록에서

DroidDebug라는 Debug Con�guration를 선택하면 된다.

Debug 버튼을 클릭하고 나면 에뮬레이터 화면이 나타날 것이다. 이 화면이 나타날 때까지 시간

이 조금 걸릴 수 있지만 참고 기다리자. 잠금 화면(그림 1.6)이 나오면 에뮬레이터에서 Menu 버튼

을 클릭해서 잠금을 푼다.

Page 52: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

16 l 자율학습! 안드로이드 프로그래밍

그림 1.6 | 안드로이드 에뮬레이터 실행(잠금 화면)

이제 이클립스 디버거가 부착됐으며, 그림 1.7에 나오는 것처럼 애플리케이션이 실행된다. 4

그림 1.7 | 에뮬레이터에서 실행 중인 Droid #1 안드로이드 애플리케이션

4   (옮긴이) 처음 AVD를 실행하면 화면이 영문 로캘(locale)로 나올 것이다. 번역서에서는 에뮬레이터의 로캘을 한국어로 바꿔서

테스트를 진행했으며, 에뮬레이터의 로캘을 한국어로 바꾸려면 홈 화면에서 Menu 버튼을 클릭한 후, Settings, Language &

keyboard, Select Language, 한국어를 선택하면 된다.

Page 53: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 17

보다시피 애플리케이션은 매우 간단하다. 이 애플리케이션은 텍스트가 한 줄 포함된 TextView

컨트롤을 하나 보여주는 것 말고는 아무 것도 하지 않는다.

DDMS를 이용한 안드로이드 애플리케이션 디버깅

이클립스에 내장된 일반 Debug 퍼스펙티브를 이용해 코드를 한 줄씩 실행해 보면서 디버깅하는

방법 말고도 ADT 플러그인을 설치하면 DDMS라는 퍼스펙티브가 추가된다. 애플리케이션이 실

행되는 동안 이클립스에서 이 퍼스펙티브를 잠깐 살펴보자. 이클립스 우측 상단에 있는 안드로이

드 DDMS 아이콘( )을 클릭하면 DDMS 퍼스펙티브(그림 1.8)로 전환할 수 있다. 여기서 이클

립스 프로젝트 탐색기로 되돌아가려면 이클립스 우측 상단에 있는 자바 퍼스펙티브를 클릭하면

된다.

잠깐만요 이클립스에서 DDMS 퍼스펙티브가 보이지 않는다면 우측 상단의 사용 가능한

퍼스펙티브 목록 옆에 있는 Open Perspective 버튼을 클릭해서(아니면 Window, Open

Perspective를 차례로 선택해서) 작업공간에 DDMS 퍼스펙티브를 추가할 수 있다. 사

용 가능한 퍼스펙티브의 전체 목록을 확인하려면 Open Perspective 드롭다운 메뉴에서

Other를 선택한다. 그러고 나서 DDMS 퍼스펙티브를 선택한 다음 OK를 누른다.

그림 1.8 | 이클립스의 DDMS 퍼스펙티브

Page 54: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

18 l 자율학습! 안드로이드 프로그래밍

DDMS 퍼스펙티브는 에뮬레이터와 상호작용하거나 애플리케이션 프로세스를 모니터링하는

데 쓸 수 있다. 즉, 에뮬레이터를 대상으로 전화 통화를 흉내 내거나 SMS 메시지를 보낼 수 있다.

또한 에뮬레이터로 가짜 위치를 보내서 위치 기반 서비스를 흉내 낼 수도 있다. DDMS와 그 밖의

안드로이드 개발자가 활용할 수 있는 도구에 관해서는 2장, "안드로이드 개발 환경"에서 좀더 자세

히 이야기하겠다.

DDMS 퍼스펙티브와 Debug 퍼스펙티브에는 LogCat 로깅 도구가 공통적으로 표시된다. 이 도

구는 에뮬레이터나 단말기(컴퓨터에 연결돼 있다면)에서 보낸 로깅 정보를 표시해준다.

단말기에서 안드로이드 애플리케이션 실행

이제 애플리케이션을 실제 단말기에 불러올 차례다. 우선 단말기를 USB 데이터 케이블을 이용해

서 컴퓨터에 연결해야 한다. 올바른 설정을 바탕으로 디버깅하려면 다음 절차를 따른다.

이클립스에서 Run, Debug Con�gurations을 선택한다.11

DroidDebug 디버그 환경설정을 더블클릭한다.21

Target 탭에서 Deployment Target Selection Mode를 Manual로 설정한다. 필요하면 나31

중에 언제든지 Automatic으로 바꿀 수 있으며, Manual로 설정해 두면 에뮬레이터에서 디

버깅할지 기기(컴퓨터에 연결돼 있다면)에서 디버깅할지 선택해야 한다(그리고 AVD도 선

택해야 한다).

Apply 버튼을 클릭해서 변경 사항을 적용한다.41

USB 케이블로 안드로이드 기기를 개발용 컴퓨터에 연결한다.51

이클립스에서 Debug 버튼을 클릭한다.61

그러고 나면 애플리케이션을 실행하거나 디버깅하는 데 쓸 수 있는 모든 설정을 보여주는

대화상자(그림 1.9)가 나타난다. 이 대화상자에는 실제 기기를 비롯해서 실행중인 기존 에

뮬레이터도 나열돼 있을 것이다. 기존에 만들어둔 AVD를 이용해서 새 에뮬레이터를 띄우

는 것도 가능하다.

실행중인 안드로이드 기기 가운데 하나를 더블클릭한다. 대화상자에는 실행중인 에뮬레이71

터에 대한 AVD를 비롯해서 컴퓨터에 연결된 각 단말기가 나열돼 있을 것이다. 목록에서 단

말기가 보이지 않는다면 케이블을 확인해보고 부록 A에서 설명한 대로 드라이버가 제대로

설치됐는지 확인해본다.

Page 55: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 19

그림 1.9 | 애플리케이션 배포 타겟을 선택하기 위한 이클립스 대화상자 5

이제 이클립스가 단말기에 안드로이드 애플리케이션을 설치하고 디버거를 부착한 다음 애플리

케이션을 실행할 것이다. 단말기에 나타나는 화면은 앞서 에뮬레이터에서 본 화면과 매우 비슷할

것이다. 이클립스에서 DDMS 퍼스펙티브를 보면 로깅 정보를 확인할 수 있고, DDMS 퍼스펙티브

에서 제공하는 여러 기능들이 에뮬레이터와 마찬가지로 실제 단말기와도 동작한다는 점을 확인

할 수 있다.

이클립스를 처음 써보십니까?

아직까지도 이클립스 개발 환경에 익숙지 않다면 지금이 바로 부록 B, "이클립스 IDE 팁과 활

용"을 읽어볼 때다.

5   (옮긴이) 예제로 개발한 애플리케이션이 안드로이드 2.2를 대상으로 하는데 반해 현재 연결된 기기에 설치된 안드로이드 SDK

의 버전이 2.1이라서 X 표시가 나타난다. 안드로이드 2.2가 탑재된 기기를 연결한다면 녹색으로 체크 표시가 나타날 것이고 정

상적으로 배포가능하다.

Page 56: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

20 l 자율학습! 안드로이드 프로그래밍

정리

안드로이드 개발자가 된 것을 축하한다! 지금까지 이클립스 개발 환경을 배워나가는 것으로 시작

해서 첫 안드로이드 프로젝트를 만들어봤다. 그러고 나서 실제로 동작하는 안드로이드 코드를 살

펴보고 컴파일해봤다. 마지막으로 새로 생성된 안드로이드 애플리케이션을 안드로이드 에뮬레이

터는 물론 실제 안드로이드 기기에서도 실행해봤다.

Q&A

안드로이드 개발을 지원하는 프로그래밍 언어로는 뭐가 있나요?Q

�지금�당장은�안드로이드�개발에�있어�완전히�지원되는�프로그래밍�언어는�자바가�유일합니다.�A

훗날�C++와�같은�다른�언어도�추가될지도�모릅니다.�애플리케이션은�반드시�자바로�작성해야�

하지만�일부�높은�성능이�필요한�부분에�대해서는�안드로이드�NDK를�써서�C/C++를�사용하

는�것도�합니다.�안드로이드�NDK를�사용하는�것과�관련한�자세한�사항은�http://developer.

android.com/sdk/ndk를�참고하세요.

왜 새 버전의 안드로이드 SDK를 사용할 수 있는데도 안드로이드 1.1용(또는 더 오래된 펌웨Q

어로)으로 AVD를 만들어야 하나요?

�단말기�펌웨어가�공개적으로�업데이트될지도�모르지만,�모든�안드로이드�기기가�최신�펌웨어�A

버전을�지원하는�것은�아닙니다.�애플리케이션에서�어떤�버전을�대상으로�지원하고�테스트해

야�할지�결정하기�전에�각�대상�단말기에서�펌웨어가�사용�가능한지�확인해봐야�합니다.

안드로이드 리소스 편집기는 다수의 문자열처럼 많은 양의 데이터를 입력하기가 불편합니다. Q

더 편리한 방법은 없나요?

�안드로이드�매니페스트,�레이아웃�파일,�리소스�값(예를�들면,�/res/values/strings.xml)과�A

같은�안드로이드�프로젝트�파일은�특수한�형식을�갖춘�XML�파일로�저장됩니다.�리소스�편집

기에서�XML�탭을�클릭하면�이러한�파일을�직접�편집할�수�있습니다.�XML�형식에�관해서는�4

장에서�좀더�자세히�살펴보겠습니다.

Page 57: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 21

▶실습

퀴즈

개방형 단말기 연합의 구성원은 누구인가?11

단말기�제조사A.

무선�망�공급자와�이동통신�사업자B.

모바일�소프트웨어�개발자C.

위�항목�모두�해당D.

21 O/X 문제: SDK를 설치한 직후 단순히 안드로이드 에뮬레이터를 실행하기만 해도 기본 설정

을 이용할 수 있다.

31 안드로이드 애플리케이션을 개발할 때 가장 인기 있는 IDE는 무엇입니까?

이클립스A.

인텔리제이B.

이맥스C.

O/X 문제: 단말기를 디버깅하는 데 이클립스를 이용할 수 있다.41

Page 58: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

22 l 자율학습! 안드로이드 프로그래밍

해답

D.�개방형�단말기�연합은�단말기�공급�사슬�전체를�대표하는�업체�동맹이다.11

X.�먼저�AVD를�만들어야�한다.21

�A.�이클립스는�안드로이드�개발을�위한�가장�인기�있는�IDE다.�다른�IDE도�물론�사용�가능하31

지만�이클립스와�통합돼�있는�ADT�플러그인을�쓸�수는�없다.

O. 이클립스에서는 에뮬레이터와 단말기를 대상으로 디버깅할 수 있다.41

실습 문제

�http://developer.android.com를�방문해서�한번�둘러보자.�온라인�개발자�가이드와�참고�자11

료를�확인해보고�커뮤니티�탭과�안드로이드�초보자와�안드로이드�개발자�구글�그룹스에도�가

입할지�고려해본다.

�Droid�#1�애플리케이션에�텍스트를�추가한다.�먼저�또�다른�String�리소스를�strings.xml�리21

소스�파일에�추가하고�파일을�저장한다.�다음으로�레이아웃�리소스�편집기를�이용해서�main.

xml�레이아웃�파일을�수정해�두�번째�TextView�컨트롤을�추가한다.�TextView의�텍스트�속성

을�새로�생성한�String�리소스로�설정한다.�마지막으로�에뮬레이터에서�애플리케이션을�다시�

실행해서�결과를�확인한다.

�안드로이드�SDK에�포함된�안드로이드�예제�프로젝트�가운데�하나를�이클립스�작업공간에�31

추가한다.�프로젝트�파일을�살펴보고�난�후�실행�환경설정을�만들고�에뮬레이터에서�예제�애

플리케이션을�실행한다.

Page 59: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

01 안드로이드 시작하기 l 23

Page 60: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

LESS

ON

02 이번 시간에 배울 내용

안드로이드 문서 활용 �

DDMS를 이용한 애플리케이션 디버깅 �

안드로이드 에뮬레이터 활용 �

안드로이드 디버그 브리지(ADB) 활용 �

안드로이드 가상 기기 활용 �

Page 61: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

25

02안드로이드 개발 환경

안드로이드 개발자들은 품질 좋은 애플리케이션을 설계하는 데 마음껏 쓸 수 있는 수십 가지에

이르는 도구를 활용할 수 있다. 어떤 도구를 쓸 수 있고 그러한 도구를 어디에 쓸 수 있는지 이해

하는 것은 처음 안드로이드를 배울 때 가장 좋은 방법이며, 문제에 직면했을 때 어떤 도구가 해법

을 알아내는 데 도움이 될지 실마리를 제공해준다. 안드로이드 개발 도구는 안드로이드 SDK가 설

치된 디렉터리의 /tools 하위 디렉터리에서 찾을 수 있다. 이 장에서는 안드로이드 애플리케이션을

개발할 때 활용 가능한 도구 가운데 가장 중요한 도구를 몇 가지 살펴보겠다. 여기서 배운 내용은

안드로이드 애플리케이션을 더 빨리 개발하고 문제에 덜 부딪치는 데 도움될 것이다.

안드로이드 문서 활용

그 자체로 도구는 아니지만 안드로이드 문서는 안드로이드 개발자에게 매우 중요한 참고 자료다.

HTML 버전의 안드로이드 문서는 안드로이드 SDK 문서의 /docs라는 하위 디렉터리에 들어 있으

며, 어떤 문제에 직면하든 항상 이 문서를 가장 먼저 확인해봐야 한다. 또한 최신 온라인 도움말 문

서는 안드로이드 개발자 웹 사이트인 http://developer.android.com에서 볼 수 있다.

안드로이드 문서는 크게 6가지 부분으로 나뉜다(그림 2.1).

수업 시작~~

Page 62: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

26 l 자율학습! 안드로이드 프로그래밍

SDK: 이 탭에서는 장비에 설치된 SDK 버전에 관한 중요 정보를 제공한다. 이 탭의 중요 기 ▶

능 중 하나는 출시 정보인데, 여기엔 특정 설치 버전과 관련한 알려진 문제가 기술돼 있다.

또한 여기서 제공하는 정보는 온라인 도움말은 업데이트됐지만 이전 버전의 SDK로 개발

해야 할 때 유용하다.

Dev Guide: 이 탭은 안드로이드 개발자 가이드와 연결돼 있다. 안드로이드 개발자 가이드 ▶

에는 처음 안드로이드 개발을 시작하는 개발자를 위해 안드로이드 플랫폼에서 쓰는 용어

와 단계별 예제를 비롯해서 각종 FAQ가 담겨 있다.

Reference: 이 탭에서는 안드로이드 SDK에서 제공하는 모든 안드로이드 API의 패키지와 ▶

클래스를 찾아볼 수 있다.

Blog: 이 탭은 공식 안드로이드 개발자 블로그와 연결돼 있다. 안드로이드 플랫폼에 관한 ▶

최신 소식과 발표 내용을 확인하려면 이 탭을 참고하자. 이곳은 입문 예제를 확인하거나 안

드로이드 애플리케이션을 최적화하는 방법, 그리고 새로운 SDK 출시 및 안드로이드 개발

자 대회에 관한 소식을 접하기에 가장 좋은 곳이다.

Videos: 온라인에서만 확인할 수 있는 이 탭에서는 안드로이드 강의 동영상을 볼 수 있다. ▶

이 탭에서는 안드로이드 플랫폼과 개발자 팁, 구글 I/O 콘퍼런스 관련 영상을 찾아볼 수

있다.

Community: 이 탭은 안드로이드 개발자 포럼으로 가는 길목이다. 관심사에 따라 가입할 ▶

수 있는 구글 그룹스가 여럿 있다.

이제 안드로이드 SDK 문서를 둘러볼 차례다. 먼저 컴퓨터에 설치된 문서를 둘러본 다음 온라인

문서를 살펴본다.

DDMS를 이용한 애플리케이션 디버깅

달빅 디버그 모니터 서비스(DDMS, Dalvik Debug Monitor Service)는 DDMS 퍼스펙티브를 통해 이

클립스에 통합된 디버깅 유틸리티다. DDMS 퍼스펙티브는 에뮬레이터와 단말기가 상호작용하는

데 필요한 여러 유용한 기능들을 제공해준다(그림 2.2)

Page 63: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 27

그림 2.1 | 안드로이드 개발자 문서(온라인 버전)

그림 2.2 | 단말기 한 대와 안드로이드 기기 한 대가 연결된 DDMS 퍼스펙티브

DDMS의 기능은 대략 다섯 가지 기능 영역으로 나뉜다.

태스크 관리 ▶

파일 관리 ▶

Page 64: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

28 l 자율학습! 안드로이드 프로그래밍

에뮬레이터와의 상호작용 ▶

로깅 ▶

화면 캡처 ▶

DDMS와 DDMS 퍼스펙티브는 가장 중요한 디버깅 도구다. 이제 이러한 기능을 어떻게 활용하

는지 좀더 자세히 살펴보자.

알아두세요 DDMS 도구는 이클립스와 별도로 실행할 수 있으며, DDMS 도구는 안드로이드

SDK의 /tools 디렉터리에서 확인할 수 있다.?

태스크 관리

DDMS의 좌측 상단에는 현재 연결된 에뮬레이터와 단말기가 나열돼 있다. 여기서 개별 인스턴스

를 선택해서 프로세스와 스레드를 조사할 수 있다. 스레드를 조사하려면 그림 2.3에 나온 것처럼

장치 프로세스(이를테면, com.androidbook.droid1)를 클릭한 다음 Update �read 버튼( )

을 클릭하면 된다. 또한 프로세스를 대상으로 가비지 컬렉션(garbage collection)을 수행한 후 녹색

실린더 버튼( )을 클릭해서 현재 힙의 상태를 볼 수도 있다. 마지막으로 정지 신호와 비슷하게

생긴 버튼( )을 클릭해서 프로세스를 중단하는 것도 가능하다.

그림 2.3 | DDMS를 이용한 Droid1 애플리케이션의 스레드 활동 상태 조사

Page 65: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 29

DDMS 퍼스펙티브에서 디버깅하기

DDMS 퍼스펙티브에서는 에뮬레이터나 단말기 상의 특정 프로세스를 선택한 다음 작은 녹색 벌레

버튼( )을 클릭해서 디버거를 해당 프로세스에 붙일 수 있다. 이렇게 하려면 이클립스 작업공간에

소스 코드가 들어 있어야 하며, 이렇게 하는 것은 이클립스에서만 가능하며 DDMS를 독립적으로 실

행했을 때는 불가능하다.

안드로이드 파일 시스템 탐색

DDMS 파일 탐색기를 이용하면 에뮬레이터나 기기에 들어 있는 파일과 디렉터리를 살펴볼 수 있

다(그림 2.4). 또한 내보내기( )나 가져오기( ) 아이콘을 이용하면 안드로이드 파일 시스템

과 개발 장비 간에 파일을 복사하는 것도 가능하다.

그림 2.4 | DDMS 파일 탐색기를 이용한 단말기 상의 시스템 글꼴 탐색

마이너스 버튼( )을 이용하거나 삭제 키를 눌러 파일이나 디렉터리를 삭제할 수 있다. 삭제할

때는 확인 과정을 거치지 않으며 되돌리기도 불가능하므로 주의해야 한다.

에뮬레이터와의 상호작용

DDMS는 전화 걸기, SMS 메시지, 위치 정보와 같은 다수의 이벤트를 모의로 특정 에뮬레이터 인

스턴스에 보낼 수 있다. 이러한 기능은 DDMS의 Emulator Control 탭에서 확인할 수 있으며, 이

Page 66: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

30 l 자율학습! 안드로이드 프로그래밍

러한 이벤트는 모두 "단방향"으로서 DDMS에서 에뮬레이터 쪽으로 전달되지 에뮬레이터에서

DDMS 쪽으로 전달되지는 않는다.

잠깐만요 이러한 기능은 에뮬레이터에서만 동작하며 단말기에서는 동작하지 않는다. 단말기에

서 그렇게 하려면 실제로 전화를 걸거나 메시지를 보내야 한다.

에뮬레이터에 전화 걸기

DDMS의 Emulator Control 탭을 이용하면 음성 전화 수신을 흉내 낼 수 있다(그림 2.5). 이는 실

제 전화 수신은 아니므로 아무런 데이터(음성이든 뭐든)도 수신자와 발신자 간에 전달되지 않는다.

그림 2.5 | DDMS의 Emulator Control 탭(왼쪽)을 이용한 에뮬레이터(오른쪽)로 전화 걸기

에뮬레이터를 대상으로 전화 걸기따라하기▶

현재 장비에서 실행 중인 에뮬레이터에 전화 걸기를 흉내 내려면 다음 절차를 따른다.

DDMS에서 전화를 걸고자 하는 에뮬레이터를 선택한다.11

Emulator Control 탭의 Telephony Actions에 수신 전화 번호(예, 5551212)를 입력한다.21

Voice 라디오 버튼을 선택한다.31

Call 버튼을 클릭한다.41

에뮬레이터에 전화가 걸려올 것이다. 에뮬레이터에서 Send 버튼을 클릭해서 전화를 받는다.51

Page 67: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 31

통화를 끝내려면 언제든지 에뮬레이터에서 End 버튼을 클릭하거나 DDMS의 Emulator 61

Control 탭에서 Hang Up 버튼을 클릭하면 된다.

에뮬레이터에 SMS 메시지 보내기

DDMS의 Emulator Control을 이용하면 SMS 메시지 수신을 흉내 낼 수 있다(그림 2.6). 음성 전

화를 할 때처럼 SMS 메시지도 원하는 만큼 보낼 수 있다.

그림 2.6 | DDMS의 Emulator Control 탭(왼쪽)을 이용한 에뮬레이터(오른쪽)로 SMS 메시지 보내기.

에뮬레이터에 SMS 보내기따라하기▶

현재 장비에서 실행 중인 에뮬레이터에 SMS 메시지를 보내려면 다음 절차를 따른다.

DDMS에서 SMS를 보내고자 하는 에뮬레이터를 선택한다.11

Emulator Control 탭의 Telephony Actions에 SMS를 받을 전화번호(예, 5551212)를 입력21

한다.

SMS 라디오 버튼을 선택한다.31

SMS 메시지를 입력한다.41

Send 버튼을 클릭한다. 에뮬레이터에 SMS가 수신됐음을 나타내는 알림이 뜰 것이다.51

Page 68: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

32 l 자율학습! 안드로이드 프로그래밍

에뮬레이터나 단말기의 화면 캡처

단말기와 에뮬레이터를 디버깅할 때 특히 유용한 기능 하나는 바로 현재 화면을 캡처할 수 있다는

것이다(그림 2.7).

그림 2.7 | DDMS의 Screen Capture 버튼을 이용한 단말기의 화면 캡처

화면 캡처따라하기▶

화면 캡처 기능은 실제 단말기에서 쓸 때 특히 유용하다. 화면을 캡처하려면 다음 절차를 따

른다.

DDMS에서 화면을 캡처하고자 하는 장치(또는 에뮬레이터)를 선택한다.11

해당 장치나 에뮬레이터에 원하는 화면이 나오게 한다.21

색깔이 다양한 사각형 그림 아이콘(31 )을 클릭해서 화면을 캡처한다. 그러고 나면 캡처

화면 대화상자가 나타난다.

캡처 화면에서 Save 버튼을 클릭해서 화면을 로컬 하드 디스크로 저장한다.41

Page 69: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 33

로그 정보 확인

DDMS에 통합된 LogCat 로깅 유틸리티를 이용하면 안드로이드 로깅 콘솔을 볼 수 있다. 이 장에

서 지금까지 보여준 여러 그림에서 LogCat 로깅 탭에 진단 정보가 출력되고 있었음을 눈치챘을지

도 모르겠다. 직접 애플리케이션 로깅을 구현하는 방법에 관해서는 3장, "안드로이드 애플리케이

션 제작"에서 더 자세히 살펴보겠다.

로그 정보 걸러내기

이클립스에는 로그 심각도에 따라 로그를 걸러내는 기능이 들어 있다. 필터를 이용하면 로그 필

터를 직접 만들 수도 있으며, 좀더 자세한 사항에 관해서는 부록 B, "이클립스 IDE 팁과 활용"을

참고한다.

안드로이드 에뮬레이터 활용

안드로이드 에뮬레이터는 개발자가 마음껏 쓸 수 있는 가장 강력한 도구다. 따라서 개발자들에게

는 에뮬레이터를 쓰는 방법을 배우거나 에뮬레이터의 제약을 이해하는 것이 굉장히 중요하다.

안드로이드 에뮬레이터는 이클립스 IDE용 ADT 플러그인을 통해 이클립스에 통합돼 있다.

에뮬레이터의 제약 사항

안드로이드 에뮬레이터는 편리한 도구지만 몇 가지 제약이 있다.

▶ 에뮬레이터는 실제 기기가 아니다. 에뮬레이터는 일반적인 단말기의 동작을 흉내 낼 뿐 하

드웨어 구현에 특화돼 있지 않다.

▶ 위성 위치 정보, 배터리와 전원 설정, 네트워크 연결과 같은 센서 데이터는 모두 컴퓨터를

이용해서 흉내 낸다.

▶ 카메라 하드웨어 같은 보조 장치가 완전하게 기능하지는 않는다.

▶ 실제로 전화를 걸거나 받을 수 없으며, 단지 흉내 낼 뿐이다. SMS 메시지 역시 흉내 낼 뿐

실제 네트워크를 이용하는 것은 아니다.

▶ USB나 블루투스가 지원되지 않는다.

따라서 안드로이드 에뮬레이터를 이용하는 것이 실제 대상 단말기나 기기를 대상으로 하는 테

스트를 대신하지는 못한다.

Page 70: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

34 l 자율학습! 안드로이드 프로그래밍

에뮬레이터에 내용 입력

에뮬레이터에 뭔가를 입력하는 방법에는 다음과 같은 것이 있다.

컴퓨터 마우스로 화면이나 에뮬레이터 스킨에서 항목(예, 사이드 볼륨 컨트롤)을 클릭하거 ▶

나, 스크롤하거나, 드래그한다.

컴퓨터 키보드를 이용해서 텍스트를 컨트롤로 입력한다. ▶

마우스를 이용해서 소프트 키보드나 실제 에뮬레이터 키보드 상에서 손가락으로 누르는 ▶

것을 흉내 낸다.

여러 에뮬레이터 키보드 명령을 이용해서 특정 에뮬레이터 상태를 제어한다. ▶

에뮬레이터와 상호작용하는 몇 가지 방법을 시험해보자.따라하기▶

1장, "안드로이드 시작하기"에서 만든 Droid1 애플리케이션을 이클립스에서 실행한다.11

애플리케이션이 실행되는 동안 Ctrl + F11과 Ctrl + F12 키를 눌러 에뮬레이터의 방향을 21

바꾼다. 애플리케이션이 어떻게 화면을 수직과 수평 모드로 바꾸는지 눈여겨본다.

에뮬레이터에서 Alt + Enter를 눌러 전체 화면으로 전환한다. 그러고 나서 Alt + Enter를 31

다시 눌러 일반 모드로 돌아온다.

그 밖에도 유용한 명령이 많다. 전체 목록을 확인하려면 안드로이드 SDK 문서나 온라인

(http:// developer.android.com/guide/developing/tools/emulator.html)에서도 확인 가능한 공식

에뮬레이터 문서를 참고한다.

안드로이드 시스템 둘러보기

아직까지 안드로이드 기기에 익숙하지 않다면 지금이 바로 사용자로서 안드로이드 시스템을 둘러

볼 좋은 기회다. 표 2.1은 안드로이드의 중요한 특징 몇 가지를 나열한 것이다.

Page 71: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 35

표 2.1 안드로이드 시스템의 화면과 특징

특징 설명 모양

홈 화면 기본 화면.

이 화면에는 앱 위젯과 라이

브 폴더가 위치한다.

다이얼 애플리케이션 전화를 걸거나 받을 때 쓰는

내장 애플리케이션.

에뮬레이터는 전화 기능이

제한돼 있음을 염두에 둔다.

메시지 애플리케이션 SMS 메시지를 보내고 받을

때 쓰는 내장 애플리케이션.

에뮬레이터는 메시지 기능이

제한돼 있음을 염두에 둔다.

브라우저 애플리케이션 내장 웹 브라우저.

개발 장비가 인터넷에 연결돼

있을 경우 에뮬레이터에서

인터넷에 연결할 수 있다.

주소록 애플리케이션 연락처 정보로 구성된 데이

터베이스

Page 72: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

36 l 자율학습! 안드로이드 프로그래밍

특징 설명 모양

응용프로그램 실행기 설치된 애플리케이션을 보여

준다.

홈 화면에서 실행기 아이콘

을 누르면 설치된 모든 애플

리케이션을 볼 수 있다.

설정 애플리케이션 애플리케이션 관리*, 소리 및

화면 설정, 지역/시간대 설정

과 같은 다양한 "전화기" 설

정을 구성할 때 쓰는 내장 애

플리케이션.

개발 도구 애플리케이션 개발 도구 설정을 구성할 때

쓰는 내장 애플리케이션.

*(옮긴이) 실제 안드로이드 메뉴에는 '애플리케이션' 대신 '응용프로그램'이라는 표현을 쓰고 있다.

에뮬레이터 스킨 활용

화면 크기, 화면 방향, 그리고 에뮬레이터에 하드웨어나 소프트 키보드 장착 여부와 같은 에뮬레

이터의 특징은 에뮬레이터 스킨(skin)의 영향을 받는다. 안드로이드 SDK는 다양한 단말기 화면

해상도(기본값은 HVGA)를 제공하는 각종 스킨을 지원해준다. 사용 가능한 특정 스킨은 타겟 빌

드 플랫폼에 따라 달라진다. 적절한 스킨을 결정하는 것은 AVD를 설정할 때 중요한 한 가지 과정

에 해당한다.

에뮬레이터에서 SD 카드 이미지 사용

에뮬레이터로 데이터를 저장하려면 SD 카드 이미지가 설정돼 있어야 한다. 이를테면, 카메라로 찍

은 사진이나 사운드 파일과 같은 미디어 파일을 에뮬레이터에 저장하려면 적절히 설정된 SD 카드

이미지가 반드시 있어야 한다.

Page 73: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 37

에뮬레이터에서 쓸 SD 카드 이미지를 만드는 가장 편리한 방법은 1장에서 AVD를 만들 때 SD

카드 이미지도 함께 만드는 것이다. SD 카드 이미지의 크기는 최소한 9MiB 이상이어야 한다.

그 밖의 안드로이드 도구 활용

지금까지 가장 중요한 도구는 모두 살펴봤는데, 안드로이드 SDK에는 특별한 용도로 쓰는 유틸리

티도 다수 포함돼 있다.

▶ 안드로이드 계층 구조 뷰어(Android Hierarchy Viewer) : 이 도구를 이용하면 애플리케이션

이 실행 중일 때도 View와 같은 애플리케이션 사용자 인터페이스 컴포넌트를 조사할 수 있

다.

▶ Draw 9-Patch 도구 : 늘이기 가능한(stretchable) PNG 파일을 디자인할 수 있게 도와준다.

▶ AIDL 컴파일러 : 안드로이드 플랫폼에서 프로세스 간 통신( I P C , I nt e rP ro c e s s

Communication)을 위해 원격 인터페이스를 만들 수 있게 도와준다.

▶ mksdcard 명령줄 유틸리티 : AVD나 에뮬레이터에서 쓸 독립형 SD 카드 이미지를 생성할

수 있게 해준다.

이클립스 없이 안드로이드 애플리케이션 개발하기

이클립스는 안드로이드 애플리케이션을 개발할 때 가장 선호하는 개발 환경이지만 개발하는 데

반드시 필요한 것은 아니다. 이클립스용 ADT 플러그인을 이용하면 안드로이드 애플리케이션의

작성, 디버깅, 패키지화, 서명을 위한 수많은 기초적인 개발 도구를 편리하게 쓸 수 있다.

이클립스를 쓰지 않거나 이클립스 ADT 플러그인에서는 제공하지 않는 좀더 강력한 디버깅 기

능이 필요한 개발자들은 명령줄에서 직접 이러한 기초적인 도구를 사용해도 된다. 아래에 나열

한 도구는 안드로이드 SDK의 /tools 디렉터리에서 확인할 수 있다.

▶ android: 안드로이드 프로젝트 파일을 생성하고 AVD를 관리

▶ aapt(Android Asset Packaging Tool): 에뮬레이터나 단말기에 안드로이드 애플리케이션

을 설치하기 위해 안드로이드 프로젝트 파일을 .apk 파일로 패키지화한다.

▶ ddms(Dalvik Debug Monitor Service): 이클립스 DDMS 퍼스펙티브와 비슷한 사용자

인터페이스를 자체적으로 갖추고 있다.

▶ adb(Android Debug Bridge): 에뮬레이터와 장치와 상호작용하기 위한 명령줄 인터페이

스를 갖추고 있다.

Page 74: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

38 l 자율학습! 안드로이드 프로그래밍

정리

안드로이드 SDK에는 일반적인 안드로이드 개발 작업을 돕는 갖가지 강력한 도구가 탑재돼 있다.

안드로이드 문서는 개발자에게 필수 불가결한 참고자료다. 이클립스 개발 환경에 통합된 DDMS

디버깅 도구는 에뮬레이터와 장치를 모니터링하는 데 유용하다. 안드로이드 에뮬레이터는 실제

기기가 없어도 가상으로 안드로이드 애플리케이션을 실행하는 데 쓸 수 있다. 그 밖에도 애플리케

이션을 패키지화하거나 안드로이드 애플리케이션의 사용자 인터페이스와 이미지를 디자인하는

데 특화된 유틸리티를 비롯해서 명령줄 차원에서 단말기나 에뮬레이터와 상호작용하기 위한 각종

도구도 활용할 수 있다.

▶Q&A

안드로이드 SDK에 포함된 안드로이드 문서는 http://developer.android.com에서 볼 수 있Q

는 문서와 같나요?

�그렇지�않습니다.�SDK에�포함된�문서는�해당�SDK가�출시될�때�"확정된"�문서입니다.�즉,�설치A

된�안드로이드�SDK�버전에�좀더�종속적이라는�뜻입니다.�하지만�온라인�문서는�항상�최신�버

전의�안드로이드�SDK에�맞춰져�있기�때문에�인터넷에�연결돼�있지�않거나�인터넷�접속이�느

린�경우,�또는�컴퓨터에�설치된�SDK�문서만으로도�충분한�경우가�아니라면�온라인�문서를�이

용하기를�권장합니다.

에뮬레이터 스킨이 다르면 기능도 다른가요?Q

�그렇습니다.�에뮬레이터�스킨은�화면�크기와�방향이�다릅니다.�또한�키패드와�버튼도�포함하A

고�있습니다.�그리고�에뮬레이터�스킨�중에는�하드웨어�키보드가�있는�것도�있고,�소프트�키

보드에�의존하는�것도�있습니다.

Page 75: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 39

에뮬레이터에서 애플리케이션을 테스트하는 것만으로도 충분할까요?Q

�그렇지�않습니다.�안드로이드�에뮬레이터는�실제�기기의�기능을�흉내�내어�안드로이드�프로젝A

트를�진행할�때�시간과�비용을�대폭�줄여줄�수�있습니다.�안드로이드�에뮬레이터가�테스트하

는�데는�편리한�도구이지만�실제�기기의�동작을�흉내�내기만�할�뿐입니다.�따라서�에뮬레이터

는�실질적으로�사용자의�실제�위치를�알아내거나�전화를�걸지는�못합니다.�게다가�에뮬레이

터는�일반화된(generic)�장치에�해당하며,�특정�단말기에서만�통하는�세부�동작은�흉내�내지�

않습니다.�그러므로�애플리케이션이�에뮬레이터에서�실행된다고�해서�실제�장치에서도�동작

하리라�보장할�수�없습니다.

▶실습

퀴즈

다음 중 DDMS 퍼스펙티브에서 사용 가능한 기능은 무엇인가?11

에뮬레이터나�단말기의�화면�캡처A.

에뮬레이터나�단말기의�파일�시스템�탐색B.

안드로이드�시스템의�스레드�및�힙�정보�모니터링C.

프로세스�중단D.

에뮬레이터를�대상으로�한�전화�걸기나�SMS�메시지�전송�시뮬레이션E.

위�문항�모두F.

21 O/X�문제.�디버깅하려면�반드시�안드로이드�에뮬레이터를�사용해야�한다.

31 안드로이드�애플리케이션을�작성할�수�있는�타겟�플랫폼은�무엇인가?

41 O/X�문제.�안드로이드�에뮬레이터는�한�화면�설정만�지원하는�일반화된�기기다.

Page 76: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

40 l 자율학습! 안드로이드 프로그래밍

해답

�F.�위�문항�모두.�DDMS�퍼스펙티브는�다양한�방식으로�에뮬레이터와�단말기를�모니터링하고,�11

탐색하고,�상호작용하는�데�쓸�수�있다.

�X.�안드로이드�에뮬레이터는�디버깅할�때�유용하지만�디버거를�실제�기기에�연결해서�직접�디21

버깅하는�방법도�가능하다.

�현재�사용�가능한�타겟�플랫폼은�많으며�새로운�SDK가�출시될�때마다�추가되기도�한다.�일31

부�중요�타겟�플랫폼은�안드로이드�1.1,�안드로이드�1.5,�안드로이드�1.6,�안드로이드�2.0,�안드

로이드�2.0.1,�안드로이드�2.1,�안드로이드�2.2를�포함한다.�안드로이드�1.1보다�높은�타겟에서

는�원한다면�구글�API를�포함할�수도�있다.�이러한�타겟은�안드로이드�에뮬레이터를�사용하기�

위해�반드시�만들어야�하는�AVD�프로필에�대응된다.

�X.�안드로이드�에뮬레이터는�일반화된�기기이지만�서로�다른�스킨을�지원할�수�있다.�지원되는�41

전체�스킨�목록을�확인하려면�이클립스에서�Android�SDK�and�AVD�Manager를�선택한다.

실습 문제

�안드로이드�에뮬레이터를�실행하고�설정을�살펴보자.�언어�설정을�변경하고�애플리케이션을�11

제거해본다.

�안드로이드�에뮬레이터를�실행하고�홈�화면을�바꿔보자.�배경�화면을�바꿔보고�앱위젯을�설21

치해본다.�에뮬레이터가�실제�단말기를�어떻게�흉내�내려�하는지에�익숙해지자.�또한�전화�기

능의�동작�방식과�같은�제약�사항에�대해서도�눈여겨본다.

�1장에서�만든�Droid1�프로젝트를�대상으로�계층�구조�뷰어를�실행해보자.�Droid1�프로젝트에�31

만든�TextView�컨트롤의�세부�정보를�어떻게�확인하는지�알아둔다.

Page 77: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

02 안드로이드 개발 환경 l 41

Page 78: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

LESS

ON

03 이번 시간에 배울 내용

일반적인 안드로이드 애플리케이션 설계 �

애플리케이션 컨텍스트 활용 �

액티비티, 인텐트, 대화상자 활용 �

애플리케이션 정보 로깅 �

Page 79: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

43

03안드로이드 애플리케이션 제작

모든 플랫폼 기술은 다양한 용어를 써서 해당 플랫폼의 애플리케이션 구성요소들을 기술한다. 안

드로이드 플랫폼에서 가장 중요한 세 클래스는 Context, Activity, Intent다. 개발자들이 구현할

수 있는 좀더 복잡한 구성요소도 있지만 이 세 클래스가 바로 각 구성요소와 모든 안드로이드 애

플리케이션의 근간을 이룬다. 본 장에서는 안드로이드 애플리케이션의 구성 방법을 이해하는 데

초점을 맞춘다. 아울러 개발자들이 애플리케이션을 디버깅하는 데 도움이 되는 몇 가지 편리한 유

틸리티에 대해서도 살펴보겠다.

일반적인 안드로이드 애플리케이션 설계

안드로이드 애플리케이션은 액티비티라고 하는 태스크의 집합이다. 애플리케이션의 각 액티비티

에는 고유한 목적과 사용자 인터페이스가 있다. 이를 완전히 이해하기 위해 '치피의 복수(Chippy's

Revenge)'라는 가상의 게임 애플리케이션을 상상해보자.

애플리케이션의 기능 설계

'치피의 복수' 게임은 설계가 간단하다. 이 게임은 다섯 개의 화면으로 구성된다.

▶ Splash: 이 화면은 게임 로고와 버전을 보여주는 시작 화면의 역할을 한다. 음악을 재생할

수도 있다.

▶ Menu: 사용자는 이 화면에서 게임 시작, 점수 확인, 도움말 보기를 포함한 여러 옵션을 선

택할 수 있다.

수업 시작~~

Page 80: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

44 l 자율학습! 안드로이드 프로그래밍

Play ▶ : 이 화면에서 실제로 게임이 진행된다.

▶ Scores: 이 화면에서는 격려와 함께 플레이어의 가장 높은 게임 점수(다른 플레이어의 점

수를 포함)를 보여준다.

▶ Help: 이 화면에서는 조작법, 목표, 배점 방식, 팁, 트릭을 포함한 게임 방법을 보여준다. 익

숙한 이야기인 것 같은가? 어떤 플랫폼에서 구동되는 모바일 애플리케이션이나 게임도 처

음에는 모두 이런 식으로 설계한다.

잠깐만요 한 가지 분명한 것은 여러분이 원하는 대로 사용자 인터페이스를 구현해도 된다는 것

이다. 안드로이드 플랫폼에서는 애플리케이션이 반드시 안정적이고, 반응이 원활하며, 다른 안

드로이드 시스템의 구성요소와 조화롭게 동작해야 한다는 점을 제외하면 실제로 사용자 인터페

이스에 대해서는 별도로 요구하는 바가 없다. 사용자에게 인기 있는 최고의 애플리케이션은 사

용자가 가진 기존 사용자 인터페이스에 대한 경험을 활용한다. 필요하다면 그러한 기능을 다시

만드는 수고를 하기보다는 기존 기능을 개선해서 사용자가 애플리케이션을 제대로 쓰기 위해 시

간과 노력을 들여 사용법을 배워야 하지 않게 만드는 것이 좋다.

애플리케이션 액티비티의 요구사항 파악

앞서 설명한 게임 기능을 구현하려면 다섯 개의 액티비티 클래스를 구현해야 한다.

▶ SplashActivity: 이 액티비티는 실행될 기본 액티비티에 해당한다. 이 액티비티는 레이아웃

(큰 이미지 하나)을 보여주고 몇 초간 음악을 들려준 다음 MenuActivity를 실행한다.

MenuActivity ▶ : 이 액티비티는 꽤 직관적이다. 이 액티비티의 레이아웃은 여러 개의 버튼으

로 구성돼 있으며, 각 버튼은 애플리케이션의 각 기능에 대응된다. 각 버튼의 onClick() 핸

들러에서는 해당 버튼과 연결된 액티비티를 실행한다.

▶ PlayActivity: 애플리케이션의 핵심적인 부분은 여기에 구현된다. 이 액티비티는 화면에 뭔

가를 그리거나 다양한 유형의 사용자 입력을 처리하고, 점수를 기록하는 등 일반적인 게임

기능(개발자가 지원하고자 하는 기능)을 수행한다.

▶ ScoresActivity: 이 액티비티는 SplashActivity만큼이나 간단하다. 이 액티비티는 레이아

웃 안의 TextView 컨트롤로 점수 정보를 불러오는 일을 좀더 할 뿐이다.

Page 81: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 45

HelpActivity ▶ : 이 액티비티는 점수를 보여주는 대신 도움말 내용을 보여준다는 것을 제외하

면 ScoresActivity와 거의 같다. 이 액티비티의 TextView 컨트롤은 스크롤 가능해야 할지

도 모른다.

각 액티비티 클래스에는 반드시 애플리케이션 리소스에 저장된 자체적인 레이아웃 파일이 있어

야 한다. ScoresActivity와 HelpActivity에 대해 레이아웃 파일을 하나만 쓸 수도 있지만 꼭 그래

야 하는 건 아니다. 하지만 그렇게 했다면 두 액티비티에 대해 레이아웃 파일을 하나만 만들고 레

이아웃 파일이 아닌 애플리케이션이 실행될 때 배경 이미지를 설정하고 TextView 컨트롤에 텍스

트를 설정하면 된다.

그림 3.1은 안드로이드용 '치피의 복수' 게임(0.0.1버전)의 설계를 보여준다.

Startup/SplashActivity

ScoresActivity

MenuActivity

'치피의 복수'

주 메뉴 게임 시작

점 수

도 움 말

시작 화면 액티비티

5초가 지난 후 메뉴 액티비티를

실행

메뉴 액티비티

사용자가 애플리케이션을 실행

점수 액티비티

게임 액티비티

기본 실행 액티비티가시작됨

도움말 액티비티

도움말 버튼의 onClick()은 도움말 액티비티를 실행

시작 버튼의 onClick()은 게임 액티비티를 실행

점수 버튼의 onClick()은 점수 액티비티를 실행

그림 3.1 | 간단한 안드로이드 애플리케이션('치피의 복수')의 애플리케이션 설계

애플리케이션 기능 구현

이제 일반적인 안드로이드 애플리케이션을 어떻게 구현하는지 이해했을 것이므로 아마 이러한 설

계를 어떻게 구현하는지 궁금할 것이다.

Page 82: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

46 l 자율학습! 안드로이드 프로그래밍

앞에서 각 액티비티마다 자체적인 사용자 인터페이스가 있고 별도의 레이아웃 리소스 파일을

정의한다고 이야기한 바 있다. 그러면 구현과 관련해서 다음과 같은 사항이 궁금할 것이다.

애플리케이션의 상태는 어떻게 제어하는가? ▶

설정은 어떻게 저장하는가? ▶

특정 액티비티를 어떻게 실행하는가? ▶

가상 게임 애플리케이션을 염두에 둔 채로 이번에는 안드로이드 애플리케이션 개발의 구현 세

부 사항을 살펴보자. 이번에는 애플리케이션 컨텍스트가 시작하기에 알맞은 곳이다.

애플리케이션 컨텍스트 활용

애플리케이션 컨텍스트(application context)는 모든 최상위 수준 애플리케이션 기능의 중심에 있

다. 애플리케이션 컨텍스트를 이용하면 여러 액티비티 인스턴스 간에 공유되는 설정과 리소스에

접근할 수 있다.

현재 프로세스의 애플리케이션 컨텍스트를 획득하려면 다음과 같이 getApplicationContext()

메서드를 이용하면 된다.

Context context = getApplicationContext();

Activity 클래스는 Context 클래스에서 파생돼 나왔으므로 명시적으로 애플리케이션 컨텍스트

를 받는 대신 this를 써도 된다.

조심하세요 모든 경우에 Activity 컨텍스트를 쓰고 싶고 싶을지도 모르지만, 그렇게 하면

메모리 누수 현상으로 이어질 수 있다. 이러한 현상이 발생하는 이유에 관해 논하는 것은

이 책의 범위를 벗어나지만 이 주제와 관련된 공식 안드로이드 블로그의 글이 있으니 참고

하자: http://android-developers.blogspot.com/2009/01/avoiding-memory-

leaks.html

!

유효한 애플리케이션 컨텍스트를 획득하고 나면 해당 컨텍스트를 이용해 애플리케이션 수준의

기능과 서비스에 접근할 수 있다.

Page 83: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 47

애플리케이션 리소스 획득

애플리케이션 컨텍스트의 getResources() 메서드를 이용하면 애플리케이션 리소스를 획득할 수

있다. 리소스를 획득하는 가장 직관적인 방법은 자동으로 생성되는 R.java 클래스에 정의돼 있는

고유 리소스 식별자를 이용하는 것이다. 다음은 리소스 ID를 가지고 애플리케이션 리소스에서

String 인스턴스를 가져오는 예제다.

String greeting = getResources().getString(R.string.hello);

애플리케이션 환경설정에 접근

애플리케이션 컨텍스트의 getSharedPreferences() 메서드를 이용하면 애플리케이션의 공유 환경

설정(shared preference)을 획득할 수 있다. 환경설정과 같은 간단한 애플리케이션 데이터를 저장하

려면 SharedPreferences 클래스를 이용하면 된다. 각 SharedPreferences 객체에는 이름을 부여할

수 있으며, 이를 통해 환경설정을 여러 범주로 구성하거나 하나의 큰 범주 안에 환경설정을 모두

저장할 수도 있다.

예를 들어, 각 사용자의 이름과 몇 가지 게임 상태 정보(사용자의 남은 목숨)를 보관하고 싶다고

하자. 아래는 GamePrefs라는 공유 환경설정을 생성하고 몇 가지 환경설정을 저장하는 코드를 보

여준다.

SharedPreferences settings = getSharedPreferences("GamePrefs", MODE_PRIVATE);

SharedPreferences.Editor prefEditor = settings.edit();

prefEditor.putString("UserName", "Spunky");

prefEditor.putBoolean("HasCredits" true);

prefEditor.commit();

환경설정을 가져오려면 SharedPreferences를 가져와서 값을 읽으면 된다.

SharedPreferences settings = getSharedPreferences("GamePrefs", MODE_PRIVATE);

String userName = settings.getString("UserName", "Chippy Jr. (Default)");

컨텍스트를 이용한 다른 애플리케이션의 기능 활용

애플리케이션 컨텍스트를 이용하면 수많은 최상위 수준의 애플리케이션 기능에 접근할 수 있다.

다음은 애플리케이션 컨텍스트를 가지고 할 수 있는 일을 나열한 것이다.

Page 84: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

48 l 자율학습! 안드로이드 프로그래밍

Activity 인스턴스 실행 ▶

애플리케이션과 함께 패키지에 포함된 애셋(asset) 획득 ▶

시스템 수준의 서비스 제공자(예, 위치 서비스) 요청 ▶

비공개 애플리케이션 파일, 디렉터리, 데이터베이스 관리 ▶

애플리케이션 권한 검사 및 적용 ▶

이 목록의 첫 항목(Activity 인스턴스 실행)은 아마 애플리케이션 컨텍스트를 쓰는 가장 흔한

이유일 것이다.

액티비티 다루기

Activity 클래스는 모든 안드로이드 애플리케이션에서 가장 중심이 되는 클래스다. 대부분의 경

우 애플리케이션에서는 각 화면마다 액티비티를 정의하고 구현할 것이다. '치피의 복수' 게임 애플

리케이션에서도 다섯 개의 Activity 클래스를 구현해야 한다. 게임을 진행하는 과정에서 사용자는

각 액티비티의 레이아웃 컨트롤과 상호작용하면서 한 액티비티에서 다른 액티비티로 전환한다.

액티비티 실행

아래에 나열한 방법을 포함해서 액티비티를 실행하는 방법에는 여러 가지가 있다.

매니페스트 파일에 실행될 액티비티를 지정 ▶

애플리케이션 컨텍스트를 이용한 액티비티 실행 ▶

부모 액티비티에서 결과 값을 받기 위해 자식 액티비티를 실행 ▶

매니페스트 파일에 실행될 액티비티를 지정

각 안드로이드 애플리케이션은 반드시 안드로이드 매니페스트 파일에 기본 액티비티를 지정해야

한다. Droid1 프로젝트의 매니페스트 파일을 살펴보면 DroidActivity가 기본 액티비티로 지정돼

있음을 확인할 수 있다.

Page 85: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 49

알아두세요 특정 상황에서는 다른 Activity 클래스가 실행되게끔 지정할 수도 있다. 안드

로이드 매니페스트 파일에 직접 정의한 필터를 설정하면 이러한 2차 진입점을 관리할 수

있다.

?

'치피의 복수'에서는 논리적으로 SplashActivity가 기본적으로 실행되기에 가장 적합한 액티비

티다.

애플리케이션 컨텍스트를 이용한 액티비티 실행

액티비티를 실행하는 가장 흔한 방법은 애플리케이션 컨텍스트의 startActivity() 메서드를 이용

하는 것이다. 이 메서드는 intent라는 매개변수를 하나 받는다. 인텐트(intent)에 관해서는 잠시 후

에 좀더 자세히 이야기하기로 하고, 지금은 startActivity()를 호출하는 데만 집중하자.

다음 코드에서는 명시적으로 인텐트를 전달해서 startActivity() 메서드를 호출한다.

startActivity(new Intent(getApplicationContext(), MenuActivity.class));

이 인텐트는 클래스(MenuActivity.class)를 기준으로 MenuActivity라는 액티비티의 실행을 요

청한다. 이 클래스는 반드시 해당 패키지 어딘가에 구현돼 있어야 한다.

MenuActivity 클래스는 이 애플리케이션의 패키지에 정의돼 있으므로 반드시 안드로이드 매

니페스트 파일에 액티비티로 등록돼 있어야 한다. 사실 '치피의 복수' 애플리케이션에서도 매번 액

티비티를 실행할 때마다 이 방법을 이용할 수도 있지만 액티비티를 실행하는 방법은 이것 말고도

많다.

결과 값을 받기 위한 액티비티 실행

이따금 완전히 독립적인 액티비티를 실행하는 것이 아니라 관련 액티비티를 실행한 다음 실행 결

과를 받고 싶을 때가 있다. 이 경우 Activity.startActivityForResult() 메서드를 이용하면 된다. 실

행 결과는 호출하는 액티비티의 onActivityResult() 메서드에 선언된 Intent 매개변수로 반환된다.

Intent 매개변수를 이용해서 데이터를 전달하는 방법에 관해서는 잠시 후에 이야기하겠다.

액티비티의 상태 관리

애플리케이션은 전화 연결과 같이 우선순위가 더 높은 이벤트가 발생했을 때 중단될 수 있다. 활

성 애플리케이션은 한번에 하나만 존재할 수 있다. 좀더 구체적으로 말하면 어떤 시점에서든 포어

Page 86: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

50 l 자율학습! 안드로이드 프로그래밍

그라운드(foreground)에는 한 애플리케이션 액티비티만이 존재할 수 있다는 의미다.

안드로이드 애플리케이션은 메모리, 리소스, 데이터는 물론 자신의 상태를 관리할 책임을 지니

고 있다. 안드로이드 운영체제는 메모리가 부족할 때 실행을 일시 정지(pause)했거나, 중지(stop)됐

거나, 소멸(destroy)된 액티비티를 종료시킬지도 모른다. 이는 포어그라운드에 있지 않은 액티비티

는 언제든 종료될 가능성이 있음을 의미한다. 다시 말해서 안드로이드 애플리케이션은 상태를 보

관하고, 언제든지 중지되거나 종료될 채비를 하고 있어야 한다는 뜻이다.

액티비티 콜백 이용

Activity 클래스에는 액티비티가 실행 대기(suspend)나 실행 재개(resume)와 같은 이벤트에 응답할

기회를 제공하는 다수의 콜백이 포함돼 있다. 표 3.1에 가장 중요한 콜백 메서드가 나열돼 있다.

표 3.1 안드로이드 액티비티의 중요 콜백 메서드

콜백 메서드 설명 쓰임새

onCreate() 액티비티가 시작하거나 재시작할 때

호출됨

정적 액티비티 데이터를 초기화.

필요한 데이터나 리소스를 연동.

setContentView()로 레이아웃을 지정.

onResume() 액티비티가 포어그라운드 액티비티

가 될 때 호출됨.

배타적인 리소스를 획득.

오디오, 비디오, 액티비티, 애니메이션을 시작.

onPause() 액티비티가 포어그라운드에서 벗어

날 때 호출됨.

커밋되지 않은 데이터를 저장.

배타적인 리소스를 비활성화하거나 해제.

오디오, 비디오, 애니메이션을 중지.

onDestroy() 애플리케이션이 종료될 때 호출됨. 정적 액티비티 데이터를 정리.

필요한 리소스를 해제

주 스레드는 종종 UI 스레드(UI thread)라고도 하는데, 이는 내부적으로 UI를 그리는 일이 이곳

에서 일어나기 때문이다. 액티비티는 반드시 콜백이 진행되는 동안 일어나는 처리 과정을 적당한

속도로 처리해서 주 스레드가 차단(block)되지 않게 해야 한다. 주 UI 스레드가 오랫동안 차단되면

안드로이드 시스템에서 응답성이 떨어진다는 이유로 해당 액티비티를 종료시킬 것이다. 특히 우선

순위가 더 높은 태스크(예, 전화가 왔을 때)가 포어그라운드로 진입할 때 onPause() 콜백이 실행

되는 동안에는 빨리 응답하는 것이 중요하다.

그림 3.2는 액티비티 콜백이 호출되는 순서를 보여준다.

Page 87: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 51

onCreate()

onStart()

onResume()

onRestart()

onDestroy()

onPause()

onStop()

액티비티시작 요청

액티비티가 포어그라운드로 이동함

액티비티가 포어그라운드로 이동함

액티비티가 포어그라운드로 이동함

메모리 부족으로 인해 액티비티가 종료됨

액티비티가 포어그라운드에서

실행 중

액티비티가 백그라운드로 이동함

액티비티가 백그라운드로 이동함

그림 3.2 | 액티비티 생명주기의 중요 콜백 메서드

액티비티의 상태 저장

액티비티는 공유 애플리케이션 환경설정과 굉장히 유사한 전용 환경설정을 가질 수 있다. 액티비

티의 getPreferences() 메서드를 이용하면 이 같은 환경설정에 접근할 수 있다. 이 메커니즘은 상

태를 저장할 때 매우 유용하다. 이를테면, 게임의 PlayActivity에서는 이러한 환경설정을 이용해

현재 레벨과 점수, 플레이어의 상태 통계, 게임 상태를 저장할 수 있다.

액티비티 종료

액티비티를 종료하려면 �nish() 메서드를 호출하면 된다. 액티비티 자체를 종료하느냐 다른 액티비

티를 종료하느냐에 따라 다양한 버전의 �nish() 메서드를 쓸 수 있다.

Page 88: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

52 l 자율학습! 안드로이드 프로그래밍

게임 애플리케이션에서는 ScoresActivity나 PlayActivity, HelpActivity를 종료함으로써 점수,

게임, 도움말 화면에서 메뉴 화면으로 되돌아갈 수 있다.

인텐트 다루기

Intent 객체는 안드로이드 운영체제에서 사용되는 태스크 요청을 캡슐화한다. startActivity() 메

서드를 호출할 때 Intent 매개변수를 전달하면 안드로이드 시스템은 해당 Intent 액션에 부합하

는 액티비티를 안드로이드 시스템에서 찾는다. 적절한 액티비티를 찾고 나면 해당 액티비티가 실

행된다.

안드로이드 시스템은 모든 인텐트를 해석한다. 인텐트는 실행될 특정 액티비티에 대한 요청을

포함해서 매우 구체적일 수도 있고, 아니면 특정 조건에 부합하는 액티비티는 모두 실행되도록 요

청하는 것처럼 다소 모호할 수도 있다. 인텐트 해석에 관한 좀더 자세한 사항에 대해서는 안드로

이드 문서를 참고한다.

인텐트를 이용한 정보 전달

인텐트는 액티비티 간에 데이터를 전달하는 데 사용될 수 있다. 부가정보(extra)라고 하는 추가적

인 데이터를 인텐트 안에 포함시켜 이 같은 방식으로 인텐트를 쓸 수 있다.

부가적인 데이터를 인텐트에 덧붙이려면 포함하고자 하는 적절한 타입의 객체를 putExtra() 메

서드에 전달하면 된다. 인텐트에 부가정보를 집어넣을 때 권장되는 안드로이드 프로그래밍 관례

는 이름 앞에 패키지를 붙이는 것이다(예, com.androidbook.chippy.NameOfExtra).

예를 들어, 아래 인텐트는 정수형(integer)인 현재 게임 레벨에 대한 부가 정보를 포함한다.

Intent intent = new Intent(getApplicationContext(), HelpActivity.class);

intent.putExtra("com.androidbook.chippy.LEVEL", 23);

startActivity(intent);

HelpActivity 클래스가 실행되면 getIntent() 메서드를 이용해서 인텐트를 받아올 수 있다. 그런

다음 적절한 메서드로 부가 정보를 추출하면 된다. 아래 예제를 보자.

Intent callingIntent = getIntent();

int helpLevel = callingIntent.getIntExtra("com.androidbook.chippy.LEVEL", 1);

이러한 정보는 레벨을 토대로 특별한 도움말을 보여주는 데 이용할 수도 있을 것이다.

Page 89: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 53

부모 액티비티에서 startActivityForResult() 메서드로 하위 액티비티를 실행한 경우 결과 값은

onActivityResult() 메서드에 선언된 Intent 매개변수로 전달될 것이다. 그러고 나면 부모 액티비

티에서는 인텐트 데이터를 추출해서 활용할 수 있다.

인텐트를 이용한 다른 애플리케이션 실행

초기에는 애플리케이션이 자체적인 패키지에 정의된 액티비티 클래스만 실행할지도 모른다. 하지

만 적절한 실행권한만 갖고 있다면 다른 애플리케이션에 들어 있는 외부 액티비티 클래스를 실행

하는 것도 가능하다.

공통적인 사용자 태스크에 쓸 수 있는 잘 정의된 인텐트 액션이 여럿 있다. 예를 들면 인텐트 액

션을 생성해서 다음과 같이 애플리케이션을 실행할 수도 있다.

내장 웹 브라우저를 실행하고 URL 주소를 제공 ▶

웹 브라우저를 실행하고 검색어를 입력 ▶

내장 전화기 애플리케이션을 실행하고 전화번호를 입력 ▶

내장 지도 애플리케이션을 실행하고 위치를 입력 ▶

구글 스트리트 뷰를 실행하고 위치를 입력 ▶

정지 영상 모드나 동영상 모드로 내장 카메라 애플리케이션을 실행 ▶

벨소리 선택기를 실행 ▶

소리를 녹음 ▶

다음은 간단한 인텐트를 생성할 때 기정의된 액션(ACTION_VIEW)을 전달해서 특정 URL과 함

께 웹 브라우저를 실행하는 예제다.

Uri address = Uri.parse("http://www.perlgurl.org");

Intent surf = new Intent(Intent.ACTION_VIEW, address);

startActivity(surf);

이 예제는 액션과 데이터를 함께 전달해서 생성하는 인텐트를 보여준다. 이 경우 액션은 뭔가를

보여주는 역할을 한다. 데이터는 URI(uniform resource identi�er)이며, 보여줄 리소스의 위치를 가

리킨다.

Page 90: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

54 l 자율학습! 안드로이드 프로그래밍

이 예제에서는 브라우저의 액티비티가 실행된 후 포어그라운드에 자리 잡는다. 따라서 이 액티

비티를 호출한 기존 액티비티는 백그라운드에서 일시 정지한 상태에 놓인다. 사용자가 브라우저를

다 쓰고 뒤로가기(Back) 버튼을 클릭하면 원래 액티비티가 다시 나타난다.

애플리케이션은 자체적인 인텐트 타입을 생성해서 다른 애플리케이션에서 해당 인텐트 타입을

호출하게 할 수 있다. 이렇게 하면 긴밀히 통합된 애플리케이션이 만들어진다.

알아두세요 OpenIntents.org라는 웹 사이트의 www.openintents.org/en/

intentstable에서는 인텐트 액션 목록을 확인할 수 있다. 이 목록에는 안드로이드에 내장

된 인텐트는 물론 서드파티 애플리케이션에서 이용 가능한 것도 포함돼 있다.

?

대화상자 다루기

단말기 화면은 작기 때문에 사용자 인터페이스를 잘 구성하는 것이 매우 중요하다. 이따금 완전히

새로운 액티비티를 만들지 않고 사용자와의 상호작용을 처리하고 싶을 때가 있다. 그러한 경우 액

티비티 대화상자를 쓰면 매우 편리하다. 대화상자는 완전히 새로운 화면이나 액티비티를 생성할

필요가 없는 매우 단순한 사용자 인터페이스를 만드는 데 유용하다. 대신 액티비티를 호출하면 대

화상자가 만들어지며, 이 대화상자는 버튼과 입력 컨트롤을 비롯해서 자체적인 레이아웃과 사용

자 인터페이스를 지니고 있다.

표 3.2는 액티비티 대화상자 창을 생성하고 관리할 때 쓰는 중요 메서드를 나열한 것이다.

표 3.2 Activity 클래스의 중요 대화상자 관련 메서드

메서드 용도

Activity.showDialog() 대화상자를 보여주고, 필요하다면 생성한다.

Activity.onCreateDialog() 대화상자가 처음 생성되어 액티비티 대화상자 풀(pool)에 추가될 때 실행되는

콜백.

Activity.onPrepareDialog() 대화상자를 즉시 업데이트할 때 실행되는 콜백. 대화상자가 한번 생성되고 나

면 액티비티에서 여러 번 사용할 수 있다. 이 콜백을 이용하면 showDialog()

가 호출되기 바로 직전에 대화상자를 업데이트하는 것이 가능하다.

Activity.dismissDialog() 대화상자를 숨긴 다음 액티비티로 돌아간다. showDialog()를 다시 호출하면

대화상자를 다시 사용할 수 있다.

Activity.removeDialog() 대화상자를 액티비티 대화상자 풀에서 완전히 제거한다.

Page 91: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 55

액티비티 클래스는 하나 이상의 대화상자를 포함할 수 있으며, 각 대화상자는 생성한 후 여러

번 사용할 수 있다.

기본 대화상자 외에도 바로 쓸 수 있는 대화상자도 꽤 있다. 이를테면, AlertDialog, Character

PickerDialog, DatePickerDialog, ProgressDialog, TimePickerDialog와 같은 것이 여기에 해당

한다.

XML 레이아웃 파일을 설계한 후 Dialog.setContentView() 메서드를 이용해서 직접 대

화상자를 새로 만드는 것도 가능하다. 대화상자 레이아웃에서 컨트롤을 가져오려면 Dialog.

�ndViewById() 메서드를 쓰면 된다.

애플리케이션 정보 로깅

안드로이드는 android.util.Log라는 유용한 로깅 유틸리티 클래스를 제공한다. 로깅 메시지는 오

류가 가장 심각한 것으로 분류되는 심각도(그리고 상세한 정도)에 따라 분류된다.

표 3.3 공통적으로 사용되는 로깅 메서드

메서드 용도

Log.e() 오류 로깅

Log.w() 경고 로깅

Log.i() 정보성 메시지 로깅

Log.d() 디버깅 메시지 로깅

Log.v() 매우 상세한 메시지 로깅

조심하세요 Log 유틸리티를 과도하게 쓰면 애플리케이션 성능이 저하될 수 있다. 디버그 로

깅과 상세 로깅은 개발 용도로만 써야 하며 애플리케이션을 출시하기 전에 제거해야 한다.!

각 Log 메서드의 첫 번째 매개변수는 태그라는 문자열이다. 한 가지 공통적인 안드로이드 프로

그래밍 관례 가운데 하나는 전체 애플리케이션이나 해당 애플리케이션 내의 특정 액티비티를 나

타내는 전역 정적 문자열을 정의하는 것이다. 이렇게 정의한 문자열은 로그 출력을 특정 데이터로

한정하는 로그 필터를 만드는 데 사용할 수 있다.

Page 92: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

56 l 자율학습! 안드로이드 프로그래밍

예를 들어, 다음과 같이 TAG라는 문자열을 정의했다고 가정하자.

private static final String TAG = "MyApp";

이제 Log 메서드를 쓸 때마다 이 태그를 전달하면 된다. 그렇다면 정보성 로깅 메시지는 다음과

같이 로깅할 것이다.

Log.i(TAG, "onCreate() 콜백 메서드 안");

알아두세요 이클립스에서는 LogCat 유틸리티를 써서 로그 메시지를 특정 태그 문자열로

필터링할 수 있다. 자세한 내용에 관해서는 부록 B, "이클립스 IDE 팁과 활용"을 참고한다.

?

정리

본 장에서는 세 가지 애플리케이션 컴포넌트인 Context, Activity, Intent를 이용해 안드로이드 애

플리케이션을 설계하는 방법을 살펴봤다. 각 안드로이드 애플리케이션은 하나 이상의 액티비티로

구성된다. 최상위 수준의 애플리케이션 기능은 애플리케이션 컨텍스트를 통 해 접근할 수 있다.

각 액티비티는 특별한 기능을 지니며, (보통) 자체적인 레이아웃이나 사용자 인터페이스를 가진다.

안드로이드 시스템에서는 인텐트에 설정된 액션과 데이터 정보를 토대로 인텐트 객체와 가장 부합

하는 애플리케이션 액티비티를 찾으면 액티비티가 실행된다. 인텐트는 데이터를 한 액티비티에서

다른 액티비티로 전달하는 데 사용할 수도 있다.

기본적인 안드로이드 애플리케이션의 구성 방법을 배우는 것과 더불어 본 장에서는 안드로이

드 애플리케이션을 개발하고 디버깅할 때 능률을 높여주는 애플리케이션 로깅과 같은 유용한 안

드로이드 유틸리티 클래스를 이용하는 방법도 배웠다.

Page 93: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 57

▶Q&A

메모리가 부족한 상황에서도 종료되지 않을 응답성 있는 애플리케이션을 설계하려면 어떻게 Q

해야 하나요?

�애플리케이션에서는�액티비티의�상태를�신중하게�관리해서�메모리가�부족한�상황에서�종료되A

는�위험을�낮출�수�있습니다(하지만�위험을�완전히�없앨�수는�없습니다).�이는�적절한�액티비

티�콜백을�쓰고�권장�사항을�따른다는�것을�의합니다.�하지만�가장�중요한�것은�애플리케이션

이�필요할�때만�리소스를�획득하고�해당�리소스를�가능한�빨리�해제해야�한다는�것입니다.

안드로이드 애플리케이션에서는 입력 폼을 어떻게 설계해야 하나요?Q

�모바일�애플리케이션은�언제든지�일시�정지�상태로�가거나�다시�시작할�준비를�갖추고�있어A

야�합니다.�일반적인�웹�폼�형식,�즉�다양한�필드와�제출,�초기화,�취소�버튼이�포함된�형태는�

모바일�개발에는�썩�어울리지�않습니다.�대신�데이터를�입력할�때�바로�확정하는�방법을�고려

해�보길�바랍니다.�이렇게�하면�사용자에게�불편을�주지�않고도�액티비티의�상태가�바뀔�때�

기본적으로�필요한�데이터를�최소한으로�줄일�수�있습니다.

▶실습

퀴즈

다음 중 사용자에게 가장 먼저 보여주기에 적절한 화면은 무엇인가?11

메뉴�화면A.

시작�화면B.

게임�화면C.

21 O/X 문제. 안드로이드는 애플리케이션 설정을 저장하는 단순한 방법을 제공한다.

Page 94: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

58 l 자율학습! 안드로이드 프로그래밍

31 안드로이드에서 컨텍스트 인스턴스를 획득할 때 권장하는 방법은 무엇인가?

Context context = (Context) this;A.

Context context = getAndroidObject(CONTEXT);B.

Context context = getApplicationContext();C.

O/X�문제.�android.util.Log�클래스는�여섯�가지�형식의�로깅을�지원한다.41

해답

B. 시작 화면에서는 사용자가 게임을 시작하기 전에 게임의 로고를 보여준다.11

O. 단순 설정을 저장하려면 SharedPreferences 클래스를 이용하면 된다.21

C. 이렇게 하면 애플리케이션과 연동된 컨텍스트를 가져온다. A에서 보여준 액티비티 컨텍스31

트를 이용하는 방법은 동작은 하지만 권장하는 방법은 아니다.

X. Log 클래스는 다섯 가지 로그 유형(오류, 경고, 정보성, 디버그, 상세)을 지원한다.41

실습 문제

�Droid1�프로젝트에�로깅�태그를�추가한다.�onCreate()�콜백�메서드에서�Log.i()�메서드를�이11

용해�정보성�로깅�메시지를�추가한다.�애플리케이션을�실행하고�로그�결과를�확인한다.

�onCreate()에�더불어�onStart(),� onRestart(),� onResume(),� onPause(),� onStop(),�21

onDestroy()와�같은�Activity의�콜백�메서드를�메서드를�구현한다.�각�콜백�메서드에�로그�메

시지를�추가하고�평소처럼�애플리케이션을�실행한다.�로그�결과를�확인해서�애플리케이션의�

생명주기를�따라가본다.�다음으로�다른�시나리오,�가령�애플리케이션을�일시�정지하거나�실행�

대기한�다음�실행을�재개해본다.�또한�전화가�걸려오는�상황을�흉내�내본다.�애플리케이션�로

그를�지켜보면서�액티비티가�그러한�이벤트에�어떻게�응답하는지�확인한다.

Page 95: 자율학습! 안드로이드 프로그래밍 : 하루 한 시간

03 안드로이드 애플리케이션 제작 l 59