초보자를 위한 안드로이드 스튜디오 맛보기

Page 1


w w w. h a n b i t . c o . k r

지금은 모던 웹 시대! 모던 웹 디자인을 위한

모던 웹을 위한

HTML5 + CSS3 입문 HTML5 분야 부동의 1위 도서

JavaScript + jQuery 입문

HTML5 표준안 확정에 맞춘 완전 개정판의 귀환!

자바스크립트에서 제이쿼리, 제이쿼리 모바일까지 한 권으로 끝낸다!

HTML5 권고안과 최신 웹 브라우저 환경 대응

시대의 흐름에 맞춰 다시 쓴 자바스크립트 교과서

윤인성 저 | 624쪽 | 30,000원

윤인성 저 | 980쪽 | 32,000원

모던 웹을 위한

HTML5 + CSS3 정복

Node.js

프로그래밍 페이스북, 월마트, 링크드인은 왜 Node.js를 선택했는가?

필요한 것만 배워 바로 현장에서 쓰는 HTML5

이 물음에 대한 답은 Node.js가 보여주는 빠른 처리 능력 때문이다.

순서대로 읽으며 실습할 수 있는 HTML5 자습서

윤인성 저 | 484쪽 | 25,000원

김상형 저 | 700쪽 | 32,000원


w w w. h a n b i t . c o . k r

이것이 프로그래밍이다! 저자 직강 동영상 제공!

이것이 안드로이드다

이것이 C언어다

이것이 자바다

진정한 안드로이드 개발자로 이끌어줍니다.

세상에 없던 새로운 C언어 입문서 탄생!

가장 중요한 프로그래밍 언어를 하나 배워야 한다면, 결론은 자바다!

SDK 5.0 롤리팝 호환!

삼성, LG에서 펼쳐졌던 전설의 명강의를 풀타임 동영상 강좌로!

중급 개발자로 나아가기 위한 람다식, JavaFX, NIO 수록

이보다 더 확실한 방법은 없다, 칠판강의

책만 보고, 동영상 강좌로도 만족하지 못했다면 Daum 카페 '슈퍼드로이드'에서 만나요

전체 동영상 강좌 유투브 전격 공개!

자바의 모든 것을 알려주는 인터넷 강의 궁금한 것은 카페에서!

cafe.daum.net/superdroid

http://goo.gl/tJK3Tu

cafe.naver.com/thisisjava

박성근 저 | 1,164쪽 | 45,000원

서현우 저 | 708쪽 | 25,000원

신용권 저 | 1,224쪽 | 30,000원




지은이

마츠오카 겐지 松岡 謙治

초등학생 시절부터 프로그래밍을 배우기 시작해 게임을 만들어 친구들과 놀면서 프로그래밍에 재미를 느끼고 프로그래밍 세계에 빠져들었다. 그 후 시스템 인티그레이터(SIer)로서 일하다가 안드로이드를 만나 프리랜서로 독립하게 되었다. 앱 위탁 개발을 하면서 오리지널 제품도 개발 하고 있으며, 현재 특히 힘을 쏟고 있는 분야는 웨어러블, 자동차, 음악 관련 앱 개발이다. ‘Google Developers Group 규슈’를 설립했으며, 오거나이저를 하면서 스터디 모임과 강연 활동도 겸하고 있다. 옮긴이 김성재 openwide@naver.com 기술 분야 전문 번역가로, 평소 관심이 있는 분야는 IT 기술과 일본어 교육 콘텐츠 등이다. 최근에는 업무에 필요한 Mac OS 및 iOS 애플리케 이션 개발 및 리뷰, 환경 구축에 관심이 많다. 번역서로는 『만들면서 배우는 기계 학습』, 『빅데이터의 충격』, 『C언어로 배우는 리눅스 프로그래 밍』(이상, 한빛미디어) 등이 있다.

초보자를 위한 안드로이드 스튜디오 : Hello World부터 채팅 앱과 벽돌깨기 게임까지 초판발행 2016년 2월 1일 지은이 마츠오카 겐지 / 옮긴이 김성재 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978 –89-6848-256-4 93000 총괄 전태호 / 책임편집 김창수 / 기획 최현우 / 편집 김상수 디자인 표지 김미현 내지 여동일, 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 서은옥 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr

Android Studio DE HAJIMERU Android APPLI KAIHATSU NO KYOKASHO by Kenji Matsuoka Copyright © 2015 Kenji Matsuoka All rights reserved. Original Japanese edition published by Mynavi Publishing Corporation This Korean edition is published by arrangement with Mynavi Publishing Corporation, Tokyo in care of Tuttle-Mori Agency, Inc., Tokyo through Botong Agency, Seoul. 이 책의 한국어판 저작권은 보통에이전시를 통한 저작권자와의 독점 계약으로 한빛미디어가 소유합니다. 신 저작권법에 의하여 한국 내에서 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금합니다.

지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.



옮긴이의 말

이 책은 안드로이드 스튜디오를 이용한 프로그래밍 입문서입니다. 안드로이드 앱은 개발과 배 포가 iOS 쪽보다 간편하고 진입 장벽이 낮아, 저자의 말처럼 프로그래밍 시작부터 배포까지 모 든 것을 경험할 수 있는 최적의 환경이라고 할 수 있습니다. 게다가 안드로이드 스튜디오가 빠 른 속도로 발전을 거듭하면서 프로그래밍 환경은 더할 나위 없이 좋아졌습니다. 저자는 독자들이 안드로이드 스튜디오를 통해 프로그래밍 기초를 배우고, 개발한 앱이 동작하 는 모습을 확인하며 프로그래밍의 즐거움을 느끼게 하는 것을 목표로 하고 있습니다. 이 책은 채팅 앱과 게임 앱 개발을 따라하면서 디버깅, 음성 인식, 다국어 지원, 배포 등 다소 어려울 수 있지만 꼭 필요한 주제들을 쉽게 설명했습니다. 한 가지 아쉬운 점이 있다면 기초가 되는 자바 문법에 관한 설명이 부족하다는 것입니다. 하지 만 사전 지식 없이도 따라할 수 있게 구성되어 있으므로, 전체 흐름을 먼저 학습해서 부족한 부 분이 무엇인지 알게 되면 다음 단계에 배울 내용이 더욱 명확해지겠지요. 문법적으로 이해가 안 되는 부분은 따로 정리해 두거나 참고서 등을 조사하면서 그때그때 보완하면서 학습해도 좋 을 것 같습니다. 어느 쪽이든 코드를 입력하고 프로그램을 원하는 대로 움직이는 쾌감, 즐거움 을 느껴보세요. 프로그래밍에 발을 내딛게 되는 계기는 여러 가지겠지만, 저는 모바일 프로그래밍으로 자바를 시작했습니다. 오랜만에 다시 스마트폰에 앱을 설치하고 실행하다보니 책을 옮기는 내내 마치 프로그램을 처음 배우던 그때로 돌아가는 느낌이었습니다. 끝으로 꼼꼼하게 번역 원고를 살펴 봐주신 한빛미디어 편집자님께 깊이 감사드립니다. 이번에도 여러 가지 많이 배울 수 있었던 값진 시간이었습니다. 저자의 바람처럼 부디 이 책이 프로그래밍 세계로 입문하는 독자 분께 동기 부여가 될 수 있게, 또한 프로그래밍하는 즐거움을 줄 수 있게 되길 기원합니다. 첫눈 오는 날_ 김성재

4


지은이의 말

안드로이드는 구글이 개발한 스마트폰 플랫폼입니다. 지금은 스마트폰뿐만 아니라 태블릿이나

TV 심지어는 시계, 자동차 등 새로운 분야까지 진출했지요. 안드로이드를 비롯한 스마트폰 플 랫폼의 특징 중 하나는 누구나 쉽게 프로그램을 만들어 세상에 공개할 수 있다는 것입니다. 스마트폰이 등장하기 전의 휴대전화는 프로그래밍에 제약이 많아서 앱을 배포하려면 복잡한 신청 절차와 까다로운 심사를 통과해야만 했습니다. 결과적으로 개인이 모바일 앱을 불특정 다 수에게 배포하기에는 문턱이 높았기에 모바일 앱 개발이 그다지 활성화되지 못했으며, 개인 개 발자라면 PC용 소프트웨어를 만드는 게 당연시되었습니다. 하지만 안드로이드의 등장으로 앱을 자유롭게 만들고 배포할 수 있게 되자, 개인 개발자도 앱 을 만들어 생계를 꾸려가는 사례가 늘어나기 시작했습니다. 이 책은 프로그래밍을 시작하는 사람이 안드로이드 앱 제작 과정을 통해 프로그래밍의 기초를 배우고 즐거움을 느끼는 것을 목표로 하고 있습니다. 이 책은 프로그래밍에 관한 사전 지식이 필요 없습니다. 이 책을 통해 프로그래밍의 기본 사고 방식과 즐거움을 체험해보십시오. 프로그램은 컴퓨터에게 어떻게 동작하길 원하는지 전달하는 것입니다. 세상에는 컴퓨터나 스 마트폰뿐만 아니라 다양한 곳에서 프로그램이 동작합니다. 자동판매기나 자동차, TV, 냉장고 등 의외의 곳에서도 프로그램이 활약하고 있습니다. 프로그램이 사용되는 곳이 늘어나면서 프 로그래밍 학습의 중요성도 다시 인식되고 있습니다. 마츠오카 겐지

5


이 책에 대하여

안드로이드 스튜디오 설정부터 시작해 간단한 프로그램을 조금씩 수정 및 추가해 가면서 프로 그래밍의 기본을 학습합니다. 후반부에서는 게임 앱을 만들며 안드로이드 앱 제작 요령과 노하 우를 습득합니다. 여러분, 이 책 한 권이면 앱 개발을 시작할 수 있습니다! 이 책의 원서는 1.3 버전 기반이지만 번역 과정에서 1.5 버전으로 수정 및 동작 확인을 완료했습니다.

이 책의 개발 환경 이 책에서 사용한 개발 환경은 다음과 같습니다. ●●

안드로이드 스튜디오 1.5

●●

J2SE 8

●●

Android SDK 5

예제 소스 이 책은 안드로이드 스튜디오를 실제로 조작하면서 설명합니다. 이 책에서 설명되고 있는 항목 에 관해서는 완성된 예제 파일을 제공하므로 적절히 활용하십시오. 예제 파일은 한빛미디어에 서 내려받을 수 있습니다. ●●

www.hanbit.co.kr/exam/2256

• 이 책에 등장하는 회사명, 상품명은 해당하는 각 사의 상표 또는 등록 상표입니다. 본문에서는 TM 및 Ⓡ 마크를 생략했습니다.

6


CONTENTS

CHAPTER

옮긴이의 말 ..........................................................................................................................

4

지은이의 말 ..........................................................................................................................

5

이 책에 대하여 ......................................................................................................................

6

1 앱 개발을 시작하기 전에 1.1 프로그래밍의 즐거움 ...................................................................................................... 14 1.1.1 지금까지의 프로그래밍 입문 ................................................................................... 14 1.1.2 앞으로의 프로그래밍 입문 ...................................................................................... 14 1.1.3 이 책을 읽는 방법 ................................................................................................. 15 1.1.4 실패를 즐기자 ...................................................................................................... 15 1.1.5 하다가 막히면 ...................................................................................................... 16 1.1.6 다음 단계로 나아가려면 ......................................................................................... 16 1.1.7 이 책에서 필요한 것 .............................................................................................. 16

1.2 프로그래밍으로 변하는 세계 ............................................................................................ 17 1.2.1 올바른 사용법은 스스로 결정한다 ............................................................................ 17 1.2.2 프로그래밍으로 컴퓨터에 대한 인식이 바뀐다 ............................................................ 18 1.2.3 자신이 만든 앱을 다른 사람에게 배포한다는 것 .......................................................... 18 1.2.4 이 책의 예제 ........................................................................................................ 19

1.3 안드로이드 앱의 구조 ..................................................................................................... 19 1.3.1 안드로이드 앱에서 사용하는 기술 ............................................................................ 19 1.3.2 앱을 만드는 데 필요한 프로그램 .............................................................................. 20 1.3.3 앱 실행 방법 ........................................................................................................ 21 1.3.4 프로그램의 오류를 수정한다 ................................................................................... 22 1.3.5 더 많은 사람이 사용하게 한다 ................................................................................. 22

