<BED5BACEBCD32E696E6464>

Similar documents
(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

Microsoft PowerPoint App Fundamentals[Part1].pptx

1부

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

그림으로쉽게설명하는안드로이드프로그래밍 초판발행 2012 년 8 월 20 일 제 3 판 1 쇄 2015 년 7 월 27 일 지은이천인국펴낸이김승기펴낸곳 ( 주 ) 생능출판사 / 주소경기도파주시광인사길 143 출판사등록일 2005년 1월 21일 / 신고번호제

PowerPoint Template

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Windows 8에서 BioStar 1 설치하기

THE TITLE

[Brochure] KOR_TunA

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Microsoft PowerPoint App Fundamentals[Part2].pptx

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

Microsoft PowerPoint - chap01-C언어개요.pptx

모바일 안드로이드 아키텍처

서현수

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

어댑터뷰

슬라이드 1

고객 카드

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

4S 1차년도 평가 발표자료

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

보안공학연구회

PowerPoint Presentation

슬라이드 1

PowerPoint Presentation

디지털 공학

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요


[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

안드로이드 서비스

1) 리눅스커널 메모리관리, 프로세스관리, 파일시스템관리, 네트워크스택등하드웨어지원 2) Native 라이브러리 (C, C++) 안드로이드프레임워크에서필요한 C 와 C++ 라이브러리 3) 안드로이드런타임 코어라이브러리지원, Dalvik Virtual Machine 으로

( )부록

Microsoft PowerPoint - Mobile SW Platform And Service Talk pptx

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

슬라이드 1

Microsoft PowerPoint UI-Layout.Menu.pptx

..,. Job Flow,. PC,.., (Drag & Drop),.,. PC,, Windows PC Mac,.,.,. NAS(Network Attached Storage),,,., Amazon Web Services*.,, (redundancy), SSL.,. * A

PowerPoint Template

DoItAndroidAppProgramming

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Microsoft PowerPoint - 권장 사양

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint 프레젠테이션

슬라이드 1

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

슬라이드 1

슬라이드 1

사용하기 전에 2

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

JVM 메모리구조

NX1000_Ver1.1

gnu-lee-oop-kor-lec06-3-chap7

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

F120S_(Rev1.0)_1130.indd

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

SBR-100S User Manual

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

Microsoft PowerPoint - 04기본위젯(Ver 1.0)

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

슬라이드 1

Windows Server 2012

미디어 및 엔터테인먼트 업계를 위한 Adobe Experience Manager Mobile

1

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10


비디오 / 그래픽 아답터 네트워크 만약에 ArcGolbe를 사용하는 경우, 추가적인 디스크 공간 필요. ArcGlobe는 캐시파일을 생성하여 사용 24 비트 그래픽 가속기 Oepn GL 2.0 이상을 지원하는 비디오카드 최소 64 MB 이고 256 MB 이상을 메모리

vRealize Automation용 VMware Remote Console - VMware

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Microsoft PowerPoint - 13-em14-안드로이드.ppt [호환 모드]

A SQL Server 2012 설치 A.1 소개 Relational DataBase Management System SQL Server 2012는마이크로소프트사에서제공하는 RDBMS 다. 마이크로소프트사는스탠다드 standard 버전이상의상업용에디션과익스프레스 exp

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Google Maps Android API v2

<4D F736F F D204954B1E2C8B9BDC3B8AEC1EE5FB0FBC1F82E646F63>

View Licenses and Services (customer)

JAVA PROGRAMMING 실습 08.다형성

제8장 자바 GUI 프로그래밍 II

제11장 프로세스와 쓰레드

슬라이드 1

F120L(JB)_UG_V1.0_ indd

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

Microsoft Word - src.doc

iOS5_1±³

Visual Studio online Limited preview 간략하게살펴보기

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 15주차(최종).pptx

Microsoft Word - R_120827_Display.doc

PowerPoint Presentation

정보

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

DBMS & SQL Server Installation Database Laboratory

Transcription:

www booksr co kr 3

4 2012 7

01 1. 스마트폰 16 2. 안드로이드란? 20 3. 안드로이드의특징 22 4. 안드로이드의구조 26 5. 애플리케이션의기초개념 28 6. 인텐트 35 7. 매니페스트파일 37 8. 안드로이드의미래 39 02 1. 개발과정의개요 42 2. 안드로이드개발도구 43 3. JDK 44 4. 이클립스 46 5. 안드로이드 SDK 51 6. ADT 55 7. 안드로이드에뮬레이터 57 8. 에뮬레이터사용법 61 9. 샘플애플리케이션실행 62 10. SDK 컴포넌트추가설치 66 03 1. 마법사를이용한예제프로그램 70 2. 약간수정하여보자 78 5

6 04 05 3. XML을이용하여사용자인터페이스나타내기 82 4. 리소스 89 5. 매니페스트파일 94 6. 자동으로생성되는파일의분석 96 7. 안드로이드폰을연결한개발환경구축 99 8. 디버깅 102 9. 이클립스사용팁 104 10. 정리 107 1. 사용자인터페이스개요 110 2. 사용자인터페이스작성방법 111 3. 비주얼도구를이용하여사용자인터페이스만들기 117 4. 뷰 121 5. 기초적인뷰들 125 1. 레이아웃 134 2. 선형레이아웃 135 3. 프레임레이아웃 (FrameLayout) 145 4. 테이블레이아웃 (TableLayout) 147 5. 상대적레이아웃 (RelativeLayout) 149 6. 절대적레이아웃 (AbsoluteLayout) 151 7. 코드로레이아웃변경하기 153

06 1. 이벤트처리 160 2. 이벤트처리메소드재정의 161 3. 이벤트처리객체사용 165 4. XML을이용한이벤트처리 172 5. 폼위젯 173 6. 키이벤트 184 7. 포커스 186 8. 터치이벤트 188 07 1. 메뉴의종류 194 2. 옵션메뉴 197 3. 컨텍스트메뉴 203 4. 서브메뉴 207 5. 대화상자 209 6. AlertDialog 212 7. ProgressDialog 217 8. 커스텀대화상자 219 08 1. 그래픽 224 2. 커스텀뷰를사용하여그리기 225 3. 그리기속성 231 4. 패스그리기 238 7

8 09 10 5. 이미지표시하기 240 6. 도형객체이용하기 245 7. 애니메이션 252 8. 프로퍼티애니메이션 253 9. 뷰애니메이션 257 10. 드로워블애니메이션 261 11. 서피스뷰 (SurfaceView) 263 1. 안드로이드그래픽 274 2. 그래디언트 276 3. 트랜스퍼모드 282 4. 2차원변환 285 5. 영상처리 294 6. OpenGL ES 300 7. OpenGL ES 예제 #1: 전체적인구조만들기 303 8. OpenGL ES 예제 #2: 삼각형정의하기 306 9. OpenGL ES 예제 #3: 삼각형그리기 309 10. OpenGL ES 예제 #4: 색상입히기 311 11. OpenGL ES 예제 #5: 삼각형회전시키기 314 12. OpenGL ES 예제 #6: 피라미드회전시키기 316 1. 어댑터뷰 318 2. 리스트뷰 319 3. 스피너 325

