"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


Hello, Android를 파헤쳐 보자
728x90
이번 포스팅은 안드로이드 개발자 사이트에 있는
Hello, Android 예제를 번역한 것 입니다.
의역, 오역이 많으니 감안하고 봐주세요. ^^
그리고, 번역본이라서 경어체를 사용하지 않았습니다.
양해 부탁드릴께요.

그전에 추천 한 번 부탁드릴께요.




본 문서는
  1. Install a Platform
  2. Create an AVD
  3. Create the Project
  4. Construct the UI
  5. Run the Code
  6. Upgrade the UI to an XML Layout
  7. Debug Your Project
  8. Creating the Project Without Eclipse

의 순서로 구성되어 있다. 



"Hello, World"를 작성하는데, 이클립스에서 제공하는 플러그인을 사용하면 매우 쉽게 개발이 가능하다.

 이 튜토리얼은 이클립스를 사용함을 가정하고 진행하며, 만약 이클립스를 사용하지 않는 다면 Developing in Other IDEs 문서를 먼저 본 후 본 튜토리얼을 보는 것이 낫다. 또한 SDK가 설치되어 있지 않다면, Installing the Android SDK 를 참조하여 SDK 및 ADT를 설치해야 한다.


Install a Platform (플랫폼 설치)

Hello World 어플을 실행하기 위해서는 안드로이드 플랫폼을 설치해야 한다. 이미 설치되어 있다면 다음 내용을 건너뛰어도 된다.

이클립스에서 플랫폼을 설치하려면:

  1. 안드로이드 SDK의 AVD 매니저를 실행하고, 왼쪽 패널에서 Available Packages를 선택한다.
  2. 저장소 사이트의 체크박스를 클릭하여 설치 가능한 컴포넌트를 표시한다.
  3. 적어도 하나의 플랫폼을 선택하고 Install Selected를 클릭한다. 만약 어떤 버전의 플랫폼을 설치할지 모른다면 그냥 최신 버전을 설치한다.

 

Create an AVD

AVD에 대한 자세한 내용은 Android Virtual Devices 문서를 참조한다.

본 튜토리얼의 어플은 안드로이드 에뮬레이터에서 동작한다. 에뮬을 가동하기 전에 Android Virtual Device(AVD)를 먼저 생성해야 하고, 해당 에뮬에서 사용하는 시스템 이미지나 디바이스 세팅 정보를 설정할 수 있다.

AVD를 만드는 방법은

  1. 이클립스에서, Window > Android SDK and AVD Manager를 선택한다.
  2. 왼쪽 패널에서 Virtual Devices를 선택한다.
  3. New를 클릭하면 Create New AVD 다이얼로그가 나타난다.
  4. AVD 의 이름을 "my_avd"로 지정한다.
  5. 타겟을 선택한다. 타겟은 에뮬레이터가 동작할 플랫폼의 안드로이드 SDK 버전이다. 
  6. Create AVD를 클릭한다.
안드로이드 개발 환경 설정 방법은 아래의 포스팅을 참고하세요.
http://witjung.tistory.com/4


Create a New Android Project (새로운 안드로이드 프로젝트 생성)

AVD를 만든 후 이클립스에서 새로운 안드로이드 프로젝트를 생성하는 스텝으로 나아가자.

  1. 이클립스에서, File > New > Project를 선택한다.  ADT 플러그인이 설치되어 있다면, New Project 다이얼로그에 'Android Project'를 포함한 'Android' 폴더가 생성되어 있으며, "Android XML File" 도 생성할 수 있다.
  2. "Android Project"를 선택하고 Next를 클릭한다.
  3. 프로젝트의 설정은 다음과 같이 한다:
    • Project name: HelloAndroid
    • Application name: Hello, Android
    • Package name: com.example.helloandroid (아무 네임스페이스를 지정하면 된다)
    • Create Activity: HelloAndroid Finish 클릭

 

Project Name
이클립스 프로젝트 이름 — 파일들을 포함하고 있는 디렉토리.

Application Name
어플리케이션의 이름 — 안드로이드 폰 상단에 나타나는 이름.

Package Name
패키지의 네임스페이스. (자바의 패키지와 같다.) 