7


CONTENTS

CHAPTER

2 개발 환경 설정 2.1 프로그램을 만들 준비를 하자(윈도우) ................................................................................ 24 2.1.1 JDK 설치하기 ..................................................................................................... 24 2.1.2 환경 변수 설정하기 ............................................................................................... 29 2.1.3 안드로이드 스튜디오 설치하기 ................................................................................ 32

2.2 프로그램을 만들 준비를 하자(Mac) .................................................................................. 36 2.2.1 JDK 설치하기 ..................................................................................................... 37 2.2.2 안드로이드 스튜디오 설치하기 ................................................................................ 42

2.3 안드로이드 스튜디오를 설정하자(윈도우/Mac) ................................................................... 43 2.3.1 필요한 패키지 설치하기 ......................................................................................... 43

2.4 스마트폰을 설정하자 ...................................................................................................... 48 2.4.1 프로그램을 스마트폰에서 동작시키기 ....................................................................... 48 2.4.2 프로그램을 컴퓨터에서 동작시키기 .......................................................................... 51

CHAPTER

3 처음 만드는 안드로이드 프로그램 3.1 Hello World!를 만들자 ................................................................................................... 56 3.2 표시할 문자를 변경한다 .................................................................................................. 64 3.3 덧셈 결과를 표시한다 ..................................................................................................... 74 3.4 3의 배수에만 특별한 문구를 표시한다 ................................................................................ 78 3.5 1~100까지 더한 값을 구한다 ............................................................................................ 84 3.6 같은 처리를 모아보자 ..................................................................................................... 89 같은 처리를 모은다는 것은 .............................................................................

89

프로그래밍의 오류 발견 및 수정 .......................................................................................

97

3.7.1 프로그램 오류를 찾아 수정한다 ...............................................................................

97

3.6.1

3.7

8

개요


CHAPTER

4 디버깅을 해보자 4.1 버그란? .................................................................................................................... 104 4.1.1 버그란? ........................................................................................................... 104

4.2 실행할 수 없는 버그 .................................................................................................... 108 4.3 실행 중에 일어나는 버그 .............................................................................................. 119 4.4 변수의 내용을 추적한다 ............................................................................................... 123 4.5 로그를 가져온다 ......................................................................................................... 136 4.5.1 로그를 이용해 프로그램의 흐름을 파악한다 ............................................................ 136 4.5.2 로그를 검색한다 ................................................................................................ 139 4.5.3 오래된 로그를 삭제한다 ...................................................................................... 140 4.5.4 로그를 줄바꿈한다 ............................................................................................. 140 4.5.5 PC에 연결되지 않을 때 로그를 가져온다 ............................................................... 140 4.5.6 버그 리포트에서 로그를 검색한다 ......................................................................... 141

4.6 예외 처리 .................................................................................................................. 141 4.6.1 일반 처리와 예외 처리, 어느 쪽이든 처리한다 ......................................................... 147 4.6.2 예외가 발생하면 오류 메시지를 표시한다 ............................................................... 149 4.6.3 예외를 직접 발생시킨다 ...................................................................................... 150 4.6.4 catch 내에서 예외를 발생시킨다 ......................................................................... 152 4.6.5 예외 정리 ......................................................................................................... 153

4.7 메모리와 CPU 사용률을 확인한다 ................................................................................. 154 메모리와 CPU의 사용률을 본다 ...................................................................

154

4.7.2 정리 ................................................................................................................

156

4.7.1

개요

9


CONTENTS

CHAPTER

5 채팅 앱을 만들자 5.1 화면을 만든다 ............................................................................................................ 160 5.1.1 대화형 앱을 개발한다 ......................................................................................... 160

5.2 버튼을 눌러보자 ......................................................................................................... 185 5.3 입력된 내용에 따라 처리를 바꾼다 ................................................................................. 198 5.4 시각을 표시한다 ......................................................................................................... 207 5.5 화면 항목을 프로그램으로 추가한다 ............................................................................... 212 5.5.1 동적으로 화면 항목 수를 늘린다 ........................................................................... 212

5.6 애니메이션을 추가한다 ................................................................................................ 220

CHAPTER

6 앱을 개량하자 6.1 아이콘을 변경한다 ...................................................................................................... 230 6.1.1 Asset Studio에서 아이콘을 변경한다 .................................................................. 230 6.1.2 아이콘 이미지 크기 ........................................................................................... 232

6.2 앱 본체의 디자인을 변경한다 ........................................................................................ 234 6.3 메시지 배경을 말풍선처럼 만들자 .................................................................................. 236 6.4 간격을 설정한다 ......................................................................................................... 243 6.5 글자색을 변경한다 ...................................................................................................... 250 6.6 태블릿에서 실행할 때 디자인을 확인한다 ........................................................................ 255 6.7 화면 폭에 따라 레이아웃을 전환한다 .............................................................................. 258 6.7.1 태블릿에만 적용되는 여백을 해제한다 ................................................................... 261

6.8 한국어와 영어를 지원한다 ............................................................................................ 262 6.8.1 코드상에서 언어 설정을 임시로 변경한다 ............................................................... 274

6.9 음성 입력 기능을 추가한다 ........................................................................................... 275

10


CHAPTER

7 벽돌깨기 게임을 만들자 7.1 도형을 그린다 ............................................................................................................ 296 7.2 조작에 따라 도형을 바꿔 그린다 .................................................................................... 310 7.2.1

개요

Thread ................................................................................................... 310

7.3 복수의 블록을 추가한다 ............................................................................................... 322 7.3.1 블록을 나타내는 클래스를 만든다 ......................................................................... 322

7.4 탭에 반응해서 패드를 움직인다 ..................................................................................... 335 7.5 공을 움직인다 ............................................................................................................ 347 7.6 공이 패드와 블록에 닿았을 때의 처리를 추가한다 ............................................................. 359 7.6.1 어떤 처리를 추가하고 싶은지 검토한다 .................................................................. 359

7.7 클리어 화면을 만든다 .................................................................................................. 375 7.8 가로 화면 모드를 지원한다 ........................................................................................... 390 7.8.1 화면 재작성에 대비해 값을 저장한다 ..................................................................... 390

7.9 효과음을 추가한다 ...................................................................................................... 398 7.10 진동시킨다 .............................................................................................................. 406 7.11 설정 화면을 만든다 ................................................................................................... 407 7.12 값을 저장한다 .......................................................................................................... 420 7.12.1 하이스코어를 기록한다 ..................................................................................... 420

7.13 다른 앱과 연계한다 ................................................................................................... 426

11


CONTENTS

CHAPTER

8 앱을 공개하자 8.1 서명된 설치 패키지를 만든다 ........................................................................................ 434 8.1.1 서명이 필요한 이유 ............................................................................................ 434 8.1.2 서명을 만든다 ................................................................................................... 436

8.2 Google Play에서 공개한다 ......................................................................................... 442 8.2.1 등록할 때 주의할 점 . ......................................................................................... 442 8.2.2 Google Play에서 앱 공개하기 ............................................................................ 445

8.3 버전 번호를 관리한다 .................................................................................................. 462 8.3.1 버전 번호를 붙인다 ........................................................................................... 462

8.4 공개된 앱의 정보를 분석한다 ........................................................................................ 464 8.4.1 앱의 정보를 분석한다 ......................................................................................... 464

APPENDIX 남은 과제

12

부록 A. 예제 앱의 기능을 추가한다 ......................................................................................

468

부록 B. 학습하다가 막혔을 때 .............................................................................................

471

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

477


CHAPTER

1

앱 개발을 시작하기 전에

1.1 프로그래밍의 즐거움 1.2 프로그래밍으로 변하는 세계 1.3 안드로이드 앱의 구조

1장 앱 개발을 시작하기 전에

13


1.1 프로그래밍의 즐거움 1.1.1 지금까지의 프로그래밍 입문 지금까지의 프로그래밍 입문서는 대부분 컴퓨터용 프로그램 개발을 다루고 있습니다. 컴퓨터 프로그램은 프로그래밍하기도 편리하고 개발 환경과 실행 환경이 같다는 장점도 있어 프로그 래밍 진입 벽이 낮습니다. 그렇지만 컴퓨터용 애플리케이션은 다른 사람에게 배포하기가 어려 워 실력이 얼마나 성장했는지 실감하기 어려울 뿐만 아니라 동기가 지속되지 않는다는 문제점 이 있습니다. ▼ 지금까지의 프로그래밍 학습

만든다

사용한다

1.1.2 앞으로의 프로그래밍 입문 요즘은 누구나 스마트폰을 가지고 다닙니다. 안드로이드 스마트폰용 앱은 스마트폰에 설치가 가능하므로 가지고 다니면서 다른 사람에게 쉽게 보여줄 수 있을 뿐만 아니라, 다른 사람의 안 드로이드 스마트폰에 자신이 만든 앱을 설치해서 사용하게 할 수도 있습니다. 그렇기에 자신이 만든 안드로이드 앱을 다른 사람에게 보여주면서 학습한다면 더 즐겁게 프로 그래밍을 배울 수 있을 것입니다. 안드로이드 스마트폰은 오픈 플랫폼이면서 앱 개발 환경도 충실하므로, 처음 학습하기에 최적 입니다. 앱을 만들어 자신과 친구들의 안드로이드 스마트폰에서 무료로 실행할 수 있습니다.

14

초보자를 위한 안드로이드 스튜디오


이 책에서는 안드로이드 앱 프로그래밍을 학습하지만, 이 책에서 배운 내용은 안드로이드 앱 외에 프로그램 개발에도 도움을 줄 것입니다. ▼ 이제부터의 프로그래밍 학습

만든다

보여준다 사용한다

1.1.3 이 책을 읽는 방법 이 책에서는 완성된 앱을 한 번에 만들지 않고 조금씩 개량하면서 앱을 성장시킵니다. 그래서 조금씩 변경하는 내용을 확인해 봄으로써 어떤 일이 일어나는지 1대1로 알 수 있게 구성했습 니다. 앱을 실행하고 프로그래밍한 내용을 이해했다면, 다음은 자신의 스타일로 개량해서 무슨 일이 일어나는지를 살펴봅니다. 결과를 예측하고 프로그래밍해서 결과를 확인하는 과정을 통해 프 로그래밍을 더 깊이 이해할 수 있습니다.

1.1.4 실패를 즐기자 프로그래밍을 하다 보면 몇 번씩 실패도 하고 이해할 수 없는 오류도 만나게 되지만, 이를 극복 하면서 프로그래밍에 익숙해지게 됩니다. 프로그래밍의 매력 중 하나는 실패해도 몇 번이고 다 시 시도할 수 있다는 점입니다. 생각대로 잘 안 되더라도 초조해하지 말고 하나씩 확인해보세 요. 프로그램의 문제점을 찾는 방법은 4장에서 자세히 설명하겠습니다.

1장 앱 개발을 시작하기 전에

15


1.1.5 하다가 막히면 아무리 해도 어떻게 해야 할지 생각이 안 날 때가 있습니다. 그럴 경우에는 일단 프로그래밍에 서 손을 떼고 다음 날 도전해보세요. 산책하거나 잠을 자거나 프로그래밍과 무관한 일을 해보 는 것도 매우 효과적입니다. 두뇌 리셋과 충분한 수면은 문제 해결에 가장 좋은 수단입니다. 소스 코드의 의미를 이해할 수 없을 경우에는 우선 예제를 그대로 따라 해본 다음에 나름대로 변경해보십시오. 자기만의 생각으로 변경하는 작업을 통해 프로그램을 더 깊이 이해할 수 있 습니다.

1.1.6 다음 단계로 나아가려면 이 책에서는 프로그래밍의 기본적인 지식과 함께 즐거움을 전달하는 것을 최우선으로 하므로, 안드로이드 스마트폰 특유의 기법과 고급 기술에 관해서는 자세하게 설명하지 않습니다. 다만 부록에서 그에 대한 내용을 조금 소개합니다.