11 4. 그리드뷰 328 5. 갤러리 331 6. 프로그레스바 334 7. 레이팅바 336 8. 데이터픽커와타임픽커 338 1. 애플리케이션, 액티비티, 액티비티스택, 태스크 344 2. 멀티태스킹 348 3. 액티비티생애주기 351 4. 액티비티상태저장 356 5. 인텐트 360 6. 명시적인텐트 362 7. 액티비티로부터결과받기 366 8. 암시적인텐트 372 9. 인텐트필터 377 10. 로그캣 384 12 1. 리소스 390 2. 기본리소스와대체리소스 392 3. 리소스참조 397 4. 지역화 402 5. 보안 408 6. 권한요청하기 410 7. 사용자정의권한 412 9

13 14 15 1. 서비스 416 2. 서비스기초 419 3. IntentService 클래스 424 4. 연결타입의서비스 427 5. 방송수신자란? 435 6. 애플리케이션이방송하기 441 7. 중요한방송 445 1. 프로세스와스레드 452 2. 프로세스 454 3. 스레드 457 4. 스레드에서 UI를조작하는방법 462 5. 게임예제 472 1. 데이터를저장하는방법 480 2. 공유프레퍼런스 481 3. 프레퍼런스액티비티 485 4. 내부공간에파일만들기 487 5. 외부저장공간 491 10

16 17 1. 데이터베이스 498 2. 데이터베이스사용하기 501 3. 데이터베이스와어댑터 508 1. 콘텐트제공자 512 2. 콘텐트제공자의기본 513 3. 콘텐트제공자로부터데이터읽기 516 4. 콘텐트제공자를이용하여데이터변경하기 521 5. 콘텐트제공자에저장할수있는데이터타입 525 6. 콘텐트제공자작성하기 527 18 1. 네트워킹상태조회 542 2. 웹페이지읽기 546 3. 웹브라우징 547 4. 서버 / 클라이언트통신 552 5. XML 처리 560 19 1. 위치기반애플리케이션 566 2. 구글 API 패키지설치 569 11

20 21 3. 사용자위치파악하기 571 4. 지오코딩 578 5. 구글지도패키지 581 6. 구글지도서비스등록 583 7. 구글지도표시하기 587 8. 맵뷰제어하기 590 9. 지도위에표시하기 595 1. 안드로이드의멀티미디어지원 606 2. 오디오재생 607 3. 오디오녹음 617 4. 인텐트를이용한이미지캡처 623 5. Camera 클래스를이용한영상캡처 631 6. 내장사진선택하기 636 7. 비디오재생 639 8. 비디오녹화 641 1. 인텐트를사용한전화걸기와문자메시지보내기 650 2. 전화상태얻기 655 3. 주소록 659 12 22 1. 블루투스 674

23 2. 블루투스설정 677 3. 장치검색 678 4. 장치와접속하기 682 1. 센서하드웨어 702 2. 방향센서 709 3. 가속도센서 713 24 1. NFC 718 2. NFC의기초 721 3. 앱위젯 732 25 1. 애플리케이션배포과정 748 2. 애플리케이션서명하기 750 3. 명령어로서명하기 751 4. 이클립스로서명하기 755 5. 애플리케이션버전 757 6. 애플리케이션마켓 760 찾아보기 764 13

안드로이드프로그래밍 A n d r o i d 01CHAPTER 기초사항 1. 스마트폰 2. 안드로이드란? 3. 안드로이드의특징 6. 인텐트 7. 매니케스트파일 8. 안드로이드의미래 4. 안드로이드의구조 5. 애플리케이션의기초개념

01 기초사항 Android 안드로이드! 이보다더쉬울수는없을거야. 그렇다고너무안심하면아 ~ 안돼요. 기초가튼튼해야한다는것, 여러분아시죠? 1. 스마트폰 애플이아이폰을발표한이후로스마트폰은우리의일상생활을바꾸어놓았다. 우리는스마트폰을이용하여서언제어디서나인터넷에접속하여정보를얻을수있으며각종애플리케이션을실행하여서필요한작업을수행할수있고필요한데이터와영상을가지고다닐수있다. 일반적으로스마트폰은기존의휴대폰보다훨씬다양한기능을제공하는휴대폰이다. 실제로스마트폰은완전한운영체제가탑재되어있는조그마한컴퓨터라고할수있다. 따라서스마트폰에서는데스크톱컴퓨터처럼사용자가애플리케이션을설치하고실행할수있다. 16

기초사항 01 CHAPTER 언제어디서나인터넷을할수있다니! 그림 1.1 스마트폰은우리의일상을변화시키고있다. 모바일운영체제 스마트폰에탑재되는애플리케이션을개발하는개발자의입장에서는가장중요한것이운영체제이다. 왜냐하면운영체제에따라서애플리케이션의구조가완전히달라지기때문이다. 반대로하드웨어가다르더라도운영체제가같으면동일한애플리케이션을실행할수있다. 현재스마트폰운영체제로사용되는것은구글의안드로이드, 애플의 ios, 노키아의심비안 (Symbian), RIM의블랙베리 OS, 마이크로소프트의윈도폰 7 등이있다. 2011년도 2분기의세계시장분포를보면다음과같다. 모바일운영체제의비교 2% 2% RIM 12% Symbian Windows Mobile Android 43% Apple 18% Symbian 22% Andfoid Other Apple RIM 최근에많이사용되는안드로이드, ios, 윈도폰운영체제를 [ 표 1.1] 로비교하였다. 그림 1.2 2011 2 분기전세계스마트폰운영체제의점유율 ( 출처 : 가트너자료 ): 전세계적으로안드로이드운영체제가 2009 년도에 4% 를차지하였으나 2011 년에는 43% 로높아졌음을알수있다. 그동안점유율에서수위를차지하였던노키아의심비안은점유율이점차하락할것으로예상된다. 노키아는심비안을포기하고마이크로소프트의윈도폰 7 을자사의스마트폰의운영체제로채택하기로결정한바있다. 17

