본문 바로가기

운영체제/안드로이드

Android 개발 소개


오픈 소스 어플라이언스 플랫폼

developerWorks
문서 옵션
수평출력으로 설정

이 페이지 출력

이 페이지를 이메일로 보내기

이 페이지를 이메일로 보내기

샘플 코드

영어원문

영어원문


제안 및 의견
피드백

난이도 : 초급

Frank Ableson, Software designer

원문 게재일 : 2009 년 5 월 12 일
번역 게재일 : 2009 년 6 월 30 일

Android는 Linux® V2.6 커널 기반의 완벽한 운영 환경입니다. Android의 초기 전개 대상은 스마트폰과 저가형 플립폰 장치를 포함한 휴대폰 분야였습니다. 하지만 Android의 다양한 컴퓨팅 서비스 및 기능 지원은 휴대폰 시장을 넘어설 수 있을 정도로 강력한 잠재력을 가지고 있습니다. Android는 다른 플랫폼 및 애플리케이션에서도 유용하게 사용할 수 있습니다. 이 기사에서는 Android 플랫폼을 소개한 후 기본적인 Android 애플리케이션을 코딩하는 방법에 대해 설명합니다.

소개

BlackBerry와 iPhone은 둘 다 인기가 높은 고성능 모바일 플랫폼이면서도 서로 다른 고객층을 가지고 있다. BlackBerry는 기업 비즈니스 사용자를 고객으로 확보하고 있지만 소비자 장치 분야에서는 사용 편의성과 "멋진 디자인"을 겸비한 iPhone과의 경쟁을 따라잡지 못하고 있다. 아직까지 검증되지 않은 새로운 플랫폼인 Android는 두 영역의 휴대폰 고객층을 만족시키고 업무와 놀이를 연결할 수 있는 가능성을 가지고 있다.

오늘날 많은 네트워크 기반 또는 네트워크 지원 가전 기기에서 Linux 커널을 실행하고 있다. Linux 커널은 경제적으로 전개 및 지원할 수 있고 좋은 디자인으로 쉽게 채택될 수 있는 견고한 플랫폼이다. 그러한 장치의 UI 중 일부는 HTML을 기반으로 하기 때문에 PC 또는 Mac 브라우저를 통해서도 볼 수 있다. 하지만 모든 가전 기기에 일반 컴퓨팅 장치를 이용한 제어가 필요하지는 않다. 스토브, 전자레인지 또는 제빵기와 같은 일반적인 가전 기기를 생각해 보자. Android를 이용해서 이러한 가전 기기를 제어할 수 있고 컬러 터치 스크린이 장착되어 있다면 어떨까? 스토브 상단에 표시되는 Android UI를 통해 요리를 할 수도 있을 것이다.

이 기사에서는 Android 플랫폼에 대해 설명한 후 이 플랫폼을 모바일 및 비모바일 애플리케이션에서 활용하는 방법을 살펴본다. Android SDK를 설치하고 단순한 애플리케이션을 빌드하는 과정도 소개한다. 다운로드 섹션에서 이 기사의 예제 애플리케이션에 대한 소스 코드를 다운로드할 수 있다.




위로


Android의 약사

Android 플랫폼은 보다 나은 휴대폰을 만들기 위해 결성된 단체인 Open Handset Alliance의 제품이다. Google이 주도하고 있는 이 단체에는 이동 통신 업체, 장치 제조업체, 컴포넌트 제조업체, 소프트웨어 솔루션 및 플랫폼 제공업체, 마케팅 업체를 비롯한 여러 기업에서 참여하고 있다. 소프트웨어 개발 차원에서 Android는 오픈 소스 세계의 중심에서 큰 관심을 받고 있다.

최초로 출시된 Android 지원 휴대폰은 HTC에서 제조하고 T-Mobile에서 공급한 G1 휴대폰이다. 이 휴대폰은 1년에 가까운 연구 개발 끝에 출시되었으며 유일한 소프트웨어 개발 도구도 개선을 거듭하여 SDK 릴리스로 탄생되었다. G1 출시일이 가까워지면서 Android 팀에서는 SDK V1.0을 발표했으며 새 플랫폼을 위한 애플리케이션도 선을 보이기 시작했다.