1.1.7 이 책에서 필요한 것 이 책에서는 개발에 사용할 컴퓨터로서 윈도우 7 이상이 설치된 윈도우 PC나 Mac OS X 10.7 이상이 설치된 맥 컴퓨터를 사용합니다. 컴퓨터 성능이 반드시 최신 사양일 필요는 없지만, 빠 를수록 쾌적하게 작업할 수 있겠지요. 그리고 인터넷 연결도 필요합니다(휴대전화의 테더링 서비스를 사용하는 경우라면 데이터 사용량에 주의하십시오). 실행할 단말기로는 Android

4.0.3 이상이 설치된 스마트폰 혹은 태블릿을 준비하면 됩니다. 아마 최근 몇 년 사이에 발매 된 스마트폰이라면 대부분 문제없을 거로 생각합니다. 이미 스마트폰이 있다면 그걸 사용하면 되고, 만약 실습을 위해 새로 살 경우는 Wi-Fi 모델 태블릿이나 통신사에 의존하지 않는 심프 리(SIM free ) 단말을 사면 새로 개통하지 않고도 기기만 사용할 수 있으므로 편리합니다. 그 럼, 이 책과 함께 프로그래밍이라는 새로운 세계로 뛰어들어봅시다. 알림 : 이미 프로그래밍 경험이 있다면 1.2 절을 건너뛰고 1.3 절을 읽기 바랍니다.

16

초보자를 위한 안드로이드 스튜디오


1.2 프로그래밍으로 변하는 세계 1.2.1 올바른 사용법은 스스로 결정한다 많은 사람에게 스마트폰이나 컴퓨터는 정해진 순서대로 바르게 사용해야만 하는 도구입니다. 학교에 도입된 컴퓨터 교육에서도 대부분 잘못된 결과가 나오지 않도록 올바른 방법을 가르치 지요. 이는 컴퓨터가 결정한 방식에 인간이 따라야 한다는 사고입니다. 프로그래밍에는 ‘올바른 작동 방법’은 있지만 ‘올바른 사용 방법’이란 게 없습니다. 즉, 컴퓨터를 어떻게 움직일지는 프로그래밍하는 사람에게 맡겨집니다. 그래서 프로그래밍을 학습하면 컴퓨 터를 자유롭게 다룰 수 있게 됩니다. 사람이라면 바보스럽다고 절대로 해주지 않을 것 같은 명 령이거나, 지금 막 머릿속에 떠오른 성공 여부를 알 수 없는 아이디어라도 컴퓨터는 프로그래 밍한 대로 충실히 움직입니다. 무엇이 바르고 무엇이 잘못됐는지 결정하는 것은 바로 프로그래밍하는 사람입니다. 결국, 사람 이 정한 방식에 컴퓨터가 따라오게 하는 것입니다. 프로그래밍을 배울 때는 얼마든지 틀려도 됩니다. 설사 틀리더라도 곧바로 수정할 수 있으니까 요. 어느 부분을 틀리면 결과가 어떻게 변하는지 알게 되는 것도 프로그래밍을 학습하는 데 큰 가치가 있습니다. 수도 없이 고치는 중에 프로그래밍 능력이 향상되면, 다른 사람이 만든 앱이 이상한 동작을 할 때도 뭐가 잘못됐는지 짐작할 수 있게 됩니다. ▼ 프로그래밍을 모르면 컴퓨터가 시키는 대로

조심해서 똑바로 조작할게요

올바른 순서

1장 앱 개발을 시작하기 전에

17


▼ 프로그래밍할 수 있으면 컴퓨터를 도구로서 사용할 수 있다

말한 대로 동작해라

넵!

1.2.2 프로그래밍으로 컴퓨터에 대한 인식이 바뀐다 프로그래밍하는 사람은 대부분 컴퓨터를 그다지 어려워하지 않습니다. 그 이유는 컴퓨터를 잘 아는 사람이 프로그래밍을 시작하기 때문이 아니라, 프로그래밍 경험을 통해 컴퓨터를 사용하 는 감각이 몸에 익어서 어렵지 않게 느껴지기 때문입니다. ▼ 프로그래밍으로 변하는 인식

이건 만든 사람이 실수한 거네

내가 뭘 잘못했나... 오류 발생 !

프로그래밍을 해본 적이 없는 사람

프로그래머

1.2.3 자신이 만든 앱을 다른 사람에게 배포한다는 것 프로그래밍의 또 한 가지 매력은 완성된 앱을 여러 사람이 함께 즐길 수 있는 점입니다. 복제가 어려운 물건과 달리, 앱은 한 번 만들어 놓으면 인터넷에서 많은 사람에게 쉽게 배포할 수 있습

18

초보자를 위한 안드로이드 스튜디오


니다. 예제 앱이 완성되면 다음은 고유한 아이디어를 앱에 추가해보세요. 아이디어를 내서 앱 을 통해 자신의 아이디어를 모두에게 보여줍니다. 프로그래밍의 참맛은 거기에 있지요. 누구나 스마트폰을 갖게 된 지금은 언제 어디서나 쉽게 많은 사람에게 자신의 앱을 시험해보게 할 수 있습니다. 프로그래밍을 즐기기에 매우 좋은 시대입니다.

1.2.4 이 책의 예제 이 책의 예제는 보기 좋고 화려한 앱이 아닌 가능한 한 단순한 앱을 소재로 했습니다. 복잡하고 화려한 앱도 그 바탕은 단순합니다. 완성된 앱에 좀 더 다양한 기능을 추가해서 자신의 앱을 만 들어보세요. 이 책을 다 읽고 나면, 프로그래밍의 기초뿐만 아니라 앱을 개조하여 자신의 아이 디어를 보탠 새로운 앱을 만드는 기술도 익히게 될 것입니다.

1.3 안드로이드 앱의 구조 1.3.1 안드로이드 앱에서 사용하는 기술 안드로이드 앱의 전체적인 구조와 프로그래밍의 흐름을 살펴봅시다. 자세한 내용은 2장과 3장 에서 차례대로 설명하므로, 지금은 이미지만 대강 파악해도 상관 없습니다. 이 책을 읽다가 전 체적인 모습을 확인하고 싶을 때 다시 한 번 읽어보면 됩니다. 안드로이드에서는 앱을 만들어 다양한 일을 할 수 있습니다. 안드로이드 앱은 자유도가 매우 높아서 아이디어에 따라 다양한 앱을 만들 수 있습니다. 프로그래머는 정해진 서식대로 컴퓨터에 시키고 싶은 일을 지시합니다. 이 정해진 서식을 ‘프 로그래밍 언어’라고 합니다. 안드로이드가 등장하기 이전의 휴대전화는 각각 다른 프로그래밍 언어와 독자적인 개발 환경이 있었고 다른 장소에서 배포됐습니다. 안드로이드에서는 프로그 래밍 언어로 자바를 사용합니다. 자바는 매우 인기 있는 프로그래밍 언어 중 하나로, 안드로이 드뿐만 아니라 다양한 환경에서 사용됩니다. 앱을 만들 때는 자바 소스 파일을 비롯해 각종 리소스 파일이나 manifest 파일, gradle 파일

1장 앱 개발을 시작하기 전에

19


등을 사용합니다. 리소스 파일은 화면 레이아웃이나 이미지 파일, 음성 파일 등을 포함합니다. 리소스 파일은 대부분 xml 형식으로 기술되며, 자바 프로그램에서 읽어들여 사용합니다. ●●

manifest 파일 : 프로그램 이름과 사용할 기능 등 외부에 공개할 정보를 xml로 나열합니다.

●●

gradle 파일 : 프로그램을 실행 방법을 지정하거나 라이브러리라는 편리한 기능을 이용할 때 사용합니다.

1.3.2 앱을 만드는 데 필요한 프로그램 안드로이드 앱은 이처럼 다양한 파일을 조합해서 만들어집니다. 따라서 개발하다 보면 관련 파 일이 늘어나고 점점 관리하기가 어려워지지요. 이럴 때 안드로이드 스튜디오를 사용하면 아주 편리합니다. 안드로이드 스튜디오는 많은 파일을 통합해서 관리하고 바탕이 되는 코드를 자동 으로 생성해주며, 프로그램의 문제점을 찾는 데에도 도움을 줍니다. 이 책에서도 안드로이드 스튜디오로 앱을 개발하는 과정을 설명합니다. 안드로이드 스튜디오처럼 프로그램 개발을 통합해서 지원하는 환경을 ‘통합 개발 환경Integrated Development Environment, IDE

’이라고 합니다.

이전에는 안드로이드 앱을 개발하려면 이클립스Eclipse라는 IDE에 안드로이드 개발 기능을 추가 해서 사용했습니다. 안드로이드 스튜디오는 인텔리제이IntelliJ라는 IDE를 기반으로 안드로이드 개발에 특화해서 만들어졌고, 2013년 구글이 주최한 Google I/O 컨퍼런스에서 프리뷰 형태 로 발표되었습니다.

2014년 Google I/O에서 베타 버전이, 같은 해 12월에는 정식 버전이 공개되었습니다. 그에 따라 이클립스 버전 안드로이드 개발 환경은 향후 업데이트가 중단될 예정입니다. 안드로이드 스튜디오에서는 이클립스보다 더 강력한 코드 완성 기능 등이 추가되어 프로그래 밍하기가 더욱 편리해졌습니다.

20

초보자를 위한 안드로이드 스튜디오


▼ 안드로이드 스튜디오 화면

1.3.3 앱 실행 방법 자바와 XML, 이미지 데이터 등 여러 파일로 만들어진 앱은 안드로이드 스튜디오에서 APK라 는 하나의 파일로 정리됩니다. 이 APK 파일을 스마트폰에 전송해서 설치함으로써 스마트폰에 서 프로그램을 동작시킬 수 있습니다. 앱 개발 중에는 스마트폰에 전송 및 설치를 자주하게 되므로, PC와 스마트폰을 USB 케이블로 연결해두고 APK 파일을 전송합니다. 안드로이드 스튜디오에서 직접 앱을 스마트폰에 설치할 수 있습니다.

USB 케이블로 스마트폰에 앱을 설치하는 방법은 2장에서 자세히 설명합니다.

1장 앱 개발을 시작하기 전에

21


▼ 앱을 APK라는 파일 하나로 묶어 스마트폰에 전송 안드로이드 스튜디오

APK

자바

XML

이미지

1.3.4 프로그램의 오류를 수정한다 프로그램 개발이 언제나 제대로 되는 것은 아닙니다. 원인을 알 수 없는 문제로 프로그램이 실 행되지 않거나 생각했던 것과는 다른 일이 발생하는 것은 아주 흔한 일입니다. 그럴 때는 원인을 찾아내서 문제를 해결해야 하는데, 프로그램의 문제를 수정하는 작업을 ‘디버깅’이라고 합니다. 안드로이드 스튜디오에는 디버깅을 도와주는 편리한 기능이 있습니다. 디버깅하는 방법은 4장 에서 자세히 설명합니다.

1.3.5 더 많은 사람이 사용하게 한다 멋진 앱이 완성됐다면 더 많은 사람이 사용할 수 있게끔 Google Play라는 안드로이드 앱 배 포용 사이트를 이용할 수 있습니다. 개발자로 등록할 때 처음에는 25달러가 필요하며, 연회비 및 등록비는 필요하지 않습니다. Google Play에 등록한 앱은 단지 배포만 되는 게 아니라, 사 용자의 리뷰를 받거나 설치된 수를 시계열로 확인할 수 있습니다.

Google Play에 유료 앱을 등록하거나 광고가 포함된 앱을 등록하여 많은 돈을 벌고 있는 사 람도 있습니다.

Google Play에 등록하는 방법은 8장에서 자세히 설명합니다.

22

초보자를 위한 안드로이드 스튜디오


CHAPTER

2

개발 환경 설정

2.1 프로그램을 만들 준비를 하자 (윈도우) 2.2 프로그램을 만들 준비를 하자 (Mac) 2.3 안드로이드 스튜디오를 설정하자 (윈도우/Mac) 2.4 스마트폰을 설정하자

1장 앱 개발을 시작하기 전에

23


2.1 프로그램을 만들 준비를 하자 (윈도우) | 이 절의 핵심 내용 | ●●