패키지 이름은 유니크해야 하므로 적절한 이름을 지어야 한다.

Create Activity
프로젝트 생성시 자동으로 생성되는 클래스의 이름이며, Activity 클래스를 상속하여 만들어진다. 

Min SDK Version
어플리케이션이 구동되는 최소 API 레벨. 상세한 정보는 Android API Levels를 참조.

Other fields:

Use default location

본 체크박스를 해제하면 프로젝트의 파일들이 저장되는 폴더를 변경할 수 있다.

Build Target

어플리케이션이 컴파일시 사용할 플랫폼. (Min SDK Version 필드를 기반으로 자동으로 선택됨)

 

*참고 

안드로이드 어플리케이션은 상위 버전에서 하위 버전에 대한 호환성만 제공된다. 즉, 1.5 버전 라이브러리를 이용해 어플리케이션을 컴파일하면 1.5 이전 버전의 플랫폼에서는 어플리케이션이 수행되지 않는다.

 

이제 안드로이드 프로젝트가 생성이 되었을 것이다. 이클립스의 왼편에 있는 Package Explorer 창에서  HelloAndroid.java 파일을 찾아서 오픈하면 아래와 같은 소스를 볼 수 있다. (HelloAndroid > src > com.example.helloandroid 의 위치에 해당 파일이 존재한다.).

 

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}



액티비티(Activity)는 하나의 어플리케이션이고, 어플리케이션은 서로 인터렉션을 수행하는 여러 개의 액티비티로 구성된다.  유저는 여러개의 액티비티 중에 한번에 하나의 액티비티만 볼 수 있다. 액티비가 실행되면 초기화와 UI를 셋업하는 onCreate() 메소드가 호출된다. 이제 실제 코드를 수정해보도록 하자!


Construct the UI (UI 만들기)

아래의 HelloAndroid 클래스 코드 중 볼드체로 되어 있는 부분이 새로 추가된 부분이다.

 

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       TextView tv = new TextView(this);
       tv.setText("Hello, Android");
       setContentView(tv);
   }
}



Tip: Ctrl-Shift-O (Cmd-Shift-O, on Mac)를 누르면 프로젝트에 필요한 패키지가 자동으로 추가된다. 

 

안드로이드의 UI는 Views라 불리는 계층적으로 객체로 구성되어 있다. View는 UI 레이아웃에서 사용할 수 있는 버튼이나 이미지와 같은 객체들이며, View 클래스의 서브 클래스이다. 특히, 텍스트를 다루는 서브 클래스는 TextView이다. 

본 예제에서는 클래스 생성자에 TextView를 만든다. TextView 객체는 Context 인스턴스를 파라미터로 생성 하는데 Context는 시스템을 핸들링한다. 또한, Activity 클래스는 Context를 상속해서 만들었기 때문에 Activity의 서비 클래스인 HelloAndroid 클래스 역시 Context이다. TextView 객체를 생성한 뒤 setText() 메소드로 텍스트 컨텐츠를 정의한다.

마지막으로, setContentView() 메소드를 통해 액티비티 UI에 TextView 객체를 표시한다. 다음 단계에서는 본 어플리케이션을 실행하는 방법에 대해 알아본다.


Run the Application (어플리케이션 실행)

아래와 같이 실행한다.

  1. Run > Run을 선택
  2. "Android Application"을 선택

Developing In Eclipse, with ADT에 이클립스에서의 실행 설정을 만들고 수정하는 방법에 대한 더 자세한 정보가 있다.

이클립스 플러그인이 자동적으로 실행 설정을 만들고 안드로이드 에뮬레이터를 구동시킨다. 잠시 후 에뮬레이터가 뜬 후 어플리케이션을 설치하고 디폴트 액티비티를 수행한다. 다음과 같은 화면을 볼 수 있다:

상단에는 어플리케이션 타이틀은 "Hello, Android"가 나타난다. 이는 이클립스 플러그인이 자동적으로 res/value/strings.xml에 텍스트를 정의하고, AndroidManifest.xml 파일에 추가했기 때문에 나타난다. 그 아래 생성한 TextView 객체의 텍스트가 나타난다. 