안드로이드프로그래밍 표 1.1 모바일운영체제비교 안드로이드 ios 윈도폰 제조사 Google Inc., Apple Inc. Microsoft Corporation 개발언어 Java, C C, C++, Objective-C C#, Visual Basic, XAML 배포일 2012.06.27 2012 2012.06.20 최신버전 4.1(Jelly Bean) ios 6.0 플랫폼 ARM, MIPS, x86 ARM Windows Phone 8.0(Apollo) ARM v7 Snapdragon QSD8X50 커널리눅스 Hybrid(Darwin).NET Framework 4 라이선스 Apache 2.0 Proprietary Proprietary 웹사이트 android.com apple.com/ios windowsphone7.com 사용자인터페이스 그래픽사용자인터페이스 Cocoa Touch(Multitouch, GUI) Live Tile 안드로이드 (android) 는구글에의하여개발되고배포되는운영체제이다. 안드로이드는리눅스커널을사용한다. 리눅스커널위에는자바코드를해석해주는가상머신이탑재되어있다. 이가상머신위에서거의모든자바라이브러리들이지원된다. 이자바라이브러리들을이용하여서개발자들은애플리케이션을작성하게된다. 당연히개발자들이사용하는언어는자바가된다. 자바언어의간결성과풍부한라이브러리로인하여안드로이드는다양한애플리케이션을작성할수있는강력한플랫폼이되었다. 안드로이드는자원이매우제한되어있는모바일장치를위한운영체제이지만개발자들은마치데스크톱에서처럼데이터베이스나 3차원그래픽등의많은기능들을유사하게사용할수있다. ios는애플의스마트폰인아이폰과아이팟터치, 아이패드에내장되어있는운영체제이다. 내부적으로는 Mac OS X 10.5 를기반으로만들어져있다. 멀티터치를지원하는코코아라고불리는사용자인터페이스를지원하고있다. 윈도폰 7은마이크로소프트의스마트폰을위한운영체제이다. 음악과동영상서비스를위하여 June을탑재하였으며, 검색엔진으로 Bing을사용하고엑스박스라이브가내장되어있다. 응용소프트웨어를나열하는기존의사용자인터페이스환경이아닌허브 (Hub) 를통해응용프로그램들이연결되어서라이브타일형식으로제공된다. 18

기초사항 01 CHAPTER 그림 1.3 모바일운영체제비교 (a) 안드로이드 (b) 윈도폰 (c) 아이폰 애플리케이션마켓 스마트폰이기존의휴대폰과다른점은사용자가 PC를사용하지않고무선으로애플리케이션을마켓에서다운로드하여서자신의스마트폰안에설치할수있다는점이다. 마켓을사용하게되면애플리케이션의업그레이드도매우쉽게이루어진다. 기존의데스크탑에서도인터넷에서애플리케이션을구입하여서다운로드하여설치할수있었지만개발자와사용자들이직접만나서거래하는지금의마켓개념은아니었다. 애플사에서처음으로개발자들과사용자들이만나서거래를할수있는애플리케이션마켓이라는새로운개념을창안하였다. 안드로이드도애플리케이션을거래할수있는마켓을지원한다. 안드로이드마켓은 구글플레이 라는이름으로 https:// play.google.com/ 에위치하고있다. 그림 1.4 안드로이드마켓의개념 개발자 마켓 소비자 19

안드로이드프로그래밍 사용자들은안드로이드마켓을통하여많은애플리케이션들을다운로드할수있다. 이애플리케이션들은스마트폰의기능을확장하는역할을한다. 현재까지약 200,000개이상의안드로이드용애플리케이션이개발되었다. 물론애플리케이션들은안드로이드마켓이아닌써드파티사이트를통해서도다운로드가가능하다. 안드로이드는과연휴대폰에서무엇을할까요? 2. 안드로이드란? 안드로이드의기능 안드로이드는현재수백만대의스마트폰, 태블릿에탑재되어있다. 안드로이드는빠른속도의웹브라우저, 멀티태스킹, 클라우드컴퓨팅기능, 다른장치와쉽게연결하여서공유하는기능등을제공하는모바일운영체제이다. 버전 4.0 에서새로추가된기능만을살펴보면다음과같다. 보이스타이핑은음성인식을이용하여서명령을내리거나이메일을작성할수있는기능이다. 안드로이드빔은 NFC(Near Field Communication) 을이용하여서연락처나웹페이지, 비디오등을쉽게다른장치와공유하는기능이다. 페이스언락은얼굴인식기능을이용하여서장치의잠금을풀수있는기능이다. 보이스타이핑 (voice typing) 안드로이드빔 (android beam) 페이스언락 (face unlock) 안드로이드의역사 안드로이드의역사를간단하게살펴보자. 안드로이드가등장하기전까지는윈도우모바일이나심비안등의휴대폰운영체제가있었으나빈약한라이브러리, 잦은오류, 저성능등의많은문제점들이있었다. 구글은데스크톱에서의검색엔진이라는기존의한계를벗어나기위하여모바일시장으로의진입을엿본다. 구글의목표는오픈소스로작성되고개방된고성능의개발프레임워크였다. 2005년에구글은안드로이드주식회사를인수하게된다. 안드로이드주식회사는캘리포니아에있는작은 20

기초사항 01 CHAPTER 벤처기업이었다. 안드로이드주식회사의설립자중의한명이었던앤디루빈등은인수된후에구글에서일하게된다. 구글에서앤드루빈이이끄는팀은리눅스커널에기반을둔모바일장치플랫폼을개발한다. 2007년 11월 5일에구글은삼성전자, 텍사스인스트루먼트, 모토로라등으로구성된 OHA(Open Handset Alliance) 라는컨소시엄을구성한다. 이컨소시엄은모바일장치를위한오픈표준을개발하려는목적을가지고있었다. OHA는설립과동시에첫번째작품인안드로이드 SDK 1.0 버전을발표하는데이것은리눅스커널버전 2.6 위에구축된모바일장치플랫폼이었다. 안드로이드플랫폼을탑재한최초의스마트폰은대만의 HTC가만들어서이동통신사 T_Mobile에납품한 G1이었다. 이어서우리가알다시피삼성전자의갤럭시 s를비롯하여수많은안드로이드폰들이출시되었다. 안드로이드라이선스 구글은안드로이드소스를아파치라이센스로공표한다. 아파치라이선스 (Apache License) 는 ASF(Apache Software Foundation) 에의하여기술된무료소프트웨어라이선스로서저작권표시는요구하지만해당소스코드를가지고무료또는상업적인소프트웨어를개발할수있는라이선스를의미한다. 즉이것은스마트폰제조사들이안드로이드를탑재하는데라이선스비용을지불할필요가없음을의미한다. 또한개발자들은안드로이드를기반으로비공개파생물을만들수있으며이것을통하여이득을얻을수있다. 안드로이드버전 안드로이드는 1.0 버전이후에많은업데이트를거쳤다. 사실은너무많은업데이트가있어서제조업체의불만이기도하다. 이것은또한구글이최신의기술들을안드로이드로빠르게도입하고있음을의미한다. 안드로이드버전에붙여지는이름은알파벳문자로시작되는디저트의이름이다. 예를들어서버전 2.3 의진저브레드는 생강빵 을의미한다. 간단하게최근버전의특징을 [ 표 1.2] 에서살펴보았다. 21