안드로이드 앱을 개발하기에 앞서 JDK와 안드로이드 스튜디오를 설치해야 한다.

이 절에서는 윈도우 개발 환경 구축을 설명합니다. Mac을 사용하는 분은 2.2 절을 읽어주세요.

2.1.1 JDK 설치하기 제일 먼저 JDK를 다운로드합니다. ① 다음 URL에 접속하여 JDK를 다운로드합니다. ●●

[URL] http ://www.oracle.com/technetwork/java/javase/downloads

JDK 아래에 있는 [Download]를 클릭하면 다운로드 페이지로 이동합니다. ▼ JDK 다운로드 페이지

24

초보자를 위한 안드로이드 스튜디오


② JDK 를 다운로드하려면 이용 계약에 동의해야 합니다. 이용 계약 내용을 확인하려면 [Oracle Binary Code License Agreement for Java SE]를 클릭합니다. ‘Accept License

Agreement’에 체크하면 이용 규약에 동의한 것으로 보고 JDK를 다운로드할 수 있습니다. ▼ 이용 규약 동의

③ 이용하는 윈도우가 32비트인 경우는 윈도우 x86, 64비트인 경우는 윈도우 x64를 선택합니 다. 사용 중인 윈도우가 몇 비트인지 모를 때는 [제어판 → 시스템 및 보안 → 시스템]에서 확인 하세요. ④ 해당하는 운영체제의 Download에 기재된 링크를 클릭하여 다운로드합니다. 파일 이름에 들어간 8u60은 JDK 버전을 나타냅니다. JDK는 버전이 자주 업데이트되므로, 이 값은 그때그 때 달라집니다. 맨 끝에 붙은 i586은 32비트, x64는 64비트 버전임을 나타냅니다. ▼ JDK 다운로드

2장 개발 환경 설정

25


⑤ 다운로드한 파일을 실행하여 설치합니다. 다운로드한 인스톨러를 실행하면 JDK가 시작됩니 다. “이 앱이 PC를 변경할 수 있도록 허용하시겠습니까?”라고 표시될 경우 [예]를 클릭합니다. ⑥ ‘Java SE Development Kit 8 Update 60 (64-bit )-Setup’ 창이 열리면 [Next]를 클릭 합니다. ▼ 설치 마법사 시작

⑦ 설치할 기능을 옵션 목록에서 선택합니다. 아이콘이 표시되면 설치 옵션을 지정합니다. 설 치할 장소를 바꾸려면 [Change...] 버튼을 클릭합니다. 설치한 장소는 이 뒤의 작업에 필요하 므로 반드시 메모해둡니다. 여기서는 변경하지 않고 그대로 [Next]를 클릭하여 설치를 시작합 니다.

26

초보자를 위한 안드로이드 스튜디오


▼ 설치 옵션 지정

⑧ 대상 폴더가 표시되면 [다음(N )]을 클릭합니다. ▼ 대상 폴더 지정

2장 개발 환경 설정

27


⑨ 잠시 후 설치가 끝나면 [Close] 버튼을 클릭합니다. ▼ 설치 완료

X86이란? 32비트 버전을 가리켜 x86으로 쓰거나 i586으로 쓰는 게 어색할지도 모르지만, 이는 인텔에서 예전에 발매한 CPU 이름에서 유래합니다. 8086, 80186, 80286, 80386, 80485, i486처럼 마 지막이 86으로 끝나는 이름으로 반복되어, 그 CPU들의 명령 세트를 x86으로 부르게 되었습 니다. 한편으로 AMD에서 x86을 64비트로 확장하고 x64라는 이름을 붙였습니다. 이에 따라 기존의

32비트를 x86, 64비트를 x64로 구분하게 되었습니다(좁은 의미에서의 x86 ). 하지만 x64는 x86과 호환성이 있으므로 x64를 지원하는 Core 시리즈 등도 x86 계열 CPU의 일종이라고 할 수 있지요(넓은 의미에서의 x86 ). x64 CPU가 드물던 시절에는 x64 CPU와 구분하고자 x86을 32비트를 가리키는 좁은 의미로 사용하는 일이 많았지만, 지금은 윈도우든

Mac이든 대부분의 컴퓨터가 x64를 사용하므로 32비트와 구분하는 일은 줄었습니다. 반면에 스마트폰이나 태블릿에는 x86도 x64도 아닌 저전력에 적합한 ARM 계열 CPU가 널리 이용됩니다. 게다가 최근에는 넓은 의미의 x86에 해당하는 안드로이드 단말도 늘어나고 있어, 넓은 의미의 x86과 ARM을 비교할 일이 많아졌습니다. 이에 따라 ARM 계열과 구분하고자 x64 를 포함한 넓은 의미로 x86을 사용하는 경우가 늘었습니다. 이처럼 x86의 범위는 비교하는 대

28

초보자를 위한 안드로이드 스튜디오


CHAPTER

3

처음 만드는 안드로이드 프로그램

3.1 Hello World!를 만들자 3.2 표시할 문자를 변경한다 3.3 덧셈 결과를 표시한다 3.4 3의 배수에만 특별한 문구를 표시한다 3.5 1~100까지 더한 값을 구한다 3.6 같은 처리를 모아보자 3.7 프로그래밍의 오류 발견 및 수정

3장 처음 만드는 안드로이드 프로그램

55


3.1 Hello World!를 만들자 | 이 절의 핵심 내용 | ●●

앱을 만들려면 가장 먼저 안드로이드 스튜디오에서 새로운 프로젝트를 만들어야 한다.

●●

앱을 실행하려면 안드로이드 스튜디오의 [Run] > [Run ‘App’]을 선택한다.

처음에는 간단한 프로그램부터 만들어보겠습니다. 이번에 만들 것은 안드로이드 스튜디오에서 자동으로 만들어주는 프로그램으로, 단순히 “Hello World!”라고 화면에 표시하도록 합니다. 여러분은 아무것도 입력할 필요가 없습니다. 안드로이드 앱을 만들 때는 다음 단계를 밟습니다. 1 안드로이드 스튜디오에서 새로운 프로젝트를 만든다. 2 대상 디바이스와 액티비티(앱의 화면) 설정을 한다. 3 만들어진 프로젝트 안의 파일을 수정하거나 추가한다. 4 스마트폰 또는 에뮬레이터로 앱을 실행해서 확인한다.

3.1 절에서는 1, 2, 4단계의 순서로 안드로이드 스튜디오가 자동으로 만들어준 앱을 시험해보 고, 3.2 절부터는 3단계에 해당하는 ‘수정 및 추가’ 방법에 대해 알아보겠습니다.

1. 안드로이드 스튜디오를 실행한다 안드로이드 스튜디오를 실행해주세요. ‘Welcome to Android Studio’ 창이 표시되면 ‘Start

a new Android Studio project’를 선택합니다. 만약 ‘Welcome to Android Studio’ 창이 표시되지 않고 프로젝트가 열린 상태라면 메뉴 바에서 [File] > [New Project]를 선택합니다.

56

초보자를 위한 안드로이드 스튜디오


▼ Welcome to Android Studio

2. New Project를 설정한다 ‘Configure your new project’가 표시되면 다음처럼 설정합니다. 설정값

설정명

Application name

First Application

Company Domain

study.kr

Package name은 앱을 식별하는 이름인데, Company Domain을 도트(.)로 끊어 역순으로 나열한 다음 Application name에서 스페이스를 빼고 소문자로 변경된 이름으로 자동 생성됩 니다.

Package name을 바탕으로 Application ID가 설정됩니다. Application ID는 앱을 고 유하게 특정하는 ID입니다. 복수의 앱에서는 같은 Application ID를 사용할 수 없으며,

Application ID를 바꾸면 다른 앱으로 취급됩니다. 장래에 불특정 다수에게 공개하려는 앱은 Company Domain을 자신이 소유한 도메인으로 해야 하는 등 다른 개발자의 Application ID와 겹치지 않아야 합니다.

3장 처음 만드는 안드로이드 프로그램

57


[Project location]에는 저장할 장소를 지정합니다. 보통은 신경쓸 필요가 없지만, 원하는 장 소로 설정해도 상관없습니다. 단, 나중에 프로젝트를 열어야 하므로 지정한 장소를 잊지 않도 록 주의하세요. 설정이 끝나면 [Next]를 클릭합니다. 주의

Project Location에 한글이 들어가지 않게 해주세요.

▼ Configure your new project

3. 타깃 디바이스를 설정한다 Select the form factors your app will run on 값은 특별히 변경할 필요가 없습니다. 기 본적으로 ‘Phone and Tablet’에 체크되어 있고, [Minimum SDK]에는 ‘API 15: Android

4.0.3 (IceCreamSandwich )’가 선택된 상태입니다. 여기서는 어떤 디바이스용 앱을 만들지를 지정합니다. 이번에는 Android 4.0.3 이상인 스마 트폰과 태블릿에서 동작하는 애플리케이션을 만든다는 의미입니다. [Minimum SDK] 값이 높을수록 더 많은 기능을 사용할 수 있고 구형 디바이스와의 호환성을 신경 쓰지 않아도 되지

58

초보자를 위한 안드로이드 스튜디오


만, 대신 동작하는 스마트폰의 수는 줄어듭니다. 설정이 끝나면 [Next]를 클릭합니다. ▼ Target Android Device

4. 액티비티 모바일을 설정한다 Add an activity to Mobile 값도 특별히 변경할 필요가 없습니다. 여기서는 ‘Empty Activity’를 선택합니다. 액티비티(Activity )란 앱의 화면을 의미합니다. Blank Activity와 Empty Activity 모두 내 용이 들어 있지 않은 빈 Activity지만, Blank Activity에는 버튼과 이벤트 처리 등이 포함됩니 다. 이번에는 처음 만드는 앱이므로 가능한 한 단순하게 하고자 ‘Empty Activity’를 선택하고 [Next]를 클릭합니다.

3장 처음 만드는 안드로이드 프로그램

59


▼ Add an activity to Mobile

다양한 액티비티 액티비티에는 다양한 종류가 있습니다. 예를 들어 이번에 사용하는 ‘Empty Activity’는 화 면 자체에 아무것도 설정되지 않은 액티비티고, 전체 화면 앱을 만들 때 사용하는 ‘Fullscreen

Activity’, 미리 어느 정도 내용이 만들어진 ‘Google Maps Activity’, 로그인 인증용 ‘Login Activity’ 등이 있습니다. 단, 액티비티 자체의 내용은 사용자가 만들어야 하며, UI의 바탕이 되 는 틀만 만들어준다고 이해해둡시다.

5. 커스터마이즈 액티비티를 설정한다 Customize the Activity 값도 특별히 변경할 필요는 없습니다. 각 항목은 다음을 기본값으로 설정합니다. 설정값

설정명

Activity Name

Main Activity

Layout Name

activity_main