혁신을 촉진하기 위해 Google에서는 2회에 걸친 "Android Developer Challenges"를 개최하여 수백만 달러의 상금을 우수 출품작에게 지급했다. G1 출시 후 수 개월이 지나서 애플리케이션을 검색하여 휴대폰에 직접 다운로드할 수 있는 Android Market의 서비스가 개시되었다. 약 18개월에 걸쳐서 새로운 모바일 플랫폼이 공적인 영역에 진입했다.




위로


Android 플랫폼

Android는 데스크탑 운영 체제라는 착각이 들 정도로 매우 다양한 기능을 제공한다. Android는 Linux 커널을 기반으로 하는 계층화된 환경이며 다양한 기능을 담고 있다. UI 서브시스템에는 다음과 같은 구성 요소가 있다.

  • 보기
  • 편집 상자, 목록 및 드롭다운 목록과 같은 일반적인 요소를 표시하기 위한 위젯

Android에는 iPhone의 Mobile Safari 브라우저에 사용되는 것과 동일한 오픈 소스 브라우저 엔진인 WebKit 기반의 내장형 브라우저가 포함되어 있다.

Android는 WiFi, Bluetooth 및 이동 통신망(예: GPRS, EDGE 및 3G)을 이용한 무선 데이터를 비롯한 다양한 연결 옵션을 자랑한다. Android 애플케이션의 유명한 기술은 Google Maps에 연결하여 애플리케이션 내에서 주소를 직접 표시하는 기능이다. Android 소프트웨어 스택에는 위치 기반 서비스(예: GPS) 및 가속도 센서에 대한 지원도 포함되어 있지만 필수 하드웨어가 구비되어 있지 않는 Android 장치도 있다. 카메라 기능도 지원된다.

역사적으로 모바일 애플리케이션이 데스크탑 애플리케이션을 따라잡기 위해 심혈을 기울이고 있는 두 분야는 그래픽/미디어와 데이터 저장 방법이다. Android는 OpenGL 라이브러리를 포함한 내장 2D 및 3D 그래픽 지원을 통해 그래픽 문제를 해결했다. 데이터 저장 문제는 Android 플랫폼에 유명한 오픈 소스 SQLite 데이터베이스가 포함되면서 완화되었다. 그림 1에서는 Android 소프트웨어 계층을 간단하게 보여 준다.


그림 1. Android 소프트웨어 계층
Android 소프트웨어 계층




위로


애플리케이션 아키텍처

앞에서 설명한 대로 Android는 Linux 커널 위에서 실행된다. Android 애플리케이션은 Java 프로그래밍 언어로 작성되었으며 VM(Virtual Machine) 내에서 실행된다. 하지만 여기서 주의할 점은 이 VM이 일반적으로 예상하고 있는 JVM이 아니라 Dalvik Virtual Machine이라는 오픈 소스 기술이라는 점이다. 아래 그림에서 볼 수 있듯이 각 Android 애플리케이션은 Dalvik VM 인스턴스 내에서 실행되고 이 인스턴스는 Linux 커널 관리 프로세스 내에 있다.


그림 2. Dalvik VM
Dalvik VM

Android 애플리케이션은 다음과 같은 분류 요소 중 하나 이상의 요소로 구성되어 있다.