이로서 기본적인 "Hello World" 튜토리얼은 끝이지만, 아래 글을 읽어 보면 더 많은 정보를 얻을 수 있다.


Upgrade the UI to an XML Layout (XML을 이용한 UI 업그레이드)

방금 끝낸 "Hello, World" 예제는 "programmatic" UI 레이아웃이라 불리는 소스 코드에서 UI를 직접 생성하는 방법이다. 본 방법은 UI가 일부 변경 되면 소스 코드를 많이 변경해야 하는 경우가 발생할 수 있기 때문에 View와 소스 코드를 분리시키는 방법이 시간 낭비와 소스 코드 디버깅 시간을 줄이는데 도움을 준다.

안드로이드는 XML 기반의 레이아웃 파일로 UI를 생성할 수 있다. 다음의 XML 레이아웃은 위에서 작성한 "Hello, Android"에 코딩된 UI를 XML 파일로 옮긴 것이다.

 

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/textview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:text="@string/hello"/>



안드로이드 XML 레이아웃은 XML 엘리먼트들이 트리형식으로 나열되어 있으며, 각 노드는 View 클래스의 이름이다. 물론 View 클래스를 상속 받아 만든 사용자 정의 클래스 이름도 XML 레이아웃에서 사용할 수 있다. 

위의 XML 예제에는 단지 TextView 엘리먼트만 있고, 5개의 속성을 갖고 있다. 각 속성의 의미는 다음과 같다:

 

속성

의미

xmlns:android

안드로이드용 XML 네임스페이스 선언을 나타낸다. 모든 안드로이드 레이아웃 파일에 반드시 포함되어야 하는 속성이다.

android:id

TextView 엘리먼트에 유니트한 식별자를 할당하는 속성이다. 할당한 ID는 소스 코드나 XML의 다른 리소스들이 참조할 때 사용할 수 있다.

android:layout_width

View의 너비를 정의하는 속성이다. 위의 예제에서 처럼 하나의 View만 있는 경우 "fill_parent" 값은 화면의 모든 너비를 채우라는 의미이다.

android:layout_height

View의 높이를 지정하는 속성이다.

android:text

TextView가 보여주는 텍스트를 설정하는 속성이다. 화면에 보여줄 텍스트를 직접 입력하는 방법도 있지만, 위의 예제에서 처럼 res/values/strings.xml  파일에 정의된 ID(hello)를 할당하는 방법도 있다. 확장성을 위해 후자의 방법을 사용하는 것이 좋다. 더 많은 정보를 얻으려면 Resources and Internationalization을 참조해라.

 

이 XML 레이아웃 파일은 res/layout/ 디렉토리에 생성한다. "res"는 "resources"의 약자이며, res 디렉토리에는 소스 코드를 제외한 레이아웃 파일, 이미지, 사운드 파일들이 포함된다.


Landscape layout (가로 배치 레이아웃)

가로 모드시 특별한 레이아웃을 사용해야 한다면 /res/layout-land에 생성한 레이아웃 파일을 위치시켜야 한다. 그러면 가로 모드로 동작하게 되면 자동적으로 해당 레이아웃을 사용해서 화면에 표시해준다. 특별히 가로 모드 파일이 없다면 자동적으로 디폴트 레이아웃을 늘려서 사용한다.

이클립스 플러그인이 자동적으로 main.xml이라는 레이아웃 파일을 생성하는데, 코드에 레이아웃을 추가함으로 인해 이것이 무시되었다. 그러나 코드에 직접 레이아웃을 작성하는 것 보다는 XML 레이아웃 파일을 사용하는 것이 권장된다. 위에서 개발한 어플리케이션에 어떻게 XML 레이아웃을 추가하는지에 대해서 지금부터 설명한다.

  1. 이클립스의 Package Explorer에서 /res/layout/ folder의 main.xml 파일을 연 후 다음과 같이 내용을 변경한다. 변경한 이 후에 파일을 저장한다. 

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/textview"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:text="@string/hello"/>

 

  1. res/values/ 폴더의 strings.xml은 텍스트 스트링 데이터 정보를 갖고 있는 파일이다. 이 파일을 열어 보면, helloapp_name로 명명된 두가지 스트링이 만들어져 있다. This is where you should save all default text strings for your user interface. If you're using Eclipse, then ADT will have started you with two strings, hello and app_namehello 스트링을 "Hello, Android! I am a string resource!"으로 바꿔라.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello, Android! I am a string resource!</string>
    <string name="app_name">Hello, Android</string>