안드로이드프로그래밍 표 1.2 안드로이드버전요약 이미지버전발표일특징 2.3 (Gingerbread) 3.0 (Honeycomb) 4.0 (Icecream Sandwitch) 4.1 (Jelly Bean) 2010.12.6 2011.2.24 2011.10.19 2012.6.27 SIP VoIP 전화기술지원 근거리 (Near Field Communication) 통신지원 복사 - 붙여넣기기능지원 자이로스코프센서지원 태블릿지원 멀티코어프로세서지원 구글 3D 지도서비스 태블릿최적화 UI 지원 2.3 과 3.0 의통합버전 얼굴인식언락 NFC 를이용한데이터전송및공유 사진향상도구 오프라인이메일탐색 애플리케이션폴더 프로젝터버터로전체적인속도증가 지식그래프를이용한음성검색기능 구글나우 : 사용자에게맞춤형정보제공 알림기능강화 3. 안드로이드의특징 안드로이드는어떤특징을가지는모바일운영체제일까? 여기서는일단간단하게살펴보고추후에자세히하나씩살펴보도록하자. 애플리케이션프레임워크 (Application framework) 컴포넌트의재사용과대체가가능하다. 달빅가상머신 (Dalvik virtual machine) 모바일장치에최적화되어있다. 내장된웹브라우저 (Integrated browser) 오프소스인 WebKit 엔진에토대를두고있다. 최적화된그래픽 (Optimized graphics) 2D 그래픽은자체 2D 라이브러리에의하여제공되고 3D 그래픽은 OpenGL ES 1.0 규격에기반을두고있다. SQLite 데이터베이스지원 각종오디오, 비디오규격지원 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) 블루투스, EDGE, 3G, WiFi 지원 카메라, GPS, 나침판, 기속도계지원 22

기초사항 01 CHAPTER 풍부한개발환경제공장치에뮬레이터, 메모리와성능프로파일링, 이클립스플 러그인제공 그림 1.5 다양한그래픽을사용하는 Wind-up Knight 게임의화면 컴포넌트의재사용 안드로이드는컴포넌트 (component) 의재사용을가능케하는애플리케이션프레임워크를가진다. 애플리케이션은여러개의컴포넌트로이루어져있다. 하나의애플리케이션은다른애플리케이션의컴포넌트를사용할수있다. 모바일장치에서컴포넌트의재사용이중요한이유는프로세서의처리속도나메모리용량이충분하지않기때문이다. 자바언어지원 안드로이드애플리케이션은자바로작성된다. 안드로이드개발자들은자바의 SE 버전중에서 AWT와스윙 (swing) 을제외한거의모든패키지를사용할수있다. 안드로이드에서는자바를지원하기위하여자체적인가상머신을구현하였다. 자바의표준 JVM을사용하지않는이유는스마트폰이데스크탑에비하여처리속도와메모리용량측면에서한참뒤쳐지기때문이다. 모바일장치에서는모든것을최적화시키는것이중요하다. 안드로이드에서는가상머신에서 JIT 컴파일러를없애버리고가비지콜렉터를다시작성했으며클래스파일에서중복된정보를제거한새로운실행파일형식인달빅실행파일 (.dex) 을사용한다. 이러한자체적인자바가상머신을달빅 (Dalvik) 가상머신이라고부른다. 달빅은개발자와관련된아이슬란드의마을이름이라고한다. 여기서한가지주의할점은안드로이드에서는달빅가상머신을사용하므로일반적인자바의클래스파일에들어있는바이트코드는직접실행 23

안드로이드프로그래밍 이불가능하다. 반드시바이트코드를달빅실행파일 (.dex) 형식으로변환하여야실 행이가능하다. 선언적사용자인터페이스사용 안드로이드는사용자인터페이스를 XML을사용하여정의한다. 함수를호출하는기존의절차적인방법을사용하지않고 XML을이용하여서선언적으로정의하는것이다. 이방법은보다진보된방법으로여겨지고있으며마이크로소프트의실버라이트나 Sun의 JavaFX와유사하다. 컴퓨팅의역사에서사용자인터페이스작성기법은꾸준히발전되어왔다. 제일원시적인방법이 C언어로윈도우 API 함수들을호출하는방법이다. 이후로 C++ 언어로 MFC(Microsoft Foundation Classes) 라이브러리를사용하는방법이등장하였고자바언어의 Swing과같은라이브러리는이보다도진보된방법이라고한다. 안드로이드에서사용하는선언적인사용자인터페이스방법은 Swing보다도발전된것으로여겨진다. 안드로이드에서사용자인터페이스를작성하려면먼저 XML 파일을생성한다. 이 XML 파일안에화면을구성하는버튼이나텍스트와같은 GUI 요소들을엘리먼트로적어준다. 이방법은앞으로질리도록많이등장할것이다. 첨단기능제공 카메라, GPS, 나침판, 가속도계와같은각종첨단센서들을지원한다. 이러한센서들을이용하여서실감나는게임을제작할수있다. 라이브폴더, 위젯, 미디어녹음기능, 텍스트음성변환, 멀티터치, 제스처, 음성인식와같은첨단소프트웨어기술들을지원한다. 안드로이드폰에서음성검색을사용해본사용자라면상당한수준의음성인식이가능하다는것을느꼈을것이다. 멀티미디어에대한지원도상당하다. 2D 그래픽은자체제작한라이브러리를통하여최적화된그래픽을제공한다. 3D 그래픽은 OpenGL을간략화시킨 OpenGL ES 1.0 규격에토대를두고있다. 멀티미디어재생을위하여 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF 등의대부분의정지영상, 동영상, 오디오형식을지원한다. 여러가지방식의통신도지원하는데블루투스 (Bluetooth), 3G 통신망, WiFi 통신기능을지원한다. 웹브라우징을위하여오픈소스웹킷 (WebKit) 엔진에기반을둔통합브라우저를내장하고있다. 24

기초사항 01 CHAPTER 개방적이고풍부한개발환경을제공한다. 안드로이드의가장큰특징은개방성이다. 누구나가져다가사용할수있고무료로제공되지만기존의폐쇄적이고독점적인모바일플랫폼과비교해도손색없는성능과완벽함을제공한다. 안드로이드는오픈소스만을조립하여서만들었지만리눅스와같이시장에서오랜기간동안에검증된소프트웨어만을사용하였다. SQLite나 OpenGL ES와같은라이브러리도이미검증되어많이사용되고있는개방적인오픈소스이다. java.net과같은자바언어의풍부한라이브러리도이미검증된오픈소스라간주할수있다. 따라서개발자들은견고한프레임워크위에서안전하게자신의애플리케이션을개발할수있다. 안드로이드는 SDK를통하여단말기에뮬레이터, 디버깅도구, 메모리및성능프로파일링도구들을기본으로제공한다. 특히이클립스 (eclipse) 를사용하여서보다쉽게애플리케이션개발이가능하다. 안드로이드는윈도우 XP 또는비스타, 윈도우 7, Mac OS X, 리눅스와같은다양한운영체제에서개발이가능하다. 강력한에뮬레이터가제공되기때문에개발자들은실제장치없이도상당한수준으로애플리케이션을개발하고테스트할수있다. 안드로이드에뮬레이터로테스트할수없는것은카메라, 비디오, 블루투스, USB 연결, 배터리와같은기능들뿐이다. 안드로이드에뮬레이터는 CPU 명령어수준에서에뮬레이션이가능하다. 스마트폰은보통 ARM 계열의 CPU를사용하므로에뮬레이터는 ARM 프로세서를시뮬레이션한후에이위에서안드로이드리눅스커널을실행시킨다. 따라서굉장히정확한에뮬레이션이가능하다. 클라우드컴퓨팅 안드로이드는클라우드컴퓨팅 (cloud computing) 을지원한다. 클라우드컴퓨팅은인터넷상의서버에여러가지자원 ( 프로그램, 데이터 ) 을저장하고, 필요할때마다자신의모바일장치를통하여사용하는컴퓨팅기법이다. 예를들면 MS 오피스와같은프로그램을서버에설치해놓고웹브라우저를통하여원격으로사용하는것이클라우드컴퓨팅이다. 안드로이드에서도음성인식과같은기능은클라우드컴퓨팅을통하여지원된다. 또사진이나앱, 게임이메일, 연락처등을서버에저장하고필요하면언제든지불러서사용할수있다. 25