활동
가시적으로 표시되는 UI가 있는 애플리케이션은 활동으로 구현된다. 사용자가 홈 화면 또는 애플리케이션 실행 프로그램에서 애플리케이션을 선택하면 활동이 시작된다.
서비스
네트워크 모니터 또는 업데이트 검사 애플리케이션과 같이 장시간 유지되어야 하는 애플리케이션의 경우 서비스를 사용해야 한다.
컨텐츠 공급자
컨텐츠 공급자는 데이터베이스 서버라고 생각해도 된다. 컨텐츠 공급자의 임무는 SQLite 데이터베이스와 같이 지속적인 데이터에 대한 액세스를 관리하는 것이다. 애플리케이션이 매우 단순한 경우에는 컨텐츠 공급자를 만들지 않아도 된다. 대용량 애플리케이션이나 여러 활동 또는 애플리케이션에 필요한 데이터를 제공하는 애플리케이션을 개발 중일 경우에는 컨텐츠 공급자를 데이터에 액세스하는 수단으로 사용할 수 있다.
브로드캐스트 수신자
Android 애플리케이션을 실행하여 데이터 요소를 처리하거나 텍스트 메시지 수신과 같은 이벤트에 응답할 수 있다.

Android 애플리케이션은 AndroidManifest.xml 파일과 함께 장치에 전개된다. AndroidManifest.xml에는 애플리케이션을 장치에 올바르게 설치하는 데 필요한 구성 정보가 있다. 이러한 구성 정보에는 필수 클래스 이름, 애플리케이션에서 처리할 수 있는 이벤트 유형 및 애플리케이션을 실행하는 데 필요한 권한이 포함된다. 예를 들어, 파일을 다운로드하기 위해 애플리케이션이 네트워크에 액세스해야 하는 경우에는 이 권한이 매니페스트 파일에 명시적으로 설정되어 있어야 한다. 많은 애플리케이션에서는 이 특정 권한이 설정되어 있다. 이와 같은 선언적 보안은 악성 애플리케이션이 장치에 영향을 미칠 수 있는 가능성을 줄여 준다.

다음 섹션에서는 Android 애플리케이션을 개발하는 데 필요한 개발 환경에 대해 설명한다.




위로


필수 도구

Android 애플리케이션 개발 작업을 가장 쉽게 시작하는 방법은 Android SDK와 Eclipse IDE를 다운로드하는 것이다(참고자료 참조). Android 개발 작업은 Microsoft® Windows®, Mac OS X 또는 Linux에서 수행할 수 있다.

이 기사에서는 Eclipse IDE와 Eclipse용 Android Developer Tools 플러그인을 사용하는 것으로 간주한다. Android 애플리케이션은 Java 언어로 작성되지만 Dalvik VM(비Java 가상 시스템)에서 컴파일 및 실행된다. Eclipse에서는 상황에 맞는 도움말 및 코드 제안 힌트를 비롯한 다양한 기능을 갖춘 Java 환경이기 때문에 매우 직관적으로 Java 언어를 코딩할 수 있다. Java 코드가 정상적으로 컴파일되면 Android Developer Tools이 AndroidManifest.xml 파일을 포함한 애플리케이션이 올바르게 패키지되었는지 확인한다.

Eclipse 및 Android Developer Tools 플러그인이 없어도 Android 애플리케이션을 개발할 수 있지만 Android SDK에 대해서 알고 있어야 한다.

Android SDK는 하드 드라이브의 디렉토리에 압축 해제되는 ZIP 파일로 배포된다. 여러 가지 SDK 업데이트가 있으므로 SDK 설치를 쉽게 전환할 수 있도록 개발 환경을 잘 관리하는 것이 좋다. SDK에 포함된 내용은 다음과 같다.

android.jar
애플리케이션 개발에 필요한 모든 Android SDK 클래스가 들어 있는 Java 아카이브 파일이다.
documention.html 및 docs 디렉토리
SDK 문서는 로컬과 웹에서 제공되며 SDK의 많은 패키지를 쉽게 탐색할 수 있도록 만들어진 JavaDocs 형식의 방대한 문서이다. 이 문서에는 상위 레벨 개발 안내서와 다양한 Android 커뮤니티에 대한 링크도 있다.
Samples 디렉토리
samples 서브디렉토리에는 많은 API를 실행하는 ApiDemo를 비롯한 다양한 애플리케이션의 전체 소스 코드가 있다. Android 애플리케이션 개발을 시작할 때 샘플 애플리케이션을 살펴보면 많은 도움을 얻을 수 있다.
Tools 디렉토리
Android 애플리케이션을 개발하는 데 필요한 모든 명령행 도구가 들어 있다. 가장 일반적으로 사용되는 유용한 도구는 adb 유틸리티(Android Debug Bridge)이다.
usb_driver
개발 환경을 G1 또는 Android Dev 1 언락 개발 폰과 같은 Android 지원 장치에 연결하는 데 필요한 드라이버가 들어 있는 디렉토리이다. 이러한 파일은 Windows 플랫폼을 사용하는 개발자에게만 필요하다.

