안드로이드 기초 : 프로젝트 생성과 구동

분류 Specialist/Android Basic 작성일 2010/01/13 01:18

지난 포스트에서 개발환경 설정에 대해 알아보았다.

 

이번 포스트에선 프로젝트를 만들고 빌드를 해보겠다.

 

어느 플랫폼, 어느 언어를 배울 때 처음 해야 하는 것은 Hello! World! 이다..;;

안드로이드 에뮬레이터에서 Hello! Android!라는 텍스트 문자열을 출력하는 애플리케이션을 만들어 보겠다.

 

  1. Eclipse를 실행한다.
     
  2. 프로젝트를 생성하는 방법은 File->New->Project… 순으로 선택하거나,
    Eclipse 오른쪽 Package Explorer에서 오른쪽 마우스를 클릭하여 New->Project…를 선택한다.
     
  3. New Project 창이 나타나면 Android Project를 선택하고 Next 버튼을 클릭한다.
     
  4. New Android Project 창에 아래 화면과 같이 입력하고 Finish 버튼을 클릭하여 프로젝트를 생성한다.
     

    Project name : HelloAndroid

    Application name : Hello, Android

    Package name : com.example.helloandroid

    Create Activity : HelloAndroid

    Build Target : Android 2.1 API 7

     

    항목 설명

    Project name : 이클립스 프로젝트 이름

    Application name : 안드로이드에서 표시되는 이름

    Package name : 작성하는 소스의 구분되는 공간의 이름

    Create Activity : 향후 다시 정리하겠지만 화면 단위라고 정의

    Build Target : SDK 버전 선택

  5. 프로젝트가 생성되고 Package Explorer에서 그 구조를 살펴보면 아래 화면과 같다.
     

    src : 소스 파일 디렉토리

    gen : 안드로이드 SDK에서 만든 자동 생성파일 디렉토리

    Android 2.1 : 안드로이드 라이브러리

    assets : 세이브 데이터 저장 시 사용

    res : 이미지, 문자열, 레이아웃 등 리소스 디렉토리

    AndroidManifest.xml : 구동 시 필요한 정보 ( 필수 요소 )

  6. 프로젝트가 다 만들어졌다. 새로 만든 프로젝트를 그대로 실행 하면 어떻게 될까?
    바로 실행 해 보겠다. Run->Run 을 선택하고 Run as 다이얼로그에서 Android Application을 선택한다.
     
  7. 저번 포스트에서 만든 AVD가 제대로 설정 됐다면 에뮬레이터가 아래화면과 같이 구동될 것이다.
    만약, AVD의 Platform 버전이 프로젝트 생성 시 Build Target으로 설정한 버전보다 낮다면
    에러 메시지와 함께 AVD를 새로 만들거나 변경하라는 메시지가 나온다.
    확대
     
  8. 에뮬레이터의 구동이 끝나면 프로젝트를 생성하면 기본적으로 구성되어 있는
    "Hello World, HelloAndroid!" 문자열을 만날 수 있다.
     

 

프로젝트를 생성하고 구동해서 Hello Wolrd까지 보았다.

 

이제 구동되는 순서를 말로 설명해보겠다.
설명 시 나오는 Activity 및 intent-filter 등 개념적인 용어들은 아직 정리되지 않은 관계로
차후에 다시 정리하도록 하겠다.

 

  1. 프로젝트를 빌드를 하게 되면 "프로젝트디렉토리/bin"의 위치에 apk 파일을 생성한다.
    apk파일은 소스를 빌드하고 그 산출물을 zip압축으로 패키지화 한 것이다.
    (apk파일은 zip압축처럼 압축프로그램으로 압축이 풀린다.)
  2. 에뮬레이터가 구동되고 빌드 할 때 만들어 둔 apk파일을 에뮬레이터로 업로드 하고
    에뮬레이터에 설치한다.
  3. 에뮬레이터에 apk파일이 설치가 되고 나면 AndroidManifest.xml 파일을 찾는다.
  4. AndroidManifest.xml에 등록되어 있는 Activity중 MAIN action을 가진 Activity 를 찾는다.
    아래 코드는 AndroidManifest.xml의 내용이다.
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.helloandroid"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".HelloAndroid"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
        <uses-sdk android:minSdkVersion="7" />
    
    </manifest> 
    

    이 예제에서는 Activity가 하나 밖에 없지만 .HelloAndroid라는 이름을 가진 Activity안에
    MAIN action을 가지고 있다.
  5. MAIN action을 가지고 있는 HelloAndroid Activity를 호출한다.
    처음 프로젝트 생성시 Create Activity 항목에 HelloAndroid라고 입력했었다.
    그 결과 만들어진 HelloAndroid.java ( com.example.helloandroid.HelloAndroid )가
    .HelloAndroid라는 이름을 가진 Activity이다.
  6. 아래는 HelloAndroid Activity의 코드 내용이다.
    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가 호출되면 제일 먼저 onCreate 메소드가 호출된다.
    오버라이드된 onCreate 메소드에서 setContentView 메소드를 R.layout.main 이라는
    인자로 호출하고 있다.

    ※ R 이라는 클래스는 안드로이드 SDK에서 각 리소스들의 정보(.xml)를 
       소스에서 매칭 시키기 위하여 자동으로 생성된다.

  7. 위 setContentView 메소드 호출 시 인자로 던져 준 R.layout.main main.xml을 가리킨다.
  8. 아래는 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">
    	<TextView 
    		android:layout_width="fill_parent"
    		android:layout_height="wrap_content" 
    		android:text="@string/hello" />
    </LinearLayout>
    

    Linerlayout 으로 구성되어 있고 그 하위에 TextView를 가지고 있다.
    TextView에서 android:text 속성의 값으로 "@string/hello" 가지고 있는데, 이 string/hello는
    R.string.hello을 가리키고 또 R.string.hello는 strings.xml의 hello을 가르킨다.
    아래는 strings.xml의 내용이다.
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    	<string name="hello">Hello World, HelloAndroid!</string>
    	<string name="app_name">Hello, Android</string>
    </resources>
    

    TextView의 android:text 속성의 값은 "Hello World, HelloAndroid!" 인것이다.
    app_name 또한 AndroidManifest에서 쓰이고 있는데, 이 역시 string/hello와 같다.
  9. 6번에서 호출한 setContentView 메소드는 곧 "Hello World, HelloAndroid!"라는 text속성을
    가진 TextView로 View를 구성하는 일을 하게된다.
  10. 이렇게 하여 에뮬레이터에서 "Hello World, HelloAndroid!"라는 문자열을 보게 된다.

 

원래가 설명에는 젬병이고 글 쓰는 지금도 아직 생소한 용어에 대한 개념 정리가 안되어
제대로 설명이 된 같진 않다.

설명을 적다보니 개념 정리가 시급할 같다.

 

PS. 혹, 위에 나열해놓은 설명 중에 틀린 부분이 있다면 알려주시기 바랍니다.

트랙백 주소 :: http://bbare.tk/72/trackback/

댓글을 남겨주세요

  1. 2010/03/12 15:53 답글수정삭제

    설명 잘보고 갑니다.~

옵션
댓글 달기
Powerd by Textcube, Google, designed by criuce (이 블로그는 맑은고딕 글씨체에 최적화되어 있습니다.)
rss