안드로이드프로그래밍 4. 안드로이드의구조 애플리케이션을개발하기전에미리알아두어야하는사항들을여기서학습하여본다. 안드로이드는단순히운영체제만을제공하는것은아니다. 안드로이드는운영체제, 미들웨어, 핵심애플리케이션을모두포함하는모바일플랫폼이라고할수있다. 구글에서는안드로이드를소프트웨어스택 (software stack) 이라고부른다. 즉소프트웨어를스택처럼쌓아두었다는의미이다. 다음그림은안드로이드운영체제의주요한요소들을나타낸다. 그림 1.6 안드로이드의구조 애플리케이션 애플리케이션프레임워크 라이브러리 안드로이드런타임 리눅스커널 리눅스커널 (linux kernel) 안드로이드는리눅스버전 2.6 을사용하여서보안, 메모리관리, 프로세스관리, 네트워크, 장치드라이버와같은시스템서비스를제공한다. 커널은하드웨어와나머지소프트웨어스택사이의추상화계층으로동작한다. 즉모바일장치의하드웨어가다르더라도상위계층에게균일한환경을제공한다. 안드로이드런타임 (Android Runtime) 안드로이드런타임은애플리케이션을실행시키기위한최소한의환경을제공한다. 안드로이드런타임은자바의코어라이브러리와달빅가상머신으로구성된다. 모든 26

기초사항 01 CHAPTER 안드로이드애플리케이션은리눅스의하나의프로세스로실행되며, 각프로세스마다자신만의달빅가상머신을가진다. 따라서여러개의가상머신이동시에실행될수있으므로달빅가상머신은이를감안하여서효율적으로실행할수있도록설계되었다. 달빅가상머신은레지스터기반이며, 자바컴파일러에의하여컴파일된클래스들을.dex 형식으로변환한후에실행한다. 라이브러리 (libraries) 안드로이드는다양한 C/C++ 라이브러리를포함하고있다. 개발자들은애플리케이션프레임워크를통하여이들라이브러리들을사용할수있다. 시스템 C 라이브러리 - BSD 기반의표준 C 시스템라이브러리 (libc) 을제공한다. 미디어라이브러리 - PacketVideo의 OpenCORE에기초한다. 인기있는오디오및비디오형식의재생및녹음을지원한다. 구체적으로 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG등을지원한다. Surface manager - 디스플레이서브시스템을관리하고여러애플리케이션에서나오는 2차원과 3차원그래픽레이어들을끊어짐없이합성한다. LibWebCore 웹브라우저를구현하는첨단의웹브라우저엔진 SGL - 기본 2D 그래픽엔진 3D 라이브러리 - OpenGL ES 1.0 API 기반의라이브러리, 하드웨어 3D 가속을사용하거나최적화된내장 3차원소프트웨어래스터라이저를사용한다. FreeType - 비트맵과벡터글꼴렌더링을제공한다. SQLite - 강력하고가벼운관계형데이터베이스엔진 애플리케이션프레임워크 (application framework) 애플리케이션프레임워크에서는개발자들을위한 API(Application Programming Interface) 를제공한다. 즉개발자들은이프레임워크가제공하는기능을이용하여서자신들의애플리케이션을개발하게된다. 개발자는프레임워크를통하여하드웨어장치, 위치정보접근, 병렬처리기능, 알람설정기능, 상태표시줄알림등의기능을사용할수있다. 애플리케이션프레임워크는컴포넌트의재사용을쉽게할수있도록설계되었다. 모든애플리케이션은자신의기능을다른애플리케이션에게개방할수있고다른애플리케이션은그기능을사용할수있다. 구체적으로다음과같은서비스와시스템 27

안드로이드프로그래밍 을제공한다. 풍부하고확장가능한뷰 (View) 들을제공한다. 리스트, 그리드, 텍스트박스, 버튼, 내장웹브라우저와같은뷰들은애플리케이션을작성하는데사용될수있다. 콘텐트제공자 (content provider) 는애플리케이션이다른애플리케이션의데이터에접근하거나공유할수있도록한다. 리소스관리자 (resource manager) 는리소스 ( 문자열, 그래픽, 배치관리자파일 ) 에대한접근을관리한다. 통지관리자 (notification manager) 는모든애플리케이션이상태바에경고를표시할수있도록한다. 액티비티관리자 (activity manager) 는애플리케이션의라이프사이클을관리하고액티비티스택을제공한다. 애플리케이션 (application) 안드로이드는전화, 메시지, 달력, 지도, 이메일, 브라우저, 전화번호부와같은핵심애플리케이션들을기본으로탑재하고있다. 모든애플리케이션은자바프로그래밍언어를사용하여개발된다. 안드로이드에서모든애플리케이션은동일한라이브러리를사용한다. 즉써드파티애플리케이션이라고해서차별받는것은아니다. 사용자한테실제로중요한것은바로애플리케이션이다. 아무리하드웨어적으로훌륭한스마트폰을만들었다고해도사용자를끌어들일수있는킬러애플리케이션이없으면스마트폰이대중들한테어필할수없다. 안드로이드는마켓을통하여많은애플리케이션들이유통될수있는환경을구축하고있다. 애플리케이션은어떻게작성할까요? 5. 애플리케이션의기초개념 애플리케이션을작성하는데필수적인개념들은여기서살펴보고지나가자. 만약이해가안된다고해도크게걱정할것은없다. 앞으로반복적으로등장하게된다. 안드로이드애플리케이션은자바언어로작성된다. 안드로이드 SDK 도구를이용하면자바코드를컴파일하고리소스와결합하여서안드로이드패키지 (.apk 확장자 ) 로만들수있다. 하나의.apk 파일안에있는모든코드는하나의애플리케 28

기초사항 01 CHAPTER 이션으로간주된다..apk 파일은모바일장치로다운로드되어서애플리케이션으 로설치된다. 일단장치에설치되면, 각안드로이드애플리케이션은다음과같은기법을시용하여서자신의보안샌드박스안에서만동작된다. 각애플리케이션은리눅스운영체제상에서서로다른사용자가된다. 운영체제는각애플리케이션에게사용자아이디를부여하고애플리케이션에속하는파일은다른애플리케이션이접근할수없다. 각애플리케이션은자신의가상머신위에서실행된다. 따라서다른애플리케이션과는완벽하게분리된다. 이번절에서는다음과같은안드로이드의핵심개념에대하여살펴본다. 애플리케이션을구성하는컴포넌트 애플리케이션에대한정보를표시하는매니페스트파일 애플리케이션과분리되어서리소스를정의하는방법 애플리케이션컴포넌트 먼저, 가장중요한개념은안드로이드애플리케이션은컴포넌트 (component) 들로구성된다는점이다. 컴포넌트는애플리케이션을만드는빌딩블록이며, 각컴포넌트들은하나의독립된엔티티로존재하고, 정해진역할을수행한다. 각컴포넌트는애플리케이션을시작하는진입점을가질수있다. 안드로이드에는다음과같은 4가지의타입의컴포넌트가있다. 액티비티 29

