ITWorld H o w T o 초보개발자를위한안드로이드스튜디오입문 모바일생활을더욱편리하게만들참신한발상이떠올랐을때개발자에게가장필요한것은아이디어를손 에잡히는앱으로변환해주는개발도구일것이다. 구글이공식지원하는통합개발환경안드로이드스튜디 오는구글클라우드플랫폼과연계되어속도와개발자편의성등을크게높였고, 풍부한안드로이드개발생 태계조성에중요한역할을하고있다. 기본설정부터실제작동하는앱을빌드하기까지튜토리얼을따라가 면서안드로이드스튜디오에익숙해지고, 더욱자유롭게아이디어를펼쳐보자. 1 부 안드로이드스튜디오설치와설정과정 2 부 세부내용알아보고앱코딩시작하기 3 부 앱빌드후실행하기 무단전재재배포금지 본 PDF 문서는 IDG Korea 의프리미엄회원에게제공하는문서로, 저작권법의보호를받습니다. IDG Korea 의허락없이 PDF 문서를온라인사이트등에무단게재, 전재하거나유포할수없습니다.
1 안드로이드스튜디오설치와설정과정 Jeff Friesen JavaWorld 최근몇년동안의추세를볼때현재모바일운영체제시장은안드로이드가지배한다고해도과언이아니다. 자바기반의안드로이드운영체제는새로운디지털골드러쉬를일으켰고모바일앱에서기회를얻으려는프로그래 머들이앞다투어안드로이드로모여드는중이다. Indeed.com 에서구인검색을 해보면안드로이드와관련된일자리가풍부하다는것을알수있다. 성공적인안드로이드개발자가되기위해서는자바, 안드로이드 API(application programming interface), 안드로이드앱아키텍처에대한이해가필요하 다. 또한, 적절하고효과적인개발환경을사용하는것도필수적이다. 한때이 클립스 (Eclipse) 통합개발환경 (IDE) 과 ADT(Android Development Tool) 플 러그인이안드로이드앱개발에쓰인대표적인플랫폼이었고, 현재의대세는안 드로이드스튜디오다. 이강좌는안드로이드스튜디오를처음접하는사람을위한입문과정이다. 우선스튜디오를간략히소개한후다운로드, 설치, 실행하는방법을살펴보고, 그다음대부분의시간을실제안드로이드스튜디오를사용해서움직이는모바 일앱을개발하는데할애할것이다. 1 부에서는안드로이드스튜디오에서첫안 드로이드프로젝트를시작하고프로젝트작업공간을살펴본다. 2 부에서는앱 을코딩하면서안드로이드스튜디오에서소스코드와리소스를프로젝트에입 력하는방법을배운다. 마지막으로 3 부에서는에뮬레이션하드웨어기기와실 제아마존킨들파이어 HD 7 태블릿을모두사용해서앱을빌드하고실행해 볼것이다. 안드로이드스튜디오시작하기 안드로이드스튜디오는구글이공식적으로지원하는안드로이드앱개발 IDE 로, 인텔리J(IntelliJ) IDE를기반으로하며아파치라이선스 2.0에따라무료배포된다. 2016년 9월현재최신안정화버전은 2.1.1이며다음과같은기능을포함한다. IT World 1
모든안드로이드기기를대상으로개발이가능한통합환경 안드로이드 TV 앱과안드로이드웨어앱빌드지원 일반적인안드로이드디자인과구성요소를만들기위한템플릿기반마법사 사용자인터페이스구성요소를끌어서놓을수있고여러가지화면구성에서레이아웃을미리볼수있는레이아웃편집기 안드로이드별리팩토링및퀵픽스 그래들 (Gradle) 기반빌드지원 성능, 사용성, 버전호환성및기타문제를잡아내기위한린트 (Lint) 도구 프로가드 (ProGuard) 통합및앱서명기능 빠르고다양한기능을갖춘에뮬레이터 새 APK( 애플리케이션패키지압축파일 ) 를빌드하지않고도실행중인앱에변경사항을푸시하기위한즉시실행 (Instant Run) 기능 구글클라우드플랫폼을기본지원하므로구글클라우드메시징및앱엔진과통합가능 C++ 및 NDK(Native Developer s Kit) 지원 플러그인을통해안드로이드스튜디오를확장하기위한플러그인아키텍처 안드로이드스튜디오다운로드구글은윈도우, 맥OS X, 리눅스플랫폼용안드로이드스튜디오를제공하며안드로이드스튜디오홈페이지에서다운로드할수있다 ( 다운로드페이지에는전통적인 SDK와안드로이드스튜디오명령줄도구도있다 ). 안드로이드스튜디오를다운로드하기전에사용중인플랫폼이다음요구사항중하나를충족하는지확인해야한다. 윈도우운영체제 마이크로소프트윈도우 7/8/10(32비트또는 64비트 ) 최소 2GB RAM( 권장 8GB RAM) 최소 2GB 디스크여유공간 (IDE용 500MB + 안드로이드 SDK와에뮬레이터시스템이미지용 1.5GB). 권장 4GB 1280 x 800 이상의화면해상도 JDK 8 에뮬레이터가속 : 64 비트운영체제와인텔 VT-x, 인텔 EM64T( 인텔 64) 및실행비활성 화 (XD) 비트기능을지원하는인텔프로세서 맥 OS 맥 OS X 10.8.5 ~ 10.11.4( 엘캐피탄 ) 최소 2GB RAM( 권장 8GB RAM) 2 IT World
최소 2GB 디스크여유공간 (IDE용 500MB + 안드로이드 SDK와에뮬레이터시스템이미지용 1.5GB). 권장 4GB 1280 x 800 이상의화면해상도 JDK 6 리눅스운영체제 GNOME 또는 KDE 데스크톱 : 우분투 12.04, 프리사이즈팡골린 (Precise Pangolin, 32비트애플리케이션을실행할수있는 64비트배포판 ) 에서테스트됨 32비트애플리케이션을실행할수있는 64비트배포판 GNU C 라이브러리 (glibc) 2.11 이상 최소 2GB RAM( 권장 8GB RAM) 최소 2GB 디스크여유공간 (IDE용 500MB + 안드로이드 SDK와에뮬레이터시스템이미지용 1.5GB). 권장 4GB 1280 x 800 이상의화면해상도 JDK 8 에뮬레이터가속 : 인텔 VT-x, 인텔 EM64T( 인텔 64) 및실행비활성화 (XD) 비트기능을지원하는인텔프로세서또는 AMD 가상화 (AMD-V) 를지원하는 AMD 프로세서 사용중인운영체제가안드로이드 2.1.1과호환됨을확인했으면해당되는안드로이드스튜디오배포파일을다운로드한다. 안드로이드스튜디오다운로드페이지는필자의운영체제가 64비트윈도우 8.1임을자동으로인식하고 androidstudio-bundle-143.2821654-windows.exe 파일을다운로드하도록선택했다. 포함된설치프로그램과안드로이드 SDK android-studio-bundle-143.2821654-windows.exe에는설치프로그램과안드로이드 SDK가포함되어있다. 설치프로그램과 SDK가없는배포파일을선택해서다운로드할수도있다. 64비트윈도우 8.1에안드로이드스튜디오설치하기 android-studio-bundle-143.2821654-windows.exe를실행해서설치프로세스를시작했다. 가장먼저그림 1과같은안드로이드스튜디오설치대화상자가표시된다. IT World 3
그림 1 안드로이드스튜디오설치 다음 (Next) 을클릭하면그다음대화상자로진행되는데여기서안드로이드 SDK( 설치프로그램에포함됨 ) 와안드로이드가상기기 (AVD) 설치를거부할수 있는옵션이제공된다. 그림 2 안드로이드 SDK 과 AVD 설치여부선택 이번설치에서는기본설정을그대로유지했다. 다음 (Next) 을클릭하면라 이선스동의를확인하는대화상자로진행된다. 라이선스에동의하여설치를계 속진행한다. 그림 3 라이선스에동의해서설치진행 4 IT World
다음대화상자에서는안드로이드스튜디오와안드로이드 SDK 의설치위치 를변경할수있다. 그림 4 안드로이드스튜디오와안드로이드 SDK 설치위치설정 위치를변경하거나기본위치를그대로두고 다음 (Next) 을클릭한다. 설치프로그램은기본적으로프로그램실행을위한바로가기를생성하기를원할경우바로가기생성을거부할수있다. 가급적바로가기를생성하고, 설치 (Install) 버튼을클릭해서설치를시작한다. 그림 5 안드로이드스튜디오바로가기생성 이후대화상자에는안드로이드스튜디오와안드로이드 SDK의설치진행률이표시된다. 자세히보기 (Show Details) 버튼을클릭하면설치진행과정에관한세부정보를볼수있다. 설치가완료되었다는메시지가표시되면 다음 (Next) 을클릭한다. 그림 6과같은대화상자가표시된다. IT World 5
그림 6 소프트웨어를실행하려면안드로이드스튜디오시작 (Start Android Studio) 확인란이선택된상태그대로둔다. 설치를완료하려면안드로이드스튜디오시작 (Start Android Studio) 확인 란이선택된상태로마침 (Finish) 을클릭한다. 안드로이드스튜디오실행 안드로이드스튜디오를실행하면다음과같은시작화면이표시된다. 그림 7 안드로이드스튜디오시작화면 처음실행하면프로그램구성을위한몇가지대화상자가등장한다. 첫번째 대화상자에서는이전에설치했던안드로이드스튜디오버전에서설정을가져 올지여부를묻는다. 6 IT World
그림 8 설정가져오기 기존에설치한버전이없으면, 기본설정그대로두고 확인 (OK) 을클릭한 다. 다시시작화면이표시되고이후안드로이드스튜디오설정마법사상자가 나타난다. 그림 9 안드로이드 SDK 및개발환경설정확인 다음 (Next) 을클릭하고설정마법사의안내에따라 SDK 구성요소의설치 유형을선택한다. 일단기본표준설정을그대로유지하는것이좋다. 그림 10 설치유형선택 다음 (Next) 을클릭하고설정을확인한다음 마침 (Finish) 을선택해서계 속진행한다. IT World 7
그림 11 설정검토 마법사가다양한구성요소를다운로드해서압축을푼다. 다운로드하는압 축파일과내용에대한추가정보를보려면 자세히보기 (Show Details) 를클 릭한다. 그림 12 마법사가안드로이드스튜디오구성요소를다운로드하고압축을푼다. 인텔기반컴퓨터가아니라면, 구성요소가완전히다운로드되고압축이해제 된후그림 13 과같은경고메시지가나타날수있다. 그림 13 인텔기반하드웨어가속을사용할수없음 8 IT World
이경우선택할수있는방법은느린에뮬레이터를감수하고그냥사용하거나안드로이드기기로개발속도를높이는것이다. 후자에대해서는가이드후반에서구체적으로알아본다. 마지막으로 마침 (Finish) 을클릭해서마법사를완료한다. 이제그림 14와같은안드로이드스튜디오시작대화상자가표시된다. 그림 14 안드로이드스튜디오시작 이제이대화상자에서새로운안드로이드스튜디오프로젝트를시작하거나 기존프로젝트작업을이어갈수있다. 바탕화면의안드로이드스튜디오바로 가기를두번클릭해서언제든지이대화상자에접근할수있다. 안드로이드스튜디오모바일앱처음만들기 안드로이드스튜디오를가장빠르게학습하는방법은안드로이드스튜디오를사용해앱을개발하는것이다. 이강좌에서는 Hello, World 애플리케이션을약간변형해서 Welcome to Android 메시지를표시하는간단한모바일앱부터시작할것이다. 이어질단계에서는새안드로이드스튜디오프로젝트를시작해서프로젝트작업공간을익힌다. 이작업공간에는 2부에서앱을코딩하는데사용할프로젝트편집기가포함된다. 새프로젝트시작하기지금까지의설정단계에따랐다면안드로이드스튜디오대화상자가아직열려있는상태일것이다. 여기서 새안드로이드스튜디오프로젝트시작 (Start a new Android Studio project) 을클릭한다. 그림 15와같은 새프로젝트만들기 (Create New Project) 대화상자가표시된다. IT World 9
그림 15 새프로젝트만들기 애플리케이션이름으로 W2A(Welcome to Android의약어 ) 를, 회사도메인이름으로 javajeff.ca를입력한다. 프로젝트위치가 C:\Users\jeffrey\ AndroidStudioProjects\W2A로설정될것이다. 다음 (Next) 을클릭해서대상기기를선택한다. 그림 16 대상기기범주선택 안드로이드스튜디오에서만드는모든앱에대한폼팩터, 즉대상기기의범주를선택할수있다. 전화기및태블릿 (Phone and Tablet) 메뉴에서필자의아마존킨들파이어 HD 태블릿이지원하는기본 API 15: Android 4.0.3(IceCreamSandwich) 최소 SDK 설정을그대로유지하려고했지만, 현재안드로이드스튜디오는이 API 수준을지원하지않으므로 (SDK 관리자에 4.0.3 시스템이미지를추가해도마찬가지 ) API 14: Android 4.0(IceCreamSandwich) 으로변경했다. 역시필자의태블릿에서지원하는 API다. 다음 (Next) 을선택하면앱의기본동작템플릿을선택할수있다. 여기서는 빈동작 (Empty Activity) 템플릿을선택하고 다음 (Next) 을클릭한다. 10 IT World
그림 17 동작템플릿지정 다음순서는동작맞춤설정이다. 그림 18 동작맞춤설정 동작이름으로 W2A 를, 레이아웃이름으로 main 을입력한후 마침 (Finish) 을클릭해서단계를마친다. 프로젝트를만드는중이라는메시지가표시된후 프로젝트작업공간이열린다. 그림 19 안드로이드스튜디오작업공간 프로젝트작업공간은메뉴표시줄, 도구모음, 작업영역, 별도의창 ( 예 : 그 래들콘솔창 ) 으로열리는추가구성요소, 상태표시줄로구성된다. 오늘의팁 (Tip of the Day) 대화상자도표시되는데필요없다면비활성화할수있다. IT World 11
메뉴및도구모음에서 AVD 관리자또는 SDK 관리자접근전통적인 AVD 관리자나 SDK 관리자에접근하려면 도구 (Tools) 메뉴에서 안드로이드 (Android) 를선택하고팝업메뉴에서 AVD 관리자 (AVD Manager) 나 SDK 관리자 (SDK Manager) 를선택한다 ( 또는각각의도구모음아이콘클릭 ). 프로젝트및편집기창프로젝트작업공간으로들어가면 W2A가현재프로젝트로나타나지만, 프로젝트세부정보는바로표시되지않는다. 잠깐기다리면두개의새창에프로젝트세부정보가표시된다. 그림 20 프로젝트및편집기창 프로젝트창은트리형태로구성되며최상위가지는앱 (App) 과그래들스크 립트 (Gradle Scripts) 다. 앱가지는다시매니페스트 (manifests), 자바 (java), res 하위가지로나뉜다. 매니페스트에는안드로이드앱의구조를설명하는 XML 파일인 AndroidManifest.xml이저장된다. 이파일은권한설정 ( 해당되는경우 ) 과기타앱에대한세부정보도기록한다. 자바에는패키지계층에따라앱의자바소스파일이포함된다. 이예제에서는 ca.javajeff. w2a다. res에는앱의리소스파일이저장되며각파일은드로어블 (drawable), 레이아웃 (layout), 미니맵 (minimap), 값 (values) 하위가지로분류된다. - 드로어블 : 앱의아트워크를저장하기위한위치로처음에는비어있음 - 레이아웃 : 앱의레이아웃파일이포함된위치. 처음에는 main.xml( 주동작의레이아웃파일 ) 이여기에저장됨 - 미니맵 : 다양한해상도의런처화면아이콘이포함된다양한 ic_launcher.png 파일의위치 - 값 : colors.xml, dimens.xml, strings.xml, styles.xml이포함된위치 12 IT World
그래들스크립트가지에는그래들기반빌드시스템에사용되는다양한.gradl( 예 : build.gradle) 및.properties( 예 : local.properties) 파일이나타난다. 가지이름과디렉터리 / 파일이름 각가지 / 하위가지는디렉터리이름또는파일이름에해당한다. 예를들어, res 는 res 디렉터리에해당하며 strings.xml 은 strings.xml 파일에해당한다. 1 부맺음말 지금까지안드로이드스튜디오를설치및구성하고첫안드로이드스튜디오모바일앱을위한프로젝트를만들었다. 이제안드로이드애플리케이션을빌드할준비가된것이다. 안드로이드스튜디오에서애플리케이션빌드란모바일앱을위한자바소스코드와리소스파일로새프로젝트의내용을채우는것을의미한다. 각기능이동작하는첫안드로이드모바일앱을만들준비가됐다면 2 부로넘어가자. 테크놀로지및비즈니스의사결정을위한최적의미디어파트너 기업 IT 책임자를위한글로벌 IT 트렌드와깊이있는정보 ITWorld 의주독차층인기업 IT 책임자들이원하는정보는보다효과적으로 IT 환경을구축하고 IT 서비스를제공하여기업의비즈니스경쟁력을높일수있는실질적인정보입니다. ITWorld 는단편적인뉴스를전달하는데그치지않고업계전문가들의분석과실제사용자들의평가를기반으로한깊이있는정보를전달하는데주력하고있습니다. 이를위해다양한설문조사와사례분석을진행하고있으며, 실무에활용할수있고자료로서의가치가있는내용과형식을지향하고있습니다. 특히 IDG 의글로벌네트워크를통해확보된방대한정보와전세계 IT 리더들의경험및의견을통해글로벌 IT 의표준패러다임을제시하고자합니다. IT World 13
2 세부내용알아보고앱코딩시작하기 Jeff Friesen JavaWorld 초보자용안드로이드스튜디오입문강좌 1부에서는개발환경에안드로이드스튜디오를설치하고프로젝트작업공간을살펴봤다. 이번 2부에서는첫앱을코딩해볼것이다. 코딩할애니메이션모바일앱은하나의동작으 로구성되며구글안드로이드로봇캐릭터와이캐릭터를움직이기위한버튼 이있다. 버튼을클릭하면캐릭터의색이녹색에서빨간색, 파란색으로차차바 뀌었다가다시녹색으로돌아온다. 딱히쓸모가있는앱은아니지만, 앱을작 성하는과정에서안드로이드스튜디오사용법을익힐수있다. 3 부에서는앱을 컴파일해서안드로이드기기에뮬레이터와 7 HD 킨들파이어태블릿에서실 행해본다. 이강좌의예제애플리케이션을위한자바소스를다운로드한다. 예제앱다운로드 (by Jeff Friesen for JavaWorld) 프로젝트편집기시작하기 1부의마지막부분에서안드로이드스튜디오프로젝트작업공간을소개했다. 프로젝트작업공간에는안드로이드스튜디오에서모바일앱코드를작성하고리소스를지정하는작업을수행하는영역인프로젝트편집기가포함된다. 그림 21에서프로젝트편집기를볼수있다. 그림 21 안드로이드스튜디오프로젝트편집기 14 IT World
탭을사용해서자바소스파일, XML 리소스파일및기타파일을살펴볼수있다. 프로젝트창에서파일이름을두번클릭하면프로젝트파일용탭을추가할수있다. 그림 21에서볼수있듯이현재프로젝트편집기에는 W2A.java( 앱의주동작을위한골격자바소스코드 ) 와 main.xml( 앱의주동작을위한기본 XML 기반레이아웃 ), 두개의탭이있다. 현재열려있는탭은 W2A.java이다. W2A 예제앱 W2A 앱은안드로이드로봇캐릭터와버튼을표시하는하나의주동작으로 구성된다. 사용자가버튼을누르면로봇의색이변경되는애니메이션이작동한 다. 이단원에서는동작의소스코드와리소스를살펴본다. W2A.java 세부내용과코딩 동작의소스코드는목록 1 의 W2A.java 파일에저장된다. 목록 1. W2A.java package ca.javajeff.w2a; import android.app.activity; import android.graphics.drawable.animationdrawable; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.imageview; public class W2A extends Activity { AnimationDrawable androidanimation; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); ImageView androidimage = (ImageView) findviewbyid(r.id.android); androidimage.setbackgroundresource(r.drawable.android_animate); androidanimation = (AnimationDrawable) androidimage.getbackground(); final Button btnanimate = (Button) findviewbyid(r.id.animate); View.OnClickListener ocl; ocl = new View.OnClickListener() IT World 15
} { @Override public void onclick(view v) { androidanimation.stop(); androidanimation.start(); } }; btnanimate.setonclicklistener(ocl); } W2A.java 파일의시작부분은패키지문으로, 이를통해 W2A 클래스를저장하는패키지 (ca.javajeff.w2a) 의이름을지정한다. 그뒤로다양한안드로이드 API 유형을가져오는일련의가져오기문이나오고, 그다음으로 android.app.activity를확장하는 W2A 클래스기술코드가있다. W2A는먼저 android.graphics.drawable.animationdrawable 형식의 androidanimation 인스턴스필드를선언한다. AnimationDrawable 형식의객체는프레임별애니메이션을기술하는데, 여기서현재드로어블이애니메이션시퀀스의다음드로어블로대체된다. 애니메이션드로어블 (AnimationDrawable) 이란? 드로어블은예를들어이미지와같이그릴수있는것을나타낸다. AnimationDrawable은추상적 android.graphics.drawable.drawable 클래스를간접적으로확장하는데, 일반적인드로어블추상화라할수있다. oncreate() 메소드앱의모든작업은 W2A의오버라이딩 oncreate(bundle) 메소드에서이루어진다. 다른메소드는필요없기때문에앱은복잡하지않고단순하다. oncreate(bundle) 은먼저모든오버라이딩동작메소드에서따라야하는규칙, 즉같은이름의슈퍼클래스메소드를호출한다. 그런다음 setcontentview(r.layout.main) 을실행해서앱의사용자인터페이스를설정한다. R.layout.main은별도의파일에위치하는애플리케이션리소스의식별자 (ID) 다. 이 ID를해석하자면다음과같다. R 은앱이빌드될때생성되는클래스의이름이다. 이클래스의이름이 R 인이유는클래 16 IT World
스의내용이레이아웃, 이미지, 문자열, 색상등다양한종류의애플리케이션리소스를지정하기때문이다. layout은 R내에중첩된클래스이름이다. ID가이클래스에저장되는애플리케이션리소스는특정레이아웃리소스를기술한다. 각애플리케이션리소스종류는비슷한방식으로명명된중첩된클래스와연결된다. 예를들어 string은문자열리소스를지정한다. main은 layout 내에선언되는 int 기반상수의이름이다. 이리소스 ID는주레이아웃리소스를지정한다. 구체적으로보면 main은주동작의레이아웃정보를저장하는 main. xml 파일을가리킨다. main은 W2A의유일한레이아웃리소스다. R.layout.main을 Activity의 void setcontentview(int layoutresid) 메소드에전달하면안드로이드는 main.xml에저장된레이아웃정보를사용하여사용자인터페이스화면을생성한다. 이때내부적으로안드로이드는 main.xml에기술된사용자인터페이스구성요소를생성하고이를 main.xml의레이아웃데이터에지정된대로기기화면에배치한다. 화면은뷰 ( 사용자인터페이스구성요소의추상화 ) 와뷰그룹 ( 관련사용자인터페이스구성요소를그룹화하는뷰 ) 을기반으로한다. 뷰는 android.view.view 클래스를하위클래스로두는클래스의인스턴스이며 AWT/Swing 구성요소와유사하다. 뷰그룹은추상 android.view.viewgroup 클래스를하위클래스로두는클래스의인스턴스이며 AWT/Swing 컨테이너와유사하다. 안드로이드는특정뷰 ( 예 : 버튼또는스피너 ) 를위젯으로지칭한다. 계속해서 oncreate(bundle) 은 ImageView androidimage = (ImageView) findviewbyid(r. id.android); 를실행한다. 이문은먼저 View의 View findviewbyid(int id) 메소드를호출해 main.xml에선언되고 android로식별되는 android.widget.imageview 요소를찾는다. 이문은 ImageView를인스턴스화하고 main.xml 파일에선언된값으로초기화한다. 그런다음이객체의참조를로컬변수 androidimage에저장한다. 이미지뷰와애니메이션드로어블다음으로, androidimage.setbackgroundresource(r.drawable.android_animate); 문은 ImageView의상속된 (View에서상속 ) void setbackgroundresourcemethod(int resid) 메소드를호출하고뷰의배경을 resid로식별되는리소스로설정한다. R.drawable. android_animate 인수는 android_animate.xml( 뒷부분에서설명 ) 이라는 XML 파일을지정하는데, 이파일은애니메이션에대한정보를저장하고 res의 drawable 하위디렉터리에저장된다. setbackgroundresource() 호출은 androidimage 뷰를 android_animate.xml에기술된이미지시퀀스 ( 이뷰에그려짐 ) 에연결한다. 이메소드호출의결과로첫이미지가그려진다. ImageView는앱에서 AnimationDrawable 메소드를호출하여드로어블시퀀스를애니메이션으로처리할수있게해준다. 이를위해먼저앱은 ImageView의 IT World 17
AnimationDrawable을획득해야한다. 그뒤의 androidanimation = (AnimationDrawable) androidimage.getbackground(); 할당문이 ImageView의상속된 (View에서상속 ) Drawable getbackground() 메소드를호출함으로써이작업을수행한다. 이메소드는주어진 ImageView에대한 AnimationDrawable을반환하는데, 이는이후 androidanimation 필드에할당된다. AnimationDrawable 인스턴스는애니메이션을시작하고멈추는데사용된다. 이프로세스에대해서는잠시후설명할것이다. 마지막으로, oncreate(bundle) 은 Animate 버튼을생성한다. findbyviewid(int) 를호출하여 main.xml에서버튼정보를획득한다음 android.widget.button 클래스를인스턴스화한다. 그후 View 클래스의중첩된 onclicklistener 인터페이스를사용하여리스너 (listener) 객체를생성한다. 이객체의 void onclick(view v) 메소드는사용자가버튼을클릭할때마다호출된다. 리스너는 View의 void setonclicklistener(adapterview. OnClickListener listener) 메소드를호출하여 Button 객체에등록된다. Animate의클릭리스너는애니메이션을멈춘다음시작하기위해 androidanimation.stop(), androidanimation.start(); 를차례로호출한다. 이후 Animate 버튼클릭시새애니메이션이시작될수있도록stop() 메소드가 start() 전에호출된다. 애플리케이션코드를업데이트하고저장하기계속하기전에 W2A.java 탭의골격코드를목록 2의코드로대체한다. Ctrl+S를누르거나파일 (File) 메뉴에서저장 (Save) 을선택해서이창의내용을저장한다. main.xml 세부내용과코딩 앱의주동작은 main.xml 파일에저장되며목록 2 에나와있는 XML 기반레 이아웃과연결된다. 목록 2. main.xml <?xml version= 1.0 encoding= utf-8?> <LinearLayout xmlns:android= http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_width= fill_parent android:layout_height= fill_parent android:gravity= center android:background= #ffffff > <ImageView android:id= @+id/android android:layout_width= wrap_content android:layout_height= wrap_content 18 IT World
android:layout_marginbottom= 10dip /> <Button android:id= @+id/animate android:layout_width= wrap_content android:layout_height= wrap_content android:text= @string/animate /> </LinearLayout> XML 선언이후목록 2는포함된위젯 ( 중첩된레이아웃포함 ) 을화면에서가로또는세로로배치하기위해레이아웃 ( 포함된뷰를일정한방식으로안드로이드기기의화면에배치하는뷰그룹 ) 을지정하는 LinearLayout 요소를선언한다. <LinearLayout> 태그는이선형레이아웃을제어하기위한여러가지특성을지정한다. 이러한특성에는다음이포함된다. orientation은선형레이아웃을가로또는세로로지정한다. 포함된위젯은가로또는세로로배치되며기본방향은가로다. 이특성에는 horizontal 과 vertical, 두가지값만할당할수있다. layout_width는레이아웃의너비를지정한다. 사용가능한값은 fill_parent ( 부모만큼의너비 ) 와 wrap_content ( 내용을담을만큼의너비 ) 이다. ( 참고로 fill_parent는안드로이드 2.2에서 match_parent로바뀌었지만, 지금까지지원되며널리사용된다.) layout_height는레이아웃의높이를지정한다. 사용가능한값은 fill_parent ( 부모만큼의높이 ) 와 wrap_content ( 내용을담을만큼의높이 ) 이다. gravity는화면에대한레이아웃의상대적인위치를지정한다. 예를들어 center 는레이아웃이화면에서가로, 세로로중앙에위치하도록지정한다. background는배경이미지를그라데이션이나단색으로지정한다. 강좌에서는단순하게하기위해 16진수색식별자로흰색단색배경을지정했다 (#ffffff). ( 색은일반적으로 colors.xml에저장되며이파일에서참조된다.) LinearLayout 요소는 ImageView 및 Button 요소를캡슐화한다. 이러한각요소는 id 특성을지정하는데, 이특성은요소를지정하여코드에서참조할수있도록한다. 이특성에할당되는리소스식별자 (@ 으로시작하는특수구문 ) 는앞에 @+id가붙는다. 예를들어 @+id/android는 ImageView 요소를 android로지정한다. 이요소는코드에서 R.id.android를지정하여참조된다. 여기에서는내용배치를결정하기위한 layout_width 및 layout_height 특성도지정한다. 요소가실물크기로표시되도록각특성에는 wrap_content가할당된다. ImageView는 layout_marginbottom 특성을지정하여세로방향으로아래버튼까지의공백구분자를지정한다. 공백은 10 dip( 밀도독립적픽셀 ) 로지정된다. dip 은앱이화면밀도에대해독립적으로레이아웃크기 / 위치를표현하는데사용 IT World 19
밀도독립적픽셀이란? 밀도독립적픽셀은안드로이드가전제하는기본밀도인 160dpi 화면에서하나의물리적픽셀에해당한다. 런타임에안드로이드는사용중인화면의실제밀도를기준으로필요한 dip 단위의스케일링을알아서처리한다. dip 단위는픽셀 = dip * ( 밀도 / 160) 공식에따라화면밀도로변환된다. 예를들어 240dip 화면에서 1dip은 1.5개의물리적픽셀과같다. 구글은다양한기기화면에서사용자인터페이스가적절히표시되도록하기위해앱의사용자인터페이스를 dip 단위로정의할것을권장한다. 할수있는가상픽셀이다. 새레이아웃선택및저장 1부에서앱을설정할때 빈동작 템플릿을선택했지만, 이템플릿이제공하는 XML 레이아웃은이강좌에서소개하는튜토리얼앱에적합하지않다. 새레이아웃을선택하려면먼저 main.xml 탭을클릭한다. 그러면사용하기편리한레이아웃편집기가표시된다. 그림 22 안드로이드스튜디오의레이아웃편집기 계속진행하기전에 main.xml 탭맨아래의 텍스트 (Text) 탭 ( 기본적으로는 디자인 (Design) 탭이표시됨 ) 을클릭한다. 템플릿 XML 을목록 2 의코드로교 체한다음창내용을저장한다. strings.xml의세부내용과코딩 W2A는다른위치에서참조되는문자열데이터를 strings.xml을사용하여저장한다. 목록 2로돌아가서보면 <Button> 태그에 android:text= @string/animate 특성이포함된것을볼수있다. 이특성은 strings.xml에저장된 animate 문자열리소스를참조하는 @string/animate를통해버튼의텍스트를참조한다. 목록 3에는이파일의내용이나와있다. 20 IT World
목록 3. strings.xml <?xml version= 1.0 encoding= utf-8?> <resources> <string name= app_name >W2A</string> <string name= animate >Animate</string> </resources> 목록 3 에는 animate 와함께 app_name 으로지정되는문자열리소스가나와있 다. 이리소스 ID 는앱이름을지정하며앱의 AndroidManifest.xml 파일에서참조 된다 ( 일반적으로애플리케이션요소시작태그의 label 특성에서참조됨 ). 모바일앱국제화문자열을 strings.xml에직접저장하고다른곳에서이러한리소스를참조하는것은소스파일및기타리소스파일에문자열을하드코딩하는것보다좋은방법이다. 이방법을사용하면해외시장에맞춰앱을더쉽게수정하고앱의수익가능성도더높일수있다. strings.xml 저장프로젝트창에서 res 하위가지의 values 하위가지에는 strings.xml 하위가지가포함된다. 이하위가지를두번클릭해서 strings.xml 탭을표시한후, 그내용을목록 3의내용으로대체하고변경사항을저장한다. animate.xml 의세부내용과코딩 마지막으로, W2A 는드로어블항목의애니메이션을저장하는 android_animate. xml 을사용한다. 목록 4 에는이파일의내용이나와있다. 목록 4. android_animate.xml <animation-list xmlns:android= http://schemas.android.com/apk/res/android android:oneshot= true > <item android:drawable= @drawable/android0 android:duration= 500 /> <item android:drawable= @drawable/android1 android:duration= 500 /> <item android:drawable= @drawable/android2 android:duration= 500 /> <item android:drawable= @drawable/android0 android:duration= 500 /> </animation-list> IT World 21
목록 4의시작부분에는드로어블시퀀스를기술하는 animation-list 요소가있다. 이요소의 oneshot 특성은애니메이션이루프를순환할지 ( 이특성에 false 가할당된경우 ) 한번만수행할지 ( true 가할당되는경우 ) 를결정한다. oneshot 에 true 가할당되는경우 start() 메소드전에 AnimationDrawable() 의 stop() 메소드를호출하여다른원샷 (oneshot) 애니메이션시퀀스를생성해야한다. animation-list 요소내에는 item 요소가중첩되어있다. 각 item 요소는 drawable 특성을통해애니메이션시퀀스에서하나의드로어블을지정한다. @drawable/ androidx 리소스참조 (x의범위는 0 ~ 2) 는이름이 android로시작하는이미지파일을지정한다. duration 특성은다음 item 요소의드로어블을표시하기전에경과해야할밀리초를지정한다. animate.xml 저장 프로젝트창에서 res 하위가지의 드로어블 하위가지를마우스오른쪽버튼 으로클릭하면팝업메뉴가표시된다. 그림 23 에서이팝업메뉴를볼수있다. 팝업메뉴에서 새로만들기 (New), 파일 (File) 을차례로선택한다. 새파일 그림 23 android_animate.xml 을새드로어블리소스로추가 (New File) 대화상자가표시된다 ( 그림 24 참조 ). 그림 24 android_animate.xml 입력 22 IT World
How To 초보 개발자를 위한 안드로이드 스튜디오 입문 새 파일 이름 입력(Enter a new file name) 텍스트 필드에 android_animate.xml을 입력하고 확인(OK) 을 클릭한다(드로어블 하위 가지 아래에 android_animate.xml 하위 가지가 표시됨). 그런 다음 android_animate.xml 탭의 내용을 목록 4의 코드로 대체하고 변경 사항을 저장한다. 또, 연결된 코드 소스에서 android0.png, android1.png, android2.png 파일(목록 4 에 참조됨)을 drawable 가지에 복사해야 한다. 윈도우에서 작업하는 경우 윈도 우 탐색기에서 이 파일들을 선택하고 이 가지에 붙여 넣는다(가지 이름을 마우 스 오른쪽 버튼으로 클릭하고 붙여넣기(Paste) 선택). 2부 맺음말 이제 W2A의 아키텍처를 이해했고 안드로이드 스튜디오에서 간단한 애니메 이션 모바일 앱을 코딩하는 방법을 익혔다. 다음은 앱을 빌드해서 실행할 차례 다. IT World 23
3 앱빌드후실행하기 Jeff Friesen JavaWorld 2부에서안드로이드스튜디오를사용해서첫애니메이션모바일앱을만들었다. 3부에서는안드로이드스튜디오를사용한모바일애플리케이션개발입문의마지막단계를익힌다. 먼저오픈소스빌드자동화도구인그래들 (Gradle) 을사용해서앱의애플리케이션패키지 (APK) 파일을빌드한다. 그다 음안드로이드기기에뮬레이터또는킨들파이어 HD 태블릿에서앱을설치하 고실행하기위한방법을알아본다. 앱빌드하기 안드로이드스튜디오프로젝트에소스코드와리소스파일을로드했으면이제처음으로앱을빌드할준비가됐다. 프로젝트창에서 빌드 (Build) 메뉴를볼수있는데, 이메뉴를사용해그래들에연결하고 W2A를빌드할것이다. 프로젝트창의 그래들 (Gradle) 아래에서 프로젝트리빌드 (Project Rebuild) 를선택한다. 그래들이빌드프로세스를시작한다. 이과정에약 1분이소요된다. 문제없이진행되면잠시후그래들콘솔창에 BUILD SUCCESS- FUL 이라는메시지가표시된다. 그림 25 빌드가완료되면그래들에 BUILD SUCCESSFUL 메시지가표시됨 프로젝트리빌드 (Rebuild Project) 를선택하지않고직접앱을실행할수 도있다. 이경우안드로이드스튜디오가그래들에프로젝트리빌드를지시한 다. 리빌드가성공적으로완료되면안드로이드스튜디오가앱의 APK 파일 ( 실 24 IT World
행코드, 리소스및기타정보가포함된파일 ) 이실제또는에뮬레이션안드로이 드기기에설치되었는지확인한다음앱을실행한다 ( 참고로 즉시실행 (Instant Run) 을사용하면앱을재시작할필요가없는경우도있다 ). 그래들활용하기구글은그래들빌드시스템을더효과적으로사용하기위한다양한팁을제공한다. 예를들어빌드서버성능을높이기위한팁이있다. 부가적인작업안드로이드스튜디오의 빌드 (Build) 메뉴에서는기본빌드기능외에여러가지유용한빌드작업을수행할수있다. APK 빌드 (Build APK) 및서명된 APK 생성 (Generate Signed APK) 메뉴항목을예로들수있다. 이메뉴를사용하면앱애플리케이션패키지파일의서명된버전을빌드하거나디버깅을위한버전을빌드할수있다. 앱실행하기 프로젝트창의 실행 (Run) 메뉴에는앱을실행하고디버깅하기위한메뉴항 목이있다. 이단원에서는에뮬레이션기기와아마존킨들파이어 HD 태블릿에 서 W2A 를실행하는방법을알아본다. 에뮬레이션기기에서 W2A 실행하기 실행 (Run) 메뉴의 앱실행 (Run app) 메뉴항목을선택해서 W2A 또는다른앱을실행할수있다. 또는도구모음의녹색삼각형버튼을클릭해도된다. 어느방법을사용하든안드로이드스튜디오에 배포대상선택 (Select Deployment Target) 대화상자가표시된다. 그림 26 배포대상선택 (Select Deployment Target) 대화상자 IT World 25
필자의경우컴퓨터의프로세서가인텔이아니고아직아마존킨들파이어 HD 태블릿을설정하지도않은상태였으므로에뮬레이터를사용해앱을실행하는방법외의옵션이없었다. 대화상자에서확인된에뮬레이터는하나인데, 안드로이드스튜디오에서이에뮬레이터의속성을인식하지못한탓에에뮬레이터를사용할수없었다. 문제를해결하기위해 새에뮬레이터만들기 (Create New Emulator) 버튼을클릭하자다양한에뮬레이터가포함된 가상기기구성 (Virtual Device Configuration) 대화상자 가표시됐다. 그림 27은넥서스 5x(Nexus 5x) 가선택된화면이다. 그림 27 새에뮬레이터 (New Emulator) 창에서선택할수있는기기에뮬레이터 필자는넥서스 4(Nexus 4) 를선택하고 다음 (Next) 을클릭했다. 이후표시되는시스템이미지 (System Image) 대화상자에서는시스템이미지를, 다른이미지 (Other Images) 탭을클릭한후에는 IceCreamSandwich( 구글 API 제외 ) 를선택했다. 그림 28 에뮬레이터를사용해서인텔이외의플랫폼에서앱실행 에뮬레이터설정을마치고나면다운로드 (Download) 링크를클릭해서기본 적으로설치되지않은이미지를다운로드해야한다. 라이선스계약에동의하 고다음 (Next) 을클릭한다. 구성요소설치프로그램에서구성요소다운로드 26 IT World
를시작한다. 그림 29 설치가완료되고 마침 (Finish) 버튼이밝게표시되면버튼을클릭한다. 목록에서 IceCreamSandwich 와 다음 (Next) 을차례로선택한다. 이제 AVD 를구성할수있다. 그림 30 AVD 를적절히구성하고 마침 (Finish) 클릭 실행 (Run) 메뉴에서 앱실행 (Run app) 을선택하거나도구모음의녹색삼각형아이콘을선택한다. 배포대상선택 (Select Deployment Target) 대화상자가다시표시되는데, 이번에는넥서스 4 API 14(Nexus 4 API 14) 항목을선택하고 확인 (OK) 을클릭한다. 에뮬레이터에서시작화면이먼저표시되고잠시후넥서스 4 기기의프레임창으로바뀐다. 에뮬레이터초기화에는꽤오랜시간이걸릴수있다. 필자의경우 10분이상경과하자안드로이드스튜디오가작업을중단하고다음과같은오류메시지를표시했다. 그림 31 에뮬레이션넥서스 4 기기의프레임창 Error while waiting for device: Timed out after 300 seconds waiting for emulator to come online. IT World 27
그림 32 에뮬레이션넥서스 4 기기의프레임창에표시되는시작화면 그림 33 에뮬레이션넥서스 4 기기의앱런처화면 그림 34 W2A 아이콘이앱런처화면의오른쪽하단에표시됨 그림 35 버튼을클릭하면이미지애니메이션이시작된다. 이오류가발생할때는커피한잔을마시고책도좀읽은다음돌아오면된다. 아마그때쯤이면에뮬레이션기기의시작화면이나타나있을것이다. 시작화면을닫고런처화면의맨위로이동한다. W2A 앱아이콘은아직이화면에표시되지않는다. 앱을다시한번실행한다. 문제가없다면앱을설치중이라는메시지가표시된다. 또한, 앱런처화면에서 W2A 앱의기본안드로이드아이콘을볼수있다. W2A가자동으로실행되므로아이콘을클릭할필요는없다. 녹색안드로이드로고와 Animate 버튼을볼수있다. 아마존킨들파이어 HD 태블릿에서앱실행하기느린에뮬레이터를통해앱을실행하다보면답답하다. 해결방법은지니모션 (GenyMotion) 안드로이드에뮬레이터와같이속도가더빠른에뮬레이션소프트웨어를사용하거나실제안드로이드기기를사용하는것이다. 몇년전필자는안드로이드 4.0.3(API 레벨 15) 을실행하는 2012년형 1세대아마존킨들파이어 HD 7인치태블릿을구매했다. 지금은최신안드로이드 API 가필요없는안드로이드앱을실행하는용도로사용중이다. 킨들파이어태블릿을안드로이드스튜디오와함께사용하는방법을알아보 지니모션과안드로이드스튜디오안드로이드스튜디오에서지니모션을사용하는방법에대해알아보고싶다면프란체스코아졸라의자바코드긱 (Java Code Geek) 블로그게시물인 안드로이드대안에뮬레이터 : 지니모션과안드로이드스튜디오함께사용하기 (Android Studio with android alternative emulator:genymotion) 를참고하자. 28 IT World
그림 36 오른쪽하단에위치한 W2A 앱아이콘 그림 37 Animate 를클릭하면애니메이션이실행된다. 던중아마존에서제공하는유용한가이드 파이어태블릿을위한개발환경설정하기 (Setting Up Your Development Environment for Fire Tablets) 와 테스트를위해파이어태블릿연결하기 (Connecting Your Fire Tablet for Testing) 를찾았다. 여기서는킨들파이어기기를안드로이드스튜디오에연결하는과정을간단히요약만하고넘어간다. 더욱자세한정보가필요하다면아마존가이드를참조하자. 먼저필자같은윈도우사용자들은킨들파이어태블릿을개발컴퓨터에연결할때설치되는비 ADB(Android Debug Bridge) 드라이버를먼저제거해야한다 ( 아직 ADB를활성화하면안됨 ). 그런다음아마존의 USB 드라이버를설치한다. 그다음킨들파이어 USB 드라이버를다운로드한다. 다운로드되는 ZIP 압축파일에는 KindleDrivers.exe 애플리케이션이포함되어있다. KindleDrivers.exe를실행하고표시되는안내에따른다. 필자의경우 C:\Program Files (x86)\amazon.com\fire_devices\drivers 디렉터리가생성되고그안에필요한드라이버파일이설치됐다. 드라이버를설치한후태블릿에서 ADB를활성화해야한다. 이후에는태블릿을개발용컴퓨터에연결한다. 태블릿을안드로이드스튜디오에연결하는방법에대한추가지침은아마존가이드에나와있다. 모든준비가끝나면안드로이드스튜디오를시작하고 W2A 프로젝트를로드하고 W2A 앱을실행한다. 이번에는 배포대상선택 (Select Deployment Target) 대화상자의연결된기기 (Connected Devices) 부분에 아마존 KFTT(Amazon KFTT) 항목이표시될것이다. 이항목을선택하고 확인 (OK) 을클릭한다. 그러면그래들이앱빌드를시작한다. 찾을수없는다양한 API 유형에대한여러가지오류메시지가뜨기는했지만, 필자의기기에 APK가성공적으로설치되었고자동으로앱이실행됐다. 그림 36에서앱런처화면의 W2A 앱아이콘을볼수있다. 그림 37은실행중인 W2A 앱의모습이다. 3 부맺음말 첫안드로이드스튜디오애플리케이션을작성하고빌드하고실행까지했으니, 그다음엔무엇을해야할지궁금할것이다. 일단은배운내용으로이것저것실험을해볼것을권한다. 3편의입문강좌에서제공된예제와소스코드를사용해서직접새프로젝트를개발해보는것이좋다. 안드로이드스튜디오의여러특성과기본기능을익히는동안에는프로젝트를간결하게유지하는것이좋지만, 더나아가실험을통해스스로과제를내고해결해보는것도실력향상에도움이될것이다. IT World 29