</resources>

 

  1. 생성한 XML 레이아웃을 사용하기 위해 HelloAndroid 클래스를 열어서 아래와 같이 수정해라.

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

 

위의 예제는 직접 타이핑하기를 권장한다.

예제에서는 setContentView() 메소드에 View 오브젝트를 파라미터로 전달하는 대신 layout 리소스를 파라미터로 전달했다. layout 리소스는 /res/layout/main.xml 파일을 컴파일한 오브젝트로 R.layout.main을 레퍼런스 이름으로 갖고 있다. 레퍼런스는 이클립스 플러그인이 R.java를 바탕으로 자동으로 생성해 준다. 

이제 어플리케이션을 다시 실행(Run > Run History > Android Activity)해서 결과를 이전과 비교해 보면, 같은 결과를 볼 수 있다. 이는 같은 결과를 보여주는 두 가지 다른 방법이 있다는 것을 말하고 있다.

팁: Ctrl-F11 (맥에서는 Cmd-Shift-F11)로 에뮬레이터에 새로 바꾼 어플리케이션을 바로 실행 시킬 수 있다.


R class

이클립스에서 R.java (gen/ [Generated Java Files] 폴더에 있음)을 열면 다음과 같은 코드를 볼 수 있다.

package com.example.helloandroid;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int icon=0x7f020000;
    }
    public static final class id {
        public static final int textview=0x7f050000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}



R.java 파일은 안드로이드 프로젝트 내에 모든 리소스의 인덱스 정보를 정의한다. 이 인덱스는 프로젝트 내에 모든 소스 코드에서 참조할 수 있다.

위의 코드에서 보이듯 이너클래스로 layout이 정의 되어 있고 멤버로 main이 있다. 이는 이클립스 플러그인이 main.xml XML 레이아웃 파일을 클래스화 한 것이다. 다른 리소스인 string.xml도 정의 되어 있으며, string.xml 파일을 변경하면 R.java 파일도 빌드시 자동으로 변경됨을 볼 수 있다. 따라서 R.java 파일을 직접 변경해서는 안된다.


Debug Your Project (프로젝트 디버깅)

안드로이드 플러그인은 이클립스 디버거와 호환성이 좋다. 이를 보기 위해 HelloAndroid 소스 코드에 아래와 같이 버그를 심어 보자.

 

package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Object o = null;
        o.toString();
        setContentView(R.layout.main);
    }
}



위의 코드는 NullPointerException이 발생하도록 변경한 코드이다. 어플리케이션을 실행하면 아래와 같은 화면을 볼 수 있다.

"Force Quit"를 눌러 어플리케이션을 종료하고 에뮬레이터 윈도우를  닫는다.

브레이크 포인트를 Object o = null; 라인 위에 걸고 디버그 모드(Run > Debug History > HelloAndroid)로 어플리케이션을 다시 실행한다. (브레이크 포인트는 소스코드 라인의 오른쪽 바를 더블클릭하면 걸린다.). 

어플리케이션이 다시 실행되지만 브레이크 포인트에서 실행이 멈추는 것을 볼 수 있다. 이제 스텝 바이 스텝으로 실행하면서 버그를 고치면 된다.

 


Creating the Project without Eclipse (이클립스 없이 프로젝트 만들기)

이클립스가 없이도 안드로이드 프로젝트를 생성할 수 있는 방법이 있다. 바로 안드로이드 SDK의 툴 들을 'ant'빌드 파일로 묶어서 만드는 것이다. SDK 툴을 사용하여 프로젝트를 빌드하는 방법의 자세한 내용은 Developing in Other IDEs를 참조하라.


여기까지 입니다.
긴 글 보시느라 수고 많으셨습니다.
도움이 되셨기를 바라며,
원문은 여기를 참고하세요.


도움이 되셨다면 아래의 추천 버튼을 꾸욱 눌러주세요.










728x90
728x90
LIST