안드로이드프로그래밍 서비스 방송수신자 콘텐트제공자 액티비티 액티비티 (activity) 는사용자인터페이스화면을가지고, 하나의작업을담당하는 컴포넌트이다. 액티비티 화면을통하여사용자를상대합니다. 액티비티 하나의애플리케이션은여러개의액티비티를가질수있다. 이메일애플리케이션을예로들어보자. 이메일애플리케이션은수신된이메일들의리스트를화면에표시하는액티비티를가질수있다. 또이메일을작성하는화면이또하나의액티비티가될수있다. 또다른액티비티에서는수신된이메일의내용을화면에표시할수있다. 이들액티비티를모두결합하면하나의이메일애플리케이션이된다. 액티비티는 Activity라는클래스를상속받아서작성된다. 그림 1.7 이메일애플리케이션은 3 개의액티비티로이루어진다. 액티비티 #1 수신된이메일리스트표시 액티비티 #2 이메일작성 액티비티 #3 수신된이메일내용표시 이메일애플리케이션 30

기초사항 01 CHAPTER 서비스 서비스 (service) 는백그라운드에서실행되는컴포넌트로서오랫동안실행되는작업이나원격프로세스를위한작업을할때사용된다. 서비스는사용자인터페이스화면을가지지않는다. 예를들어서서비스는사용자가다른애플리케이션을실행하는동안에배경음악을연주하는데사용된다. 또는사용자상호작용을방해하지않으면서네트워크를통하여데이터를꺼내올수도있다. 서비스는다른컴포넌트에의하여시작된다. 모든서비스는 Service 클래스를상속받아서작성된다. 서비스 서비스를사용하는전형적인예를살펴보자. 음악을재생하는애플리케이션은사용자가곡을선택하는화면을가지고있다. 이화면은액티비티로구현된다. 그러나실제로음악을재생하는작업은액티비티에의하여처리되지않는다. 왜냐하면사용자가이화면을떠나서다른작업을시작하더라도음악이계속재생되어야하기때문이다. 따라서음악재생액티비티는서비스를실행하고음악재생을서비스에위임한다. 배경에서장시간에걸친작업을수행합니다. 액티비티 #1 음악재생화면 서비스 #1 음악재생서비스 그림 1.8 미디어플레이어애플리케이션은 1 개의액티비티와 1 개의서비스로이루어진다. 미디어플레이어애플리케이션 방송수신자 방송수신자 (broadcast receiver) 는방송을받고반응하는컴포넌트이다. 많은방송들은시스템에서발생한다. 즉화면이꺼졌다거나배터리가낮은상태라든지, 사진이촬영되었다는것을알리기위하여방송을사용한다. 또애플리케이션도자기나름의방송을송출할수도있다. 예를들어서어떤데이터가다운로드되어서사용가능하게되었다는것을다른애플리케이션에게알릴목적으로방송을사용할수있 31

안드로이드프로그래밍 방송수신자 방송이나공지를수신합니다. 다. 방송수신자는 BroadcastReceiver 클래스를상속받아서작성된다. 방송수신자는일반적으로사용자인터페이스를가지지않는다. 방송수신자가수신된정보에반응하여새로운액티비티를시작할수도있다. 또사용자에게경고하기위하여통지매니저 (Notification Manager) 를사용할수도있다. 즉백라이트를점멸한다든지, 장치를진동시키거나, 사운드를재생할수있다. 또상태바에아이콘을통하여이벤트가발생하였다는것을알릴수있다. 콘텐트제공자 콘텐트제공자 (content provider) 는데이터를관리하고다른애플리케이션에게데이터를제공하는컴포넌트이다. 데이터는파일시스템이나 SQLite 데이터베이스, 웹상에저장될수도있다. 콘텐트제공자를통하여다른애플리케이션은데이터를쿼리하거나변경할수있다. 데이터를제공합니다. 콘텐트제공자 예를들어서전화번호부애플리케이션에는많은사람들의이름과전화번호가데이터베이스의형태로저장되어있고이데이터는콘텐트제공자를통하여다른애플리케이션에제공될수있다. 즉데이터를다른애플리케이션과공유할수있는것이다. 32

기초사항 01 CHAPTER 그림 1.9 전화번호부애플리케이션은 1 개의액티비티와 1 개의콘텐트제공자로이루어진다. 콘텐트제공자는 ContentProvider 클래스를상속받아서작성된다. 또다른애플 리케이션이데이터를받고저장할수있는메소드들을재정의하여서제공한다. 다른애플리케이션의컴포넌트를실행할수있다! 안드로이드애플리케이션은 PC에서실행되는프로그램과는매우다르다. PC의프로그램은코드와데이터가합쳐져서하나의실행파일로되어있으며이실행파일이메모리에적재되어서실행된다. 그리고일반적으로 PC에서하나의프로그램은다른프로그램안에들어있는코드를사용할수없다. 즉각프로그램은서로독립적으로실행된다. 다른애플리케이션의코드를사용할수없다! 그림 1.10 PC 에서는다른애플리케이션이가지고있는코드를사용할수없다. 애플리케이션 A 애플리케이션 B 그러나안드로이드의애플리케이션은상당히다르다. 안드로이드에서는하나의애플리케이션이다른애플리케이션의컴포넌트들을이용할수있다는점이다. 물론다른애플리케이션의컴포넌트를이용하려면그애플리케이션의허가를받아야한다. 허가만얻을수있다면여러개의애플리케이션들이특정한컴포넌트를공유하여서사용하는것이가능하다. 이것은 CORBA나 COM처럼, 분산된소프트웨어컴포넌트들이동시에실행되면서하나의작업을함께하는개념과유사하다. 다만 CORBA이 33

안드로이드프로그래밍 나 COM 은분산환경이지만안드로이드는하나의모바일장치안에서작업이이루어 진다는점이다르다. 그림 1.11 안드로이드에서는다른애플리케이션이가지고있는컴포넌트를사용할수있다. 다른애플리케이션의컴포넌트사용가능 애플리케이션 A 애플리케이션 B 이것을예를들어서설명하여보자. 애플리케이션에서사용자가사진을촬영하도록하고싶다. 하지만이러한기능을제공하려면상당한코딩이필요하다. 하지만생각해보면분명히안드로이드안에는사진촬영기능을제공하는카메라애플리케이션이존재한다. 이런경우에는카메라애플리케이션에포함된사진촬영기능을사용하면된다. 물론이러한기능은컴포넌트형태로카메라애플리케이션에포함되어있지만이컴포넌트를우리의코드에포함할필요도없고링크할필요도없다. 단순히필요할때마다카메라애플리케이션의액티비티를시작하기만하면된다. 영상이캡처되면영상은우리의애플리케이션으로반환된다. 따라서이영상을우리의애플리케이션에서사용할수있다. 이것은상당히혁신적인개념으로서스마트폰처럼자원이부족한환경에서는아주바람직하다. 이것이가능하려면어떤애플리케이션의컴포넌트를실행해달라고요청이들어왔을때그애플리케이션프로세스를시작할수있어야한다. 예를들어서우리의애 34