여기서는 액티비티 이름과 액티비티에서 사용할 리소스 파일 이름을 설정합니다. [Activity

60

초보자를 위한 안드로이드 스튜디오


CHAPTER

4

디버깅을 해보자

4.1 버그란? 4.2 실행할 수 없는 버그 4.3 실행 중에 일어나는 버그 4.4 변수의 내용을 추적한다 4.5 로그를 가져온다 4.6 예외 처리 4.7 메모리와 CPU 사용률을 확인한다

4장 디버깅을 해보자 103


4.1 버그란? | 이 절의 핵심 내용 | ●●

프로그램의 오류를 ‘버그’라고 부른다.

●●

프로그램에 버그가 없는지 확인하는 것을 ‘테스트’라고 하며, 버그를 고쳐서 프로그램이 바르게 동작하도록 만 드는 작업을 ‘디버깅’이라고 한다.

●●

버그와 비슷한 것으로 ‘오류’와 ‘예외’가 있다.

4.1.1 버그란? 버그가 없는 프로그램은 아마도 없다고 할 정도로 프로그래밍에서 피할 수 없는 것이 버그입니 다. 버그란 프로그램의 오류를 말하며, 버그가 있으면 프로그램이 동작하지 않거나 예상과 다 르게 동작합니다. 프로그램에 버그가 있는지 확인하는 작업을 ‘테스트’라고 하며, 버그를 고쳐 서 프로그램을 제대로 동작하게 만드는 작업을 ‘디버깅’이라고 합니다. 안드로이드 스튜디오에 서는 테스트와 디버깅을 위한 기능이 많이 있는데, 이처럼 디버깅을 지원하는 도구를 ‘디버거’ 라고 합니다. 버그에는 다양한 종류가 있습니다. 프로그래밍 중에 발견되는 버그, 실행하자마자 나타나는 버 그, 원인을 알 수 없는 버그, 버그의 존재 자체를 알아채기 어려운 숨은 버그 등이 있습니다. 철 자 오류나 잘못된 처리 방식으로 버그가 생기기도 하지만, 필요한 검사가 빠지거나 반대로 처 리가 너무 많은 것도 버그의 원인이 됩니다. 테스트 및 디버깅은 해설서가 많이 나와 있는 만큼 깊이가 있지만, 여기서는 기본적인 디버깅 방법을 설명하겠습니다. 버그와 자주 혼동하는 것이 오류와 예외입니다. 오류란 처리를 계속할 수 없는 뭔가가 잘못되 어 있음을 의미합니다. 예를 들어 숫자를 넣어야 하는 곳에 문자를 넣거나 파일을 저장하고 싶 은데 공간이 없는 경우 등의 오류입니다. 오류와 버그는 모두 제대로 작동하지 않는다는 의미 에서는 같지만, 버그는 프로그래밍 중에 예상할 수 없다는 것이 큰 차이입니다. 즉 발생할 오류 를 예상하고 올바르게 처리할 수 있다면 그것은 버그가 아닙니다.

104 초보자를 위한 안드로이드 스튜디오


예외에 대응하는 방법은 4.6 절 ‘예외 처리’에서 자세히 설명하겠습니다. 예외는 보통의 코드를 지속해서 처리할 수 없는 상태를 말합니다. 문제가 발생한 것을 알았을 때에는 정상 코드를 종 료하고 예외 처리 코드를 시작합니다. 예외로 처리했음에도 해결되지 않을 때는 프로그램을 종 료합니다. 그리고 예외 처리 코드가 실행된 후에는 정상 처리로 다시 돌아옵니다. 그러면 실제로 버그의 발생과 디버깅을 체험하기 위해 새로운 애플리케이션을 만들어봅시다.

1. First Application을 연다 안드로이드 스튜디오를 시작합니다. 만약 3장에서 만든 First Application이 열려있지 않다 면, 메뉴 바에서 [File] > [Open]을 선택하여 First Application을 열어주세요.

2. 새로운 모듈을 만든다 ① 새로운 모듈 ‘DebugApplication’을 만듭니다. [File] > [New Module...]을 선택합니다. ‘New Module’ 창이 표시되면 ‘Phone & Tablet Module’을 선택하고 [Next]를 클릭합니다. ▼ New Module

4장 디버깅을 해보자 105


② ‘Phone & Tablet Module ’ 창이 표시되면 [Application /Library name ]에 ‘Debug Application ’, [Module name ]에 ‘debugapplication ’, [Minmum SDK ]에 ‘API15:Android 4.0.3’을 설정하고 [Next]를 클릭합니다. ▼ Phone and Tablet Module

③ ‘Add an activity to Mobile’ 창이 표시되면 ‘Empty Activity’를 선택하고 [Next]를 클릭 합니다. ▼ Add an activity to Mobile

106 초보자를 위한 안드로이드 스튜디오


④ ‘Customize the Activity’ 창이 표시되면 [Activity Name]에 ‘DebugActivity’, [Layout

Name]에 ‘activity_debug’를 입력하고 [Finish]를 클릭합니다. ▼ Customize the Activity

이제 FirstApplication 안에 이전부터 있던 ‘app’ 아래에 새로 ‘debugapplication’이 추가되 었습니다. 이처럼 Module을 추가해서 Project 안에 복수의 앱을 만들 수 있습니다. ▼ debugapplication 추가

안드로이드 스튜디오에서는 파일을 Project 단위로 엽니다. 같은 Project의 파일은 검토나 비 교하는 데 편리합니다. 이 책에서는 한 권에 걸쳐 하나의 Project에 복수의 Module을 만들어 갑니다. 4장 디버깅을 해보자 107


4.2 실행할 수 없는 버그 | 이 절의 핵심 내용 | ●●

앱을 실행할 수 없는 버그에는 import 부족, 문법 오류, 다른 파일과의 관계, 초기화하지 않는 값 사용 등의 원인이 있다.

●●

안드로이드 스튜디오에서는 앱을 실행하지 않아도 리빌드함으로써 오류를 검사할 수 있다.

●●

실시간 검사를 중지하고 싶을 때는 ‘Power Save Mode’로 설정한다.

여기서는 4.1 절에서 만든 debugappllication 모듈에 여러 가지 버그를 발생시켜보고 그에 대한 대처 방법을 시험해보겠습니다. 우선 원래부터 앱을 실행할 수 없는 버그를 살펴봅시다.

1. 앱이 정상으로 동작하는지 확인한다 메뉴 바에서 [Run] > [Run ‘debugapplication’]을 선택하면 앱이 실행되어 “Hello World!” 가 표시됩니다. 이 단계에서는 정상으로 동작하는 것을 확인할 수 있습니다.

2. DebugActivity.java를 연다 Project에서 [First application] > [debugapplication] > [src] > [java] > [kr.study. debugapplication] > [DebugActivity]를 엽니다. package kr.study.debugapplication; import android.app.Activity; import android.os.Bundle; public class DebugActivity extends Activity { @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_debug); } }

108 초보자를 위한 안드로이드 스튜디오


CHAPTER

5

채팅 앱을 만들자

5.1 화면을 만든다 5.2 버튼을 눌러보자 5.3 입력된 내용에 따라 처리를 바꾼다 5.4 시각을 표시한다 5.5 화면 항목을 프로그램으로 추가한다 5.6 애니메이션을 추가한다

5장 채팅 앱을 만들자 159


5.1 화면을 만든다 | 이 절의 핵심 내용 | ●●

안드로이드 스튜디오에서 화면용 모듈을 만들고 수정해간다.

●●

안드로이드 스튜디오의 [Desing] 탭을 사용해서 시각적으로 편집하고 수정할 수 있다.

●●

안드로이드 스튜디오의 [Text] 탭에서 소스 코드를 편집 및 수정할 수 있다.

5.1.1 대화형 앱을 개발한다 앞에서 앱 개발의 기본적인 흐름과 문제에 직면했을 때 해결하는 방법을 익혔습니다. 이제부터 더 실천적인 앱 개발을 시작해보겠습니다. 지금까지의 앱은 모두 실행한 후에 응답이 돌아왔지 만, 이번에는 사용자 조작에 반응하는 앱을 만듭니다. 사람이 입력한 내용에 컴퓨터가 마치 대 답하듯 동작하는 프로그램을 말이죠!

1. First Application에 새 모듈을 만든다 우선 새로운 모듈을 만듭시다. ① 안드로이드 스튜디오를 시작해서 FirstApplication 프로젝트를 엽니다. 메뉴 바에서 [File] > [New] > [New Module]을 선택합니다. ▼ New Module을 연다

160 초보자를 위한 안드로이드 스튜디오


② ‘New Module’ 창이 표시되면 [Phone & Tablet Module]을 선택하고 [Next]를 클릭합 니다. ▼ New Module

③ ‘Phone & Tablet Module ’ 창이 표시되면 [Application/Library name ]에 ‘Chat

Application ’, [Module name ]에 ‘chatapplication ’, [Minimum SDK ]에 ‘API 15:Android 4.0.3’을 설정하고 [Next]를 클릭합니다. ▼ Phone & Tablet Module

5장 채팅 앱을 만들자 161


④ ‘Add an activity to Mobile’ 창이 표시되면, 이번엔 [Blank Activity]를 선택하고 [Next] 를 클릭합니다. ▼ Add an activity to Mobile

⑤ ‘Customize the Activity’ 창이 표시되면, [Activity Name]에 ‘ChatActivity’, [Layout

Name]에 ‘activity_chat’으로 설정합니다. [Title]에 ‘ChatActivity’, [Menu Resource Name]에 ‘menu_chat’으로 설정된 걸 확인한 후 [Finish]를 클릭합니다. ▼ Customize the Activity

162 초보자를 위한 안드로이드 스튜디오


⑥ FirstApplication 안에 새로운 ‘chatapplication’이 추가되었습니다. ▼ chatapplication 추가

2. 레이아웃 파일을 연다 다음은 화면을 만들겠습니다. Project에서 [chatapplication] > [src] > [main] > [res] > [layout] > content_chat.xml을 엽니다. 레이아웃을 수정할 수 있는 [Design] 탭이 열립니다. ▼ activity_chat.xml

5장 채팅 앱을 만들자 163


3. Design 탭을 연다 만약 Palette에 [Text] 탭이 열려 있다면 [Design] 탭을 클릭합니다. ▼ Design 탭 선택

이곳에는 항목에 ID를 설정할 뿐만 아니라, 레이아웃을 만들 수 있는 다양한 기능이 있습니다. 이번에는 사용자가 입력하는 입력 필드, 내용을 확정하는 버튼, 입력한 내용을 표시하는 텍스 트 필드와 상대편의 응답을 표시하는 새로운 텍스트 필드를 추가합니다. ▼ Design 탭이 열린 상태

164 초보자를 위한 안드로이드 스튜디오


CHAPTER

6

앱을 개량하자

6.1 아이콘을 변경한다 6.2 앱 본체의 디자인을 변경한다 6.3 메시지 배경을 말풍선처럼 만들자 6.4 간격을 설정한다 6.5 글자색을 변경한다 6.6 태블릿에서 실행할 때 디자인을 확인한다 6.7 화면 폭에 따라 레이아웃을 전환한다 6.8 한국어와 영어를 지원한다 6.9 음성 입력 기능을 추가한다

6장 앱을 개량하자 229


6.1 아이콘을 변경한다 | 이 절의 핵심 내용 | ●●

안드로이드 스튜디오에서는 Assets Studio에서 아이콘을 변경할 수 있다.

●●

여러 단말에서 깔끔하게 표시하려면 복수의 이미지 파일을 준비해둔다.

이 장에서는 5장에서 만든 chatapplication을 개량해갑시다.

6.1.1 Asset Studio에서 아이콘을 변경한다 ① 안드로이드 스튜디오에서 아이콘을 만들려면 Project의 chatapplication에서 우클릭하여 [New] > [Image Asset]을 선택합니다. ② Asset Studio가 시작됩니다. Asset Studio에선 앱을 실행하는 아이콘이나 메뉴 아이콘, 알림 아이콘 등을 만들 수 있습니다. ▼ Asset Studio

230 초보자를 위한 안드로이드 스튜디오


앱 실행용 아이콘을 만들기 위해서는 [Asset Type ]을 ‘Launcher Icons ’로 합니다. [Foreground]에서는 아이콘의 소스가 될 이미지를 지정합니다. ‘Image’는 자신이 직접 이미 지를 준비해, 이미지 편집 소프트웨어 등으로 이미 아이콘 이미지를 만들었으면 이 항목을 선 택합니다. ‘Clipart’는 아이콘 이미지가 준비되지 않거나 기본으로 제공되는 모노크롬 이미지를 사용하려면 이 항목을 선택합니다. ‘Text’는 문자를 바탕으로 아이콘을 만듭니다.

Image를 사용할 때는 [Image file]에서 이미지 파일을 지정하세요. 사용할 아이콘 이미지 는 예제 파일 [6.1] > [chatpplication] > [src] > [main] 폴더 아래에 ‘ic_launcher-web.

png’ 이름으로 저장해 두었습니다. 만약 Clipart를 사용할 때는 [Choose] 버튼을 눌러 원하 는 클립아트를 선택합니다. [Trim surrounding blank space]에 체크하면 여백이 잘리고, [Additional padding]을 지정하면 여백을 늘릴 수 있습니다. 따라서 이미지가 너무 클 때는 여백을 주어 원하는 크기로 조정할 수 있습니다. [Foreground scaling]에서 ‘Crop’을 지정하면 밀려나간 부분이 잘리고, ‘Center’를 지정하면 아이콘 크기로 이미지를 축소합니다. [Shape]에서 배경을 지정할 수 있는데, ‘None’은 배경을 추가하지 않고, ‘Square’는 사각형, ‘Circle’은 원형 배경색을 추가합니다. [Background color]는 [Shape]에서 지정한 배경색을 설정합니다. [Foreground color]는 Clipart나 Text의 색을 지정하며, Image를 선택했을 때는 표시되지 않습니다. [Resource name]은 작성할 파일의 파일명을 지정합니다. 이번에는 초깃값으로 설정된 ic_