Android 애플리케이션은 실제 장치에서도 실행되지만 Android SDK와 함께 제공되는 Android Emulator에서도 실행된다. 그림 3에서는 Android Emulator의 홈 화면을 보여 준다.


그림 3. Android Emulator
Android Emulator

Android Debug Bridge

adb 유틸리티는 장치에 연결하여 파일을 복사하는 등의 강력한 기능을 제공하는 여러 가지 선택적 명령행 인수를 지원한다. 쉘 명령행 인수를 통해 휴대폰에 연결하여 기본적인 쉘 명령을 실행할 수 있다. 그림 4에서는 USB 케이블을 통해 Windows 랩탑에 연결된 실제 장치에 대해 실행된 adb 쉘 명령을 보여 준다.


그림 4. adb 쉘 명령 사용하기
adb 쉘 명령 사용하기

이 쉘 환경에서 다음과 같은 작업을 수행할 수 있다.

  • 여러 네트워크 연결을 보여 주는 네트워크 구성을 표시할 수 있다. 여러 네트워크 연결 중 일부 네트워크의 의미는 다음과 같다.
    • lo는 로컬 또는 루프백 연결이다.
    • tiwlan0은 로컬 DHCP 서버에서 제공하는 주소를 사용하는 WiFi 연결이다.
  • PATH 환경 변수의 컨텐츠를 표시할 수 있다.
  • su 명령을 실행하여 수퍼유저가 될 수 있다.
  • 사용자 애플리케이션이 저장되어 있는 /data/app 디렉토리로 변경할 수 있다.
  • 디렉토리의 컨텐츠를 나열할 수 있다. 이 예제의 경우에는 하나의 애플리케이션이 표시된다. Android 애플리케이션 파일은 WinZip 또는 동등한 기능을 제공하는 도구를 사용하여 볼 수 있는 아카이브 파일이다. 확장자는 apk다.
  • ping 명령을 실행하여 Google.com이 사용 가능한 상태인지 확인할 수 있다.

동일한 명령 프롬프트 환경에서 SQLite 데이터베이스와 상호 작용하고 프로그램을 시작하는 등의 작업을 포함한 여러 가지 시스템 레벨 작업을 수행할 수 있다. 전화기에 연결된 상태라는 것을 감안하면 이는 상당히 뛰어난 기능이다.

다음 섹션에서는 단순한 Android 애플리케이션을 작성한다.




위로


기본적인 애플리케이션 코딩하기

이 섹션에서는 Android 애플리케이션의 개발 과정을 간단히 설명한다. 예제 애플리케이션은 상상할 수 있을 정도로 단순한 수정된 "Hello Android" 애플리케이션이다. 이 기사에서는 휴대폰을 손전등으로 사용할 수 있도록 간단한 수정을 통해 화면 배경색을 완전 흰색으로 설정한다. 참신한 아이디어는 아닐지라도 예제로서는 유용한 아이디어이다. 전체 소스 코드를 다운로드한다.

Eclipse에서 애플리케이션을 작성하기 위해 File > New > Android project를 선택한다. 그러면 New Android Project 마법사가 실행된다.


그림 5. New Android Project 마법사
New Android Project 마법사

그런 다음 단일 활동과 UI 레이아웃이 main.xml에 저장되어 있는 단순한 애플리케이션을 작성한다. 이 레이아웃에는 Android FlashLight라고 하는 수정할 텍스트 요소가 있다. 이 단순한 레이아웃은 다음과 같다.