기초사항 01 CHAPTER 플리케이션이카메라애플리케이션에포함된액티비티를시작하였다면이액티비티는우리의애플리케이션프로세스안에서실행되는것이아니라카메라애플리케이션프로세스안에서실행되어야하기때문이다. 이런이유때문에 PC의애플리케이션과는다르게, 안드로이드애플리케이션은단일실행진입점 (single entry point) 을갖지않는다 ( 즉 main() 함수가없다 ). 반면에안드로이드애플리케이션은내부에포함된컴포넌트들을통하여여러갈래로실행될수있다. 하지만우리가직접적으로다른애플리케이션의컴포넌트를실행할수있는것은아니다. 반드시안드로이드시스템에게우리의의도가포함된메시지를보내서요청하여야한다. 요청이승인되면, 안드로이드시스템이우리가요청한컴포넌트를실행한다. 6. 인텐트 애플리케이션은어떻게자신이원하는컴포넌트를안드로이드안에서찾아서실행할까? 애플리케이션은어떻게자신이원하는컴포넌트를안드로이드안에서찾아서실행할수있을까? 바로여기에사용되는것이인텐트 (intent) 라고불리는비동기적인메시지이다. 인텐트를번역한다면 의도 라고할수있다. 즉애플리케이션의의도를적어서안드로이드에전달하면안드로이드가가장적절한컴포넌트를찾아서활성화하고실행한다. 인텐트객체 ACTION:. DATA:. 그림 1.12 인텐트를통하여다른애플리케이션의컴포넌트를활성화시킬수있다. 애플리케이션 A 애플리케이션 B 35

안드로이드프로그래밍 인텐트는 Intent 클래스의객체로서컴포넌트가필요로하는요청내용을가지고있다. 액티비티와서비스의경우에는인텐트객체안에필요한액션의이름 ( view 또는 send ) 과사용할데이터의 URI를가지고있다. 예를들어서이미지를화면에표시하거나웹페이지를오픈하는요청을인텐트에기술할수있다. 어떤경우에는인텐트를통하여결과를반환받기도한다. 그림 1.13 인텐트를통하여다른애플리케이션의컴포넌트를활성화시킬수있다. 방송수신자의경우에는인텐트가공지사항을가지고있다. 예를들어서배터리가 battery is low 라는문자열이인텐트안에액션으로저장된다. 4가지의컴포넌트종류중에서콘텐트제공자는약간다른접근방식을가지는데인텐트에의하여실행되지않고, 별도의객체인콘텐트리졸버 (ContentResolver) 를사용하여서실행된다. 콘텐트리졸버가콘텐트제공자와의모든트랜잭션을처리하기때문에우리는단순히콘텐트리졸버객체의메소드를호출하면된다. 이것은보안을위하여, 정보를제공하는콘텐트제공자와정보를요청하는컴포넌트사이에추상계층을하나더둔것이다. 각컴포넌트를활성화하는메소드들을나열하여보면다음과같다. 액티비티를시작하려면 startactivity() 나 startactivityforresult() 를호출한다. 서비스를시작하려면 startservice() 나 bindservice() 를호출한다. 방송을시작하려면 sendbroadcast(), sendorderedbroadcast(), sendstickybroadcast() 를호출한다. 콘텐트제공자에쿼리를보낼려면콘텐트리졸버의 query() 를호출한다. 36

기초사항 01 CHAPTER 7. 매니페스트파일 안드로이드가어떤컴포넌트를시작하려면먼저애플리케이션안에그컴포넌트가존재하는지를알아야한다. 애플리케이션안의모든컴포넌트들은매니페스트파일 (manifest file) 안에선언되어야한다. 매니페스트는 적하목록 이라고해석하면될것이다. 매니페스트파일은 XML로작성되어있으며모든애플리케이션에대하여 AndroidManifest.xml란이름으로존재한다. 이패키지에포함된컴포넌트 액티비티 #1 콘텐츠제공자. 그림 1.14 메니페스트파일은포함된컴포넌트들을나열한다. 매니페스트파일 매니페스트파일은컴포넌트를선언하는것이외에도다음과같은여러가지일을한다. 인터넷접근과같이애플리케이션이요청하는권한을나열한다. 애플리케이션이필요한최소한의 API 레벨을선언한다. 애플리케이션이필요로하는하드웨어사양을선언한다 ( 예를들어서카메라, 블루투스, 멀티터치스크린 ). 그러나가장중요한작업은안드로이드에게애플리케이션의컴포넌트에대하여알리는것이다. 예를들면매니페스트파일에서액티비티는다음과같이선언될수있다. 37

안드로이드프로그래밍 <?xml version="1.0" encoding="utf-8"?> <manifest... > <application... > <activity android:name="kr.co.company.myactivity" android:icon="@drawable/icon.png" android:label="@string/label"... > </activity>... </application> </manifest> 액티비티정보기술 <activity> 엘리먼트의 name 어트리뷰트는 Activity의자식클래스의이름이다. icon 어트리뷰트는애플리케이션의아이콘이저장된리소스파일을가리킨다. label 어트리뷰트는액티비티가실행될때, 사용자에게표시되는텍스트이다. 다른컴포넌트들도유사한방식으로선언된다. < activity> 엘리먼트 : 액티비티선언 < service> 엘리먼트 : 서비스선언 < receiver> 엘리먼트 : 방송수신자 < provider> 엘리먼트 : 콘텐트제공자 매니페스트파일에선언되지않은액티비티, 서비스, 콘텐트제공자는시스템에서전혀알수가없다. 결과적으로실행할수없다. 참고사항 XML XML(Extensible Markup Language) 은 SGML의부분집합으로웹상에서구조화된텍스트형식의문서를전송하고수신하며처리가가능하도록만든마크업언어이다. 1996년 W3C에서제안되었으며, 기존의 HTML의한계를극복하는새로운방안으로각광을받고있다. HTML은문서의외관만정의할수있으며문서의내용에대해서는정의가불가능하다. 하지만 XML에는 HTML과는다르게사용자가용도에맞는새로운태그를정의하여서문서의내용에태그를붙일수있다. 최근 XML은어떤플랫폼에서나읽을수있는포맷을제공하기때문에인터넷상에서뿐만아니라많은영역에서개방된데이터베이스파일의역할을하고있다. 38

기초사항 01 CHAPTER 8. 안드로이드의미래 현재도많은사람들이스마트폰을이용하고있지만앞으로도스마트폰시장은확대될것이라고한다. 구글의안드로이드는미래에도상당한점유율을가질것으로예상된다. 전세계휴대폰제조업체들이안드로이드를탑재한제품을속속출시하고있기때문이다. 구글은삼성, HTC, 모토로라, LG 전자와제휴하여서안드로이드폰을전세계에출시하면서스마트폰의시장점유율을넓히고있다. 안드로이드는오픈된운영체제이기때문에스마트폰을한층저렴한가격으로생산할수있어서경쟁력을높일수있다. 허니콤에서는태블릿도지원할수있어서이것도안드로이드의인기에일조할예정이다. 발을넓혀가고있는안드로이드의미래는밝아요. 39