launcher를 그대로 두고 [Next]를 클릭합니다. ③ 확인 화면에 “Some existing files will be overwritten by this operation. Files

which replace Files which replace existing files are marked red in the preview adove.”라는 메시지가 표시됩니다. 이 메시지는 기본 아이콘의 이미지와 같은 파일명이 같으 므로 대치해도 좋은지 확인하는 메시지입니다. 이번에는 기본 아이콘을 새로운 아이콘으로 변 경할 것이므로 [Finish]를 클릭합니다.

6장 앱을 개량하자 231


▼ 아이콘이 변경됨

6.1.2 아이콘 이미지 크기 아이콘 이미지는 Project의 [chatapplication] > [src] > [main] > [res]에 있는 mipmap-

mdpi 나 mipmap -hdpi 등의 폴더 안에 크기별로 저장되어 있습니다. 런처 아이콘의 mipmap별 크기는 다음과 같습니다. mdpi

48 × 48

hdpi

72 × 72(mdpi의 1.5배)

xhdpi

96 × 96(mdpi의 2배)

xxhdpi

144 × 144(mdpi의 3배)

xxxhdpi

192 × 192(mdpi의 4배)

232 초보자를 위한 안드로이드 스튜디오


▼ 생성된 아이콘 이미지 파일

실행용 아이콘은 폼 화면 등에서 앱을 구별하는 얼굴이면서, 개성을 보여주는 중요한 요소입니 다. 만약 마켓에 등록할 앱을 만든다면 Asset Studio가 아닌 전용 일러스트 소프트웨어를 사 용해 독자적인 아이콘을 만들기를 추천합니다. 직접 아이콘을 만들 때는 폴더별로 정해진 크기의 아이콘을 ‘ic_launcher.png’라는 이름으로 덮어쓰기로 저장합니다. 여러 크기의 이미지를 준비하는 이유는 픽셀 크기와 관련이 있습니다. 스마트폰은 더 세밀하고 아름다운 화면을 재현할 수 있도록 픽셀의 크기가 매년 작아지고 있 습니다. 초기 안드로이드 스마트폰은 1픽셀의 크기가 1/160인치 정도였지만, Nexus6에서는

1/493인치까지 작아졌습니다. 만약 같은 이미지를 그대로 사용한다면 Nexus6에서는 더욱 작 게 표시될 것입니다. ▼ 같은 이미지를 HT-03A와 Nexus6에서 표시했을 때의 크기 비교

6장 앱을 개량하자 233


그래서 다른 크기의 이미지를 준비해서 폴더 이름으로 구분해 저장해두고, 안드로이드에서 단말 의 픽셀 크기와 화면에 표시할 크기에 따라 적절한 이미지 파일을 불러와 화면에 표시합니다. 단 말의 상황에 맞게 자동으로 최적의 리소스를 선택하는 메커니즘을 ‘Qualifier’라고 합니다. ▼ 단말의 픽셀 크기와 이미지의 관계

MDPI 단말

XXHDPI 단말

픽셀이 작아서 MDPI 인 이미지를 그대로 표 시하면 작아보인다.

큰 이미지를 사용함으 로써 크기는 같아도 더 매끄럽게 표현된다.

6.2 앱 본체의 디자인을 변경한다 | 이 절의 핵심 내용 | ●●

styles.xml에서 앱의 디자인과 스타일을 설정할 수 있다.

다음으로 앱 본체의 디자인을 변경하겠습니다. 액션 바의 색상을 검정색에서 화려한 색상으 로 바꿔봅시다. 액션 바의 색상은 스타일( colors.xml )에서 변경할 수 있습니다. Project의 [chatapplication] > [src] > [main] > [res] > [values] > colors.xml 파일을 엽니다. <?xml version = "1.0" encoding = "utf-8"?> <resources> <color name = "colorPrimary">#3F51B5</color> <color name = "colorPrimaryDark">#303F9F</color> <color name = "colorAccent">#FF4081</color> </resources>

234 초보자를 위한 안드로이드 스튜디오


CHAPTER

7

벽돌깨기 게임을 만들자

7.1 도형을 그린다 7.2 조작에 따라 도형을 바꿔 그린다 7.3 복수의 블록을 추가한다 7.4 탭에 반응해서 패드를 움직인다 7.5 공을 움직인다 7.6 공이 패드와 블록에 닿았을 때의 처리를 추가한다 7.7 클리어 화면을 만든다 7.8 가로 화면 모드를 지원한다 7.9 효과음을 추가한다 7.10 진동시킨다 7.11 설정 화면을 만든다 7.12 값을 저장한다 7.13 다른 앱과 연계한다

7장 벽돌깨기 게임을 만들자 295


7.1 도형을 그린다 | 이 절의 핵심 내용 | ●●

도형을 그리려면 Canvas를 사용한다.

●●

빠른 그리기 처리가 필요할 때는 원하는 타이밍에 그릴 수 있는 TextureView를 상속한다.

●●

도형의 서식을 변경하려면 Paint를 사용한다.

7장에서는 벽돌깨기 게임을 만들면서 실시간성이 높은 화면을 그리는 방법을 살펴봅니다. 또 한 클래스를 만드는 방법, 화면 회전에 대응하는 방법, 설정 화면 표시나 값을 저장하는 방법 등 더욱 실전적인 앱 개발에 필요한 지식을 살펴봅니다.

6장에서 만들어본 대화형 앱과는 달리 게임에서는 일반적으로 그보다 더 빠른 응답과 매끄러 운 움직임, 그리고 사용자가 조작하지 않아도 자동으로 동작하는 시스템이 필요합니다. 지금까 지는 TextView와 EditView 등 위젯으로 화면을 구성했습니다. 위젯에는 다양한 기능이 들 어 있어 편리하지만, 게임에서 사용하기에는 무겁고 유연성도 부족합니다. 그래서 이번에는 위 젯을 사용하지 않고 화면에 직접 그리기로 합니다.

1. 신규 모듈을 생성한다 ① 우선, 모듈을 새로 만듭시다. Android Studio 를 실행해 Recent Project 에서

FirstApplication 프로젝트를 엽니다. [File] > [New] > [New Module...]을 선택합니다. ‘New Module’ 창이 표시되면 [Phone & Tablet Module]을 선택하고 [Next]를 클릭합니다.

296 초보자를 위한 안드로이드 스튜디오


▼ New Module

② ‘Phone & Tablet Module’ 창이 표시되면 [Application/Library name]에 ‘Game’, [Module name]에 ‘game’, [Minimum SDK]에 ‘API15: Android 4.0.3’을 설정하고 [Next] 를 클릭합니다. ▼ Phone & Tablet Module

7장 벽돌깨기 게임을 만들자 297


③ ‘Add an activity to Mobile’ 창이 열리면 [Blank Activity]를 선택하고 [Next]를 클릭합 니다. ▼ Add an activity to Mobile

④ ‘Customize the Activity’ 창이 열리면 [Activity Name]에 ‘GameActivity’, [Layout

Name]에 ‘activity_game’, [Title]에 ‘GameActivity’, [Menu Resource Name]에 ‘menu_ game’을 입력한 후 [Finish]를 클릭합니다. ▼ Customize the Activity

298 초보자를 위한 안드로이드 스튜디오


⑤ 이번에도 5장을 참고로 사용하지 않는 플로팅 액션 버튼과 관련된 코드와 리소스를 제거해 주세요.

2. GameView 클래스를 생성한다 지금까지는 앱의 레이아웃을 레이아웃 에디터로 만든 다음 레이아웃 파일을 불러왔습니다. 이 번에는 ‘TextureView’라는 빠른 화면 렌더링에 특화한 View를 하나만 사용하고, 그 안에 무 엇을 그리던지 모두 프로그램으로 만들겠습니다. 그러므로 xml로 설정한 레이아웃 파일은 이 제 필요 없습니다. ① Project의 [FirstApplication] > [game] > [src] > [main] > [res] > [layout] 폴더의 ‘activity_game.xml’을 삭제합니다.

‘클래스’에 관하여 Java 언어에서는 오브젝트 단위로 프로그램을 한데 모읍니다. 오브젝트에는 클래스나 인터페이 스 등이 있습니다. 클래스는 상태와 처리할 동작을 가질 수 있습니다. 상태를 보존하는 곳을 ‘변 수’라고 하며, 처리를 호출하는 단위를 ‘메서드’라고 합니다. 클래스는 설계도와 같아서, 실제로 클래스를 사용할 때는 실체가 있는 인스턴스라는 형태로 사용합니다. 인스턴스가 된 클래스는 그 자체를 변수에 저장할 수 있으며, 같은 클래스라도 인스턴스가 다르면 각각 다른 상태가 될 수 있습니다. 인스턴스의 메서드는 각각의 상태에 따라 다른 동작을 할 수 있습니다. 예를 들어 3 장에서 사용한 TextView도 하나의 클래스입니다. TextView textView = (TextView)findViewById(R.id.text);

이 코드는 TextView 클래스의 인스턴스를 가져와 textView라는 변수에 저장합니다. 클래스를 사용하는 장점은 여러 가지가 있지만, 가장 큰 장점은 함께 사용하는 처리나 값을 모아서 몇 번 이고 다시 이용할 수 있다는 점입니다. 예를 들어 TextView에는 표시할 위치나 표시할 문자열, 색상, 크기 등 다양한 상태가 있습니다. 만약, 클래스를 사용하지 않을 때 TextView를 두 개 설 치하려면 상태를 저장할 변수를 TextView마다 준비해야 합니다. 그러나 클래스를 사용하면

TextView의 상태를 유지할 수 있으므로, 단순히 만들고 싶은 수만큼 인스턴스를 생성하면 됩 니다. 또한 TextView를 사용할 때는 그 안에서 어떻게 문자를 표시하는지 복잡한 처리에 신경 쓰지 않고도 표시하고 싶은 문자열을 넣어 setText ( ) 메서드만 호출하면 됩니다. 이처럼 클래스는 처리할 동작과 값을 가지지만, 인터페이스는 외부에서 보이는 메서드의 외형만

7장 벽돌깨기 게임을 만들자 299


을 정의합니다. 안드로이드 앱에서는 인터페이스 오브젝트도 매우 자주 사용합니다. 실제로 복 수의 인스턴스를 사용하는 예는 5장에서, 클래스를 만드는 예는 7장에서 살펴보기로 합니다.

② TextureView 그대로는 아무것도 표시하지 않으므로, TextureView를 상속한 클래스 를 만들고 그래픽을 표시하는 처리를 추가합니다. [FirstApplication] > [game] > [src] > [main] > [java] > [kr.study.game](이하 kr.study.game ) 폴더를 우클릭하여 [New] > [Java Class]를 선택합니다. ③ ‘Create New Class’ 창이 표시되면 [Name]은 ‘GameView’, Kind는 ‘Class’를 확인하고 [OK]를 누릅니다. ▼ Create New Class

④ GameView 에서 TextureView 를 상속하기 위해 public class GameView 뒤로

extended TextureView를 추가합니다. 아직 TextureView가 임포트되지 않았으므로 +

Enter

Alt

키를 눌러 임포트해줍니다. 이제부터는 임포트가 필요하면 이와 같은 방법으로 그때