Listing 1. FlashLight 레이아웃
<?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:background="@color/all_white">
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" android:textColor="@color/all_black" 
   android:gravity="center_horizontal"/>
</LinearLayout>

strings.xml에 한 쌍의 색 리소스를 작성한다.


Listing 2. strings.xml에서 색 설정하기
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Android FlashLight</string>
    <string name="app_name">FlashLight</string>
    <color name="all_white">#FFFFFF</color>
    <color name="all_black">#000000</color>
</resources>

기본 화면 레이아웃의 배경색은 all_white로 정의되어 있다. strings.xml 파일을 보면 all_white가 RGB 3색 값인 #FFFFFF 또는 완전 흰색으로 정의된 것을 볼 수 있다.

레이아웃에는 단일 TextView가 있다. 이는 실제로 정적 텍스트의 일부이며 편집할 수 없다. 텍스트는 검은색으로 설정되고 gravity 속성을 통해 가운데 맞춤하여 표시된다.

이 애플리케이션에는 다음과 같은 FlashLight.java라는 Java 소스 파일이 있다.


Listing 3. Flashlight.java
package com.msi.flashlight;
import android.app.Activity;
import android.os.Bundle;
public class FlashLight extends Activity {
    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

이 코드는 New Project 마법사에서 직접 생성된 상용구이다.

  • com.msi.flashlight라는 Java 패키지의 일부이다.
  • 두 import 문의 용도는 다음과 같다.
    • Activity 클래스용
    • Bundle 클래스용
  • 이 활동이 시작되면 onCreate 메소드가 호출되면서 savedInstanceState를 전달한다. 이 기사의 목적 상 이 번들에 대해서는 신경 쓰지 않아도 된다. 이 번들은 활동이 일시 중지된 후 다시 시작될 때 사용된다.
  • onCreate는 같은 이름을 가진 Activity 클래스 메소드를 재정의한 메소드이며 수퍼 클래스의 onCreate 메소드를 호출한다.
  • setContentView() 메소드는 main.xml 파일에 정의된 UI 레이아웃과 관련된다. main.xml 및 strings.xml의 모든 항목이 R.java 소스 파일에 정의된 상수에 자동으로 맵핑된다. 이 필드는 빌드할 때마다 변경되므로 직접 편집하면 안된다.

애플리케이션을 실행하면 흰색 화면에 검은색 텍스트가 표시된다.


그림 6. Flashlight의 흰색 화면
Flashlight의 흰색 화면

FlashLight 애플리케이션을 위해 설정된 AndroidManifest.xml 파일은 다음과 같다.


Listing 4. FlashLight를 위한 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.msi.flashlight"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".FlashLight"
                  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>
</manifest>

이 파일은 Eclipse용 Android Developer Tools 플러그인에 의해 자동으로 작성되므로 아무 작업도 수행하지 않아도 된다.

물론 이 애플리케이션은 매우 훌륭하다고 표현할 수는 없겠지만 곤히 잠들어 있는 아내를 방해하지 않고 간단한 문서를 읽으려고 할 때나 전원이 차단되어 지하실에 있는 퓨즈함을 찾으러 갈 때 유용하게 사용할 수 있다.




위로


요약

이 기사에서는 상위 레벨에서 Android를 살펴본 후 단순한 애플리케이션을 작성해 보았다. 예제에 흥미를 느껴서 Android 플랫폼에 대한 학습 욕구가 커졌기를 바란다. Android는 휴대폰에 멈추지 않고 더 넓은 시장에서 그 가치를 인정 받는 오픈 소스 플랫폼이 될 것이다.





위로


다운로드 하십시오

설명 이름 크기 다운로드 방식
FlashLight source code os-android-devel-FlashLight.zip 22KB HTTP
다운로드 방식에 대한 정보



출처: http://www.ibm.com/developerworks/kr/library/os-android-devel/index.html