찾아보기 찾아보기 ㄱ가속도센서 (accelerometer) 713 가시적인프로세스 455 가중치 141 갤러리 (gallery) 331 결과집합 (result set) 501 공유프레퍼런스 (Shared Preferences) 481 구글개발자등록 760 구글지도라이브러리 581 구글플레이 (Google Play) 760 권한 (permission) 410 그래디언트 (gradient) 276 그리드뷰 (GridView) 328 ㄴ내부클래스 (inner class) 166 ㄷ다중스레딩 (multi-threading) 452 달빅 (Dalvik) 가상머신 23 대체리소스 393 대화상자 (dialog) 209 드로워블애니메이션 (drawable animation) 261 ㄹ라디오버튼 (radio button) 177 레이아웃 135 레이팅바 180, 338 로그캣 (logcat) 384 리소스 (resource) 89, 392 리스트뷰 (ListView) 319 ㅁ마진 143 매니페스트 (manifest) 94 매니페스트파일 (manifest file) 37 맵뷰 (MapView) 클래스 592 멀티태스킹 (multi-tasking) 348 메인스레드 (main thread) 453 명시적인텐트 361 무명클래스 (anonymous class) 169, 170 ㅂ방송수신자 (broadcast receiver) 31, 435 방향센서 709 배경스레드 ( background thread) 458 버튼 (Button) 130 변환 (transformation) 314 병렬작업 (muli-tasking) 452 보안 (security) 408 뷰 (View) 110 뷰그룹 (ViewGroup) 110 뷰애니메이션 (view animation) 252, 257 블루투스 (Bluetooth) 675 비터치모드 187 비트맵그래디언트 281 ㅅ사용자인터페이스 (UI; User Interface) 110 764

찾아보기 index 사용자정의권한 412 상대적레이아웃 149 색상 231 샌드박스 (sandbox) 408 서버 / 클라이언트통신 552 서브메뉴 (submenu) 207 서비스 (service) 31, 416 서피스뷰 264 선형레이아웃 (linear layout) 135 소프트웨어스택 (software stack) 26 스레드 (thread) 453 스무스컬러링 310 스타일어트리뷰트리소스 400 스피너 (Spinner) 325 시크바 (SeekBar) 336 ㅇ안드로이드 (android) 18 안드로이드 SDK 51 안드로이드애플리케이션 (application) 345 암시적인텐트 (implicit intent) 361, 372 애플리케이션마켓 19 애플리케이션배포 (publishing) 748 애플리케이션버전 757 애플리케이션프레임워크 27 액티비티 (activity) 30, 345 액티비티스택 (activity stack) 347 액티비티의생애주기 (life cycle) 351 앤티에일리어싱 (AntiAliasing) 234 어노테이션 80 어댑터뷰 (AdapterView) 318 에디트텍스트 (edit text) 174 역지오코딩 (reverse geocoding) 578 연결타입의서비스 (bound service) 427 영상처리 (image processing) 294 옵션메뉴 197 외부저장공간 491 원형그래디언트 279 위치관리자 (Location Manager) 572 위치기반애플리케이션 566 위치리스너 (Location Listener) 574 위치제공자 (Location Provider) 572 윈도폰 7 18 이미지뷰 (ImageView) 128 이벤트구동 (event-driven) 방식 160 이벤트리스너 (event listener) 165 이클립스 (eclipse) 46 인텐트 (intent) 35, 360 인텐트필터 378 ㅈ작업스레드 ( worker thread) 458 장치검색 (device discovery) 678 전경프로세스 455 절대적레이아웃 151 주소록 (contacts) 659 지역화 (localization) 402 지오코딩 (geocoding) 578 ㅊ체크박스 175 ㅋ캔버스클래스 275 커서 (cursor) 501 커스텀대화상자 (custom dialog) 219 커스텀버튼 (custom button) 182 컨텍스트메뉴 (context menu) 203 콘텐트 URI 514 콘텐트제공자 (content provider) 32 콜백메소드 (callback method) 161 클라우드컴퓨팅 (cloud computing) 25 765

찾아보기 ㅌ태그디스패치시스템 722 터치모드 (touch mode) 187 테이블레이아웃 147 텍스트뷰 (TextView) 125 텍스트정렬 236 토글버튼 (toggle button) 179 트랜스퍼모드 (transfer mode) 282 트윈애니메이션 (tween animation) 257 ㅍ패딩 143 페어링 (pairing) 679 페인트클래스 275 평행이동 (translation) 285 포커스 (focus) 186 폰트 235 폴링 (polling) 방식 160 프레임레이아웃 145 프레퍼런스액티비티 (PreferenceActivity) 485 프로그레스바 (progress bar) 334 프로세스 (process) 453 프로퍼티애니메이션 (property animation) 252 플랫컬러링 311 ㅎ핸들러 (handler) 464 ADT(Android Development Tool) 55 AsyncTask 클래스 469 AVD(Android Virtual Device) 58 ConnectivityManager 클래스 542 ContactsContract 클래스 662 Contacts 테이블 660 ContentResolver 객체 514 Data 테이블 660 DatePicker 위젯 338 DDMS 386 DOM 파서만 561 GPS(Global Position System) 568 gravity 속성 137 ios 18 JDK 44 JET 오디오 616 keytool 명령어 751 MediaPlayer 클래스 606 MediaRecorder 클래스 617, 641 NDEF(NFC Data Exchange Format) 720 NFC(Near Field Communication) 718 RawContacts 테이블 660 SensorManager 클래스 703 SQL 499 SQLite 408 SQLiteOpenHelper 502 TelephonyManager 클래스 655 TimePicker 위젯 338 UI 스레드 (user interface thread) 457 VideoView 클래스 639 View 클래스 121 WebView 위젯 547 XML 처리 560 2차원변환 (transformation) 285 766

저자약력 천인국 ( 千仁國 ) 1983년서울대학교전자공학과공학사 1985년한국과학기술원전기및전자공학과공학석사 1993년한국과학기술원전기및전자공학과공학박사 1985년 ~1988년삼성전자종합연구소주임연구원 1993년 ~ 현재순천향대학교정보기술공학부교수 2005년캐나다 UBC 방문교수 E-mail: chunik@sch.ac.kr 저자와의협의하에인지를생략합니다. 그림으로쉽게설명하는안드로이드프로그래밍 천인국지음 초판인쇄 : 2012. 8. 14 초판발행 : 2012. 8. 20 발행인 : 김승기 발행처 : 생능출판사 신고번호 : 제 406-2005-000002 호 신고일자 : 2005. 1. 21 - 경기도파주시문발동 507-12 파주출판도시대표전화 : (031)955-0761, FAX : (031)955-0768 홈페이지 : http://www.booksr.co.kr I S B N : 978-89-7050-739-2 파본및잘못된책은바꾸어드립니다. 정가 38,000 원