그때 추가합니다. public class GameView extends TextureView {

⑤ 기본 생성자를 만들 수 없어서 “There is no default constructor available in ‘android.

view.TextureView’”라는 오류가 생깁니다. 오류의 원인은 다음의 [생성자란?]을 참조해주 세요. ▼ 디폴트 생성자 오류

300 초보자를 위한 안드로이드 스튜디오


CHAPTER

8

앱을 공개하자

8.1 서명된 설치 패키지를 만든다 8.2 Google Play에서 공개한다 8.3 버전 번호를 관리한다 8.4 공개된 앱의 정보를 분석한다

7장 벽돌깨기 게임을 만들자 433


8.1 서명된 설치 패키지를 만든다 | 이 절의 핵심 내용 | ●●

앱을 불특정 다수에게 공개하려면 서명이 필요하다.

●●

서명을 하면 제작자가 특정되어, 다른 사람의 앱과 구별된다.

8.1.1 서명이 필요한 이유 불특정 다수의 사람에게 앱을 공개할 때 중요한 것은 서명된 릴리스 모드로 APK 파일을 만드 는 것입니다. 그래야 서명으로 누가 앱을 만들었는지 증명할 수 있습니다. 그렇다면 서명이 왜 중요한지 생각해봅시다. 앱은 설치되면 애플리케이션 ID라는 고유한 키로 관리됩니다. 애플리케이션 ID는 기본적으로 프로젝트를 만들 때 지정한 Company Domain을 역순으로 나열하고 모듈을 만들 때 지정한

Module name이 지정됩니다. 예를 들어 5장에서 만든 채팅 앱은 애플리케이션 ID가 kr.study.chatapplication입니다. 안 드로이드 OS에서는 이 애플리케이션 ID를 바탕으로 같은 애플리케이션인지를 확인합니다.

APK를 설치하면 애플리케이션 ID를 확인해 아직 설치되지 않았으면 새로 설치하고, 이미 설 치되어 있으면 덮어쓰기를 합니다. 덮어쓰기로 설치할 경우에는 원래 애플리케이션과 덮어쓸 애플리케이션이 같은 제작자가 만든 것인지 서명으로 검증합니다. 만약 다른 제작자가 만든 경 우에는 오류가 발생해 덮어쓸 수 없습니다. 애플리케이션 ID에 어떤 이름을 붙일지는 자유기 때문에 마켓에서는 같은 애플리케이션 ID가 중복되지 않도록 하는 검사가 있습니다. 그러나 다른 마켓끼리거나 이메일, 웹 등을 직접 배포할 경우에는 이 검사가 없습니다. 만약 서명에 의한 체크가 없다면 다른 사람의 앱을 덮어쓸 수 있습니다. 이렇게 되면 단순히 다 른 사람의 응용 프로그램을 탈취하는 것뿐만 아니라, 앱에 저장된 데이터를 읽고 쓸 수 있는 문 제가 발생합니다. 예를 들어 소셜 미디어 앱의 애플리케이션 ID 및 비밀번호를 훔치거나 연락 처를 가져오거나 수정할 수 있게 됩니다.

434 초보자를 위한 안드로이드 스튜디오


▼ 패키지 이름은 임의로 정하므로 같은 패키지 이름은 덮어쓰기 된다 만약 서명이 없다면?

덮어써진다

소앱 com.example.foods 강아지 앱 com.example.foods

▼ 같은 서명이 된 앱만 덮어쓰기를 허가한다 만약 서명이 있다면?

개 서명

소 서명

강아지 앱 2 com.example.foods

서명이 같으므로 덮어쓰기가 허가된다.

소앱 com.example.foods

서명이 다르므로 다른 사람의 앱으로 판단해 덮어쓰지 않는다.

그래서 일단 설치된 앱은 같은 제작자가 만든 APK 만 업데이트할 수 있게 해야 합니다.

Google Play에서는 애플리케이션 ID가 유일한지 확인하므로, 공개할 때 이미 다른 사람에 의해 등록된 애플리케이션 ID로는 앱을 등록할 수 없습니다.

8장 앱을 공개하자 435


Google Play가 아닌 스토어에 공개한 경우에는 단말에 이미 같은 애플리케이션 ID 앱이 설 치되어 있을 가능성이 있습니다. 그런 경우에도 서명이 다르므로 오류가 발생해 설치할 수 없 게 됩니다. 그러므로 애플리케이션 ID는 반드시 유일해야 하며, 다른 사람과 겹쳐서는 안 됩니다. 인터넷 URL을 소유한 경우에는 URL을 Company Domain으로 하는 방법을 권합니다. 예를 들어 firespeed.org라는 URL을 소유한 경우, 애플리케이션 ID를 org.firespeed.

chatapplication으로 합니다. URL은 유일하게 관리되므로 자신의 URL을 써도 중복되지 않습니다. 이 책의 예제에서는 Company Domain 을 study .kr 로 했으므로 애플리케이션 ID 는

kr.study.~가 됩니다. 하지만 이 애플리케이션 ID는 이미 다른 사람의 것일 가능성이 높기 때 문에 이대로는 공개할 수 없습니다. 애플리케이션 ID는 프로젝트를 생성할 때만 지정하는 게 아니라 나중에 변경할 수도 있습니다. 애플리케이션 ID를 변경하려면 모듈이 들어 있는 폴더 밑의 build.gradle 파일을 엽니다. applicationId 뒤에 있는 문자열을 변경함으로써 애플리 케이션 ID를 다시 설정할 수 있습니다. applicationId "jp.study.chatapplication"

애플리케이션 ID를 변경하면 스마트폰 상에서는 다른 앱으로 관리되니 주의해야 합니다. 그러 므로 이미 설치된 앱은 덮어써지지 않아 남게 되며, 저장된 데이터는 새로운 앱에서 열 수 없습 니다. 서명된 앱을 만들려면 우선 서명부터 만들어야 하며, 서명은 ‘Key store’라고 불리는 파 일과 패스워드로 관리됩니다.

8.1.2 서명을 만든다 메뉴 바에서 [Build] > [Generate signed APK...]를 선택합니다. Module을 선택하는 화면 이 표시되면 서명할 모듈을 선택하고 [Next]를 클릭합니다. 그러면 ‘Generate Signed APK’ 설정창이 표시됩니다.

436 초보자를 위한 안드로이드 스튜디오


▼ Module 선택

▼ Generate Signed APK

서명된 APK 생성 방법은 Key store와 Key를 새로 만들지, 기존의 Key 저장소에 Key를 추 가할지, 기존의 Key를 사용할지에 따라 달라집니다.

Key store를 새로 생성한다 Key store란 Key를 파일로 저장한 저장소로, 복수의 키를 저장할 수 있습니다. ➊ Key Store 파일을 생성하기 위해 [Create new ...] 버튼을 클릭합니다. ‘New Key Store’ 창이 표시되면 생성할 Key Store에 관한 정보를 입력합니다. 크게 두 가지 정보로 나뉘는데, 위에 있는 [Key store path]와 [Password], [confirm]은 Key Store에 관한 정보며, Key 아래의 값은 Key에 관한 정보입니다. 앱은 Key에 연 결합니다. 앱당 하나의 Key로 연결하는 게 좋겠지요. Key store에는 복수의 키를 저장할 수 있으므로 복수의 앱을 만들었을 때 따로따로 Key store를 관리하지 않아도 됩니다.

8장 앱을 공개하자 437


▼ New Key store

➋ [Key store path]에 새로운 키 저장소의 경로를 지정합니다. 생성한 Key store는 파일을 이동하거나 다른 기 기로 복사할 수도 있으므로, 여기서 지정하는 경로는 단순히 파일을 지금 어디에 저장한다는 의미입니다. 저장 위치와 파일 이름을 지정해주세요. 확장자는 jks지만, Key store에 파일 이름에 관한 제한은 없으므로 원하는 파일 이름으로 할 수 있습니다. 일부러 일반적이지 않은 확장자를 지정하여 데이터 도난 시에 Key store를 찾을 수 없게 방지하는 방법도 있습니다. ➌ [Password]에는 Key stored의 암호를 지정합니다. 이 암호는 Key store 사용을 위한 암호로, 만일 잊어버 리면 관련된 모든 Key를 사용할 수 없게 되므로 아무쪼록 잊지 않게, 유출되지 않게 주의하세요. Key store의 암 호는 나중에 변경할 수 있지만, 이전 Key store와 암호 조합이 유출된 경우에도 유효해지므로 주의해야 합니다. ➍ [Confirm]에는 암호 입력을 맞게 했는지 확인하는 항목으로, Password에서 입력한 내용을 그대로 입력합니 다. 만약 앞에서 입력한 암호와 다르면 오류가 발생하고 Key store를 생성할 수 없습니다.

Key 아래의 값은 Key store에 저장한 Key에 관한 정보를 입력하며, 이 내용은 앱마다 다릅니다. 그러나 실제로는 복수의 앱에서 같은 Key를 사용할 수도 있는데, 그런 경우 관리는 간단하지만 대신 하나의 키가 유출되면 복수의 앱 이 탈취당할 위험이 있습니다. ➎ [Alias]에는 Key를 나타내는 다른 이름을 등록합니다. Key를 사용할 때는 이 Alias를 사용해 어느 Key를 사용 할지 지정하므로 구별하기 쉬운 이름으로 합니다. 일반적으로 앱의 이름을 등록해두는 게 좋겠지요.

438 초보자를 위한 안드로이드 스튜디오


A

PPENDIX

남은 과제

부록 A. 예제 앱의 기능을 추가한다 부록 B. 학습하다가 막혔을 때

부록 남은 과제

467


부록 A. 예제 앱의 기능을 추가한다 | 이 절의 핵심 내용 | ●●

앱을 자기 스타일로 개조함으로써 깊게 이해할 수 있다.

●●

앱이 망가져도 Local History를 사용해 원하는 상태로 되돌릴 수 있다.

●●

완전히 오리지널 앱을 만들 때는 단순하게 바로 개발할 수 있는 앱부터 만든다.

예제 앱에 기능을 추가해봅시다. 어떤 기능을 어떻게 만들지는 자유기 때문에 정답은 없지만 몇 가지 예제를 제시해둡니다.

앱을 개조한다 다음처럼 이번에 소개한 앱을 개조해봅시다. 어떤 기능은 상당히 난도가 높다고 할 수 있지만, 결코 불가능한 개조는 아닙니다. ▼ 채팅 앱 ★☆ 난도

기능

힌트

★☆☆☆☆

질문과 답변의 패턴을 늘린다.

새로운 질문과 답변 조합을 만들어봅시다.

★☆☆☆☆

하나의 질문에 대한 답변 패턴을 늘

운세 판단 요령으로 같은 질문에 다양한 답변을 준비합니다.

린다. ★☆☆☆☆

★★☆☆☆

★★☆☆☆

사용자 입력을 바탕으로 메시지를

‘○○가 뭐지요?’처럼 사용자의 입력 내용에 포함된 말을 넣어

만든다.

봅시다.

요일과 시각에 따라 메시지를 바

아침에는 ‘좋은 아침!’ 밤에는 ‘잘 자요’, 일요일에는 ‘즐거운 주말

꾼다.

이네요’ 등 요일과 시각에 따라 메시지를 바꿔봅시다.

화면 회전을 지원한다.

화면을 회전해도 지금까지 한 대화가 남도록 합니다. 화면 회전 시의 대응은 벽돌깨기를 참고로 하세요.

★★★★☆

말하게 한다.

음성 인식뿐만 아니라 스마트폰의 읽어주는 기능을 사용해봅 시다. 이 방법은 책에서 다루지 않습니다. 힌트는 android. speech.tts.TextToSpeech; 클래스를 사용합니다.

★★★★☆

사용자 입력 내용을 학습하여 자신

사용자가 모르는 단어를 입력한 경우, 그 단어가 어떤 종류인지

의 답변에 추가한다.

사용자에게 질문합니다. 다음부터 같은 단어를 질문하면 그것 이 무엇인지 설명하게 해봅시다. 오랜 시간 조작하면 점점 컴퓨 터가 대화를 학습해갑니다. 대량의 데이터를 보존하는 데이터 베이스를 사용해야 할지도 모릅니다.

468 초보자를 위한 안드로이드 스튜디오


★★★★★

일기예보

인터넷에 연결해 일기예보에 답해봅시다. 네트워크 접속은 시 간이 걸리므로 Thread 처리가 필요할지도 모릅니다. 짧은 스 레드 처리에 더 편리한 AsyncTask라는 것도 있습니다.

▼ 벽돌깨기 난도

기능

힌트

★☆☆☆☆

블록의 배치를 변경한다.

원하는 위치에 블록을 배치해봅시다.

★★☆☆☆

내구성이 있는 블록을 만든다

두 번 부딪혀야 깨지는 블록을 배치해봅시다. 블록은 빨간색으 로 하고 처음 부딪히면 파랑, 두 번째 부딪히면 깨지는 거로 합 니다.

★★☆☆☆

튕기지 않는 블록을 만든다.

부딪히면 블록은 깨지지만 공이 튕기지 않는 블록을 만들어봅시 다. 상속을 사용해야 할지도 모릅니다.

★★☆☆☆

복수의 볼을 지원한다.

공을 여러 개 날려봅시다. mBall2 변수를 만들건가요? 좀 더 좋은 방법이 있을지도 모릅니다.

★★☆☆☆

포물선을 그려본다.

공이 직선으로 날아가지 않고 중력이 느껴지게 산처럼 포물선을 그리게 합시다. 힌트는 포물선을 그리는 것은 아래 방향으로 항 상 속도가 늘어난다는 것입니다.

★★☆☆☆

★★★☆☆

현재 남은 공 수를 스코어에 표시

텍스트를 그릴 때는 drawText()를 사용합니다. 복수의 해상도

한다.

지원을 잊지 않도록 합니다.

이미지를 추가한다.

배경 이미지와 블록 이미지를 바꿔봅시다. 이미지는

drawBitmap 메서드를 사용합니다. 마찬가지로 복수의 해상 도를 지원합니다. 이미지는 drawable에 넣어두는 게 좋겠지요. ★★★★☆

스테이지2를 만든다.

모든 블록을 격파했으면 이번에는 다른 레이아웃이 되게 만들어 봅시다. 스테이지마다 액티비티를 나누어도 좋지만, 더 깔끔한 방법은 Intent와 Extra에 따라 스테이지를 변하게 만드는 방법 이겠지요.

★★★★★

아이템과 적 캐릭터를 만든다.

아이템을 획득하면 볼이 증가하거나 새로운 볼이 등장하거나 속 도가 느려지게 해봅시다. 연속으로 느려지는 아이템이나 부딪히 면 공을 놓치는 적 캐릭터를 만들어봅시다.

앱을 충분히 개조해보고, 어느 부분을 고치면 어떻게 변하는지 파악해봅시다. 때로는 값을 마 음껏 변경해서 일부러 엉망으로 만들어 보는 것도 효과적입니다. 만약 파일을 이전 상태로 되 돌릴 수 없게 되면, Project를 우클릭하여 [Local History] > [Show History]를 선택합니다. 그러면 언제 어느 파일을 어떻게 변경했는지 바로 알 수 있습니다. 되돌리고 싶은 시점의 파일

부록 남은 과제

469


을 우클릭해서 [Revert]를 선택하면 그 시점으로 바로 돌아갈 수 있으니, 프로그램이 망가질까 봐 걱정하지 않아도 됩니다. 앱을 개조해서 감각을 익혔으면 다음은 자신의 아이디어로 만들어볼 차례입니다. 우선 어떤 앱 을 만들지 결정하고 필요한 화면과 필요한 클래스를 골라봅시다. 앱 개발은 장기전이 되는 일 이 많습니다. 갑자기 많은 기능을 갖춘 앱을 만드는 게 아니라, 우선 단순하고 바로 만들 수 있 는 상태를 목표로 합시다. 그리고 실제로 다른 사람에게 시험을 부탁하면서, 그 앱을 개량해서 키워야 할지, 다음 앱에 매진해야 할지를 결정하세요. 이제 개발을 시작한 앱이라도 포기하는 걸 주저하지 마세요. 새로운 앱을 만드는 게 그보다도 더 가치가 있을지도 모릅니다.

470 초보자를 위한 안드로이드 스튜디오


부록 B. 학습하다가 막혔을 때 | 이 절의 핵심 내용 | ●●

참고서를 선택할 때는 느낌이 중요하다.

●●

인터넷으로 조사할 때는 구체적인 내용을 검색해야 정확한 정보를 얻을 수 있다.

●●

메일 등으로 질문할 때는 제목을 명확하게 하고 본문은 자세히 기술한다.

이 책은 프로그래밍을 실전에서 만드는 것을 우선하므로 총망라한 정보는 부족합니다. 그러므 로 앞으로 앱을 만들어가면서 다른 정보원도 필요할 것입니다.

참고서를 사자 독학할 때는 정보가 체계적으로 정리되어 있는 참고서가 매우 큰 도움이 됩니다. 스마트폰은 다양한 기술이 집대성된 기기이므로, 좋은 앱을 만들려면 폭넓은 지식이 필요합니다. 우선 지 금보다 더 수준 높은 Java 언어와 안드로이드 자체를 다룬 서적이 필요하겠지요. 같은 기술 서적이라고 해도 다양한 종류가 있습니다. 이 책처럼 실습을 통해 조금씩 학습해 가 는 책은 처음에 기술에 대한 실마리를 잡는 데에 효과적입니다. 원하는 기능을 목록에서 찾아 볼 수 있는 사전식 구성의 도서는 실제로 앱을 만들 때 어떻게 만들어야 좋을지 모르는 부분이 나왔을 때 편리합니다. 총정리된 지식을 얻고 싶을 때는 레퍼런스북이 한 권 있으면 좋을지도 모릅니다. 기술서를 살 때 중요한 것은 자신의 성향이나 학습 패턴에 잘 맞는지 판단하는 일입니다.

인터넷으로 조사한다 문제점을 알고 있을 때나 구체적으로 구현하고 싶은 처리가 정해져 있을 때는 인터넷으로 찾아 보는 것이 편리합니다. 언제든 바로 찾아볼 수 있을 뿐만 아니라 질문도 할 수 있습니다. 안드로 이드는 변화가 심하므로, 인터넷 쪽이 더 최신 정보를 얻을 수 있다는 장점도 있습니다. 인터넷 에는 몇몇 중요한 사이트가 있는데, 그중 가장 중요한 사이트는 Android Developers입니다. [URL] Android Developers

http ://developer.android.com/index.html

부록 남은 과제

471


Google은 공식적으로 정보를 올리는 사이트로 정보의 풍부함, 정확함, 신선함 모든 면에서 압도적입니다. 단, 모두 영어로 되어 있으니 영어에 익숙하지 않으면 읽기가 불편합니다. 다른 사이트도 있지만 Android Developers만큼 총망라되어 있지 않으므로, Google 검색 을 이용해서 찾고 싶은 내용이 있는 사이트를 찾아내는 수밖에 없습니다. 인터넷으로 조사할 때는 키워드를 얼마나 구체적으로 좁힐 수 있는지가 중요합니다. 예를 들어 ‘문자 표시 방법’이란 키워드로는 문제 해결에 도움이 되는 정보에 쉽게 도달할 수 없 을 것입니다. 가장 효과적인 방법은 패키지 이름을 붙여서 검색하는 것입니다. ‘TextureView’ 로 검색하기보다 ‘android.view.TextureView’로 검색했을 때가 더 구체적인 정보를 찾아내 기 쉽습니다. 오류가 발생해서 앱이 정지되는 경우는 오류 로그에 있는 예외의 이름이 도움됩니다. 만약 예 외가 자신이 작성한 소스 코드 이외에서 발생했을 때는 예외 로그로 검색하는 것이 효과적입니 다. 가령 다음과 같은 오류 로그를 찾았다고 합시다. java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content. Context.getPackageName()' on a null object reference at android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceM anager.java:374) at android.preference.PreferenceManager.getDefaultSharedPreference s(PreferenceManager.java:369) at jp.study.game.GameView$2.run(GameView.java:76) at java.lang.Thread.run(Thread.java:818)

이 경우에는 Attempt to invoke virtual method ‘java.lang.String android.content.

Context.getPackageName ( )’ on a null object reference로 검색하는 것이 효과적입니다.

메일링 리스트에 물어본다 안드로이드 앱 개발자 커뮤니티는 매우 활발해서 많은 개발자들이 참가하고 있습니다. ●●

https ://developer.android.com

안드로이드 모임에 참가하려면 메일링 리스트에 등록합니다. 이 메일링 리스트에는 다양한 정 보가 교환되고 있으며, 앱 개발 중에 고민이 생길 때 피난처가 되고 있습니다. 메일링 리스트에 질문을 할 때는 몇 가지 지켜야 할 규칙이 있습니다. 첫 번째로 메일링 리스트에 참가하는 개발

472 초보자를 위한 안드로이드 스튜디오


w w w. h a n b i t . c o . k r

Hanbit eBook

Realtime w w w. h a n b i t . c o . k r / e b o o k

DRM free! 어떤 디바이스에서도 자유롭게

eBook Oriented! 전자책에 꼭 맞는 최적의 내용과 디자인

Hanbit eBook

Hanbit eBook

Realtime 70

Realtime 89 49

MFC 프로그래밍 주식분석 프로그램 만들기 김세훈 지음

Hanbit eBook

Hanbit eBook

Realtime 90

Realtime 92 49

자바 개발자를 위한

Vert.x JavaScript Promise​ azu​지음 /​주우영​옮김

애플리케이션 개발 모바일/웹 메시징 STOMP와 MQTT로 개발하는 IoT 모바일/웹 애플리케이션 Mobile and Web Messaging 제프 메스닐 지음 / 조건희 옮김

이연복 지음


w w w. h a n b i t . c o . k r

즐거운 상상이 가득! 2015년 화제의 신간

즐거운 상상이 가득! 2015년 화제의 신간

전자부품 백과사전 vol.1 찰스 플랫 지음 / 배지은 옮김 / 30,000원

취미공학에 필요한 핵심 전자부품을 사전식으로 정리한 안내서.

전자부품 백과사전 vol.1 찰스 플랫 지음 / 배지은 옮김 / 30,000원

취미공학에 필요한 핵심 전자부품을 처음 시작하는 센서 사전식으로 정리한 안내서. 전자부품 백과사전 vol.2

찰스 플랫 지음 / 가격미정

키모 카르비넨, 테로 카르비넨 지음 임지순 옮김 / 13,000원

세상을 수치로 읽어내는

<전자부품 백과사전> 시리즈의 두 번째 도서다.

부품인 센서를 알려주 는 책. 이 책을 통해 자신

처음 만의 프로젝트에 다양한 Zero to Maker

: 누구나 메이커가 될 수 있다

전자부품 백과사전 vol.2

찰스 플랫 지음 / 가격미정

데이비드 랭 지음 / 장재웅 옮김 / 14,000원

센서를 사용해보자. 키모 카르비넨, 테로 카르비넨 지음 임지순 옮김 / 13,000

세상을 수치로 읽어

일반인에서 메이커로. 날백수에서 무인 잠

<전자부품 백과사전> 시리즈의 두 번째 도서다.

수정 회사 CEO가 된 사나이, 데이비드 랭의 메이커 도전기.

시작하는

Make: 센서

부품인 센서를 알

키모 카르비넨, 테로 카르비 는 책. 이 책을 통해 넨, 빌 발토카리 지음 / 가격미정 만의 프로젝트에 다

필수 전자부품인 센서를 센서를 사용해보자

Zero to Maker

마이크로 컨트롤러 보드

: 누구나 메이커가 될 수 있다 데이비드 랭 지음 / 장재웅 옮김 / 14,000원

Maker Pro 일반인에서 메이커로. 날백수에서 무인 잠 존 베이첼 지음 / 가격미정

수정 회사 CEO가 메이커라면 된 사나이,반드시 데이비드 읽어야 할 필수 계발 랭의 메이커 도전기. 서. 프로 메이커들과의 인터뷰 및 에세이 수록.

에 응용하는 방법을 담 았다.

Make: 센서 키모 카르비넨, 테로 넨, 빌 발토카리 지음 / 가격미정

필수 전자부품인 센 프로젝트로 배우는 라즈베리 파이

도날드 노리스 지음 / 임지순 옮김

다양한 실전 프로젝트를 통해 라즈베리 파이를 쉽고 재미있게 배워본다.

Maker Pro

존 베이첼 지음 / 가격미정

메이커라면 반드시 읽어야 할 필수 계발

마이크로 컨트롤러

에 응용하는 방법 았다.



Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.