안드로이드 앱 프로그래밍 - 1.hello world

안드로이드에서 실행가능한 앱(App)을 개발할 수있는 환경을 구축하고 간단한 예제를 통해 동작을 확인하는 방법을 설명한다.
안드로이드 플랫폼에서 돌아가는 모든 앱은 자바로 작성된다. 이후 JVM 을 통해 실행된다.

준비운동하기

JAVA IDE 로 가장 유명한 이클립스를 기반으로 사용하고, 여기에 안드로이드 개발에 필요한 라이브러리와 플러그인들을 추가로 설치할 것이다.

기본적인 자바 개발 툴킷(JDK)이 필요하다. http://www.oracle.com/technetwork/java/javase/downloads/index.html 에서 다운 받을 수 있다.
안드로이드 개발을 위해서는 최신버전이 아닌 JDK 6 을 받는다. 'Java SE 6 Update 38' 의 'JDK' 를 선택한다. 라이센스를 허락하고, 'Linux x64 - jdk-6u38-linux-x64.bin' 를 받았다.
다음과 같이 설치한다.

#chmod 777 jdk-6u38-linux-x64.bin
#./jdk-6u38-linux-x64.bin

이제 환경변수와 Path 를 잡아주어야 한다. ~/.bashrc 파일에 다음을 추가한다.

export JAVA_HOME=~/jdk1.6.0_38
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin/:$PATH

SDK 설치하기

이클립스를 실행하기 위해서는 관련 패키지 프로그램을 설치해야 한다.

#apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
#ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

예전에는 이클립스와 SDK, ADT(Android Development Tools) 를 따로따로 설치해야 했다. 하지만 이런 번거로움을 줄이기 위해서 이들 3개를 통합해서 배포하고 있다.
http://developer.android.com/sdk/index.html 에 가면 'ADT Bundle' 이 있는데 이것을 다운받으면 된다.

  1. Eclipse + ADT plugin
  2. Android SDK Tools
  3. Android Platform-tools
  4. The latest Android platform
  5. The latest Android system image for the emulator

위의 패키지들이 포함되어 있기 때문에 일일이 다운받는 수고를 덜 수 있다. 압축을 푸는 것으로 설치는 완료된다.

#unzip adt-bundle-linux-x86_64.zip
#cd adt-bundle-linux-x86_64/eclipse
#./eclipse &

낮익은 이클립스 IDE 가 실행된다. 이로서 앱 개발을 위한 환경설정은 끝났다.

예제 - Hello World

앞서 구축한 개발환경을 이용해서 아주 간단한 예제를 만들어보겠다.
'File → New → Android Application Project' 을 선택한다. 프로젝트 이름(여기서는 test 로 지정)을 적는다. 빌드 및 실행할 타겟의 안드로이드 버전을 지정할 수 있다.
나머지 이후 설정은 기본설정으로 넘긴다.

위 그림과 같이 'MainActivity.java' 파일을 선택하면 소스코드 윈도우가 보일 것이다.

package com.example.test;
 
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;             // 추가
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);           // 추가
        tv.setText("Hello Woojong!!");                  // 추가
        setContentView(tv);                         // 수정
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
 
}

창에 간단하게 문자를 출력하는 코드다. 파일을 저장하고, 'Run test' 아이콘을 누른다. 곧이어 AVD Error 창이 뜨면서 Android Virtual Device 를 새로 추가하라는 메세지가 뜬다.
기본적으로 지원하는 디바이스들이 몇 개 있다. 이중에서 원하는 H/W Spec 을 찾아 선택한다.
다시 실행 아이콘을 누르면, 에뮬레이터가 실행된다. 앞서 만든 프로그램은 아주 짧고 간단한 것임에도 불구하고 이를 실행시키기 위해서는 꽤 오랜시간을 기다려야 한다.

바로 에뮬레이터의 속도 때문인데, 반응속도나 앱이 실행되기 까지 초기화되는 시간이 너무나 길다. 그래서 될 수 있으면, 한번 실행시킨 에뮬레이터는 종료시키지 않는다. 프로그램이 바뀌더라도 금방 실행이 가능하기 때문이다.
아래 그림처럼 나왔는가?

에뮬레이터의 속도를 빠르게 하고 싶다면

직접 사용해보면 알겠지만, 에뮬레이터의 속도는 말도 못하게 느리다. 그래서 여러가지 방법들이 고안되었는데, 그중에 가장 많이 사용하는 방법을 설명하도록 하겠다.
안드로이드는 원래 휴대폰 플랫폼으로 개발되었지만, 요즘에는 노트북, TV 등에도 사용되고 있다.
안드로이드를 x86 아키텍처에 포팅한 프로젝트가 있는데, 여기서 제공하는 ISO 이미지를 이용해서 Virtualbox 에 설치한 후, 마치 안드로이드 타겟보드를 연결한 것과 같은 효과를 내볼 것이다.
사용해본 결과, 기존의 에뮬레이터보다 반응속도 등 여러가지 면에서 훨씬 좋은 결과를 냈다.

먼저 http://www.android-x86.org/download 에서 ISO 이미지를 다운로드 받는다. 현재(2013년 1월 29일) 업로드된 것중 최신버전인 ICS 4.x 의 경우 태블릿 버전을 포팅해놨다.
여러가지 태플릿 제조사 별로 파일들이 나뉘어져 있는데, 이중에 ASUS Eee PC 의 'android-x86-4.0-RC2-eeepc.iso' 를 다운받는다.

이제 Virtualbox 를 설치한다.

#apt-get install virtualbox

VirtualBox 관리자에서 “새로 만들기” 버튼을 눌러서 새로운 이미지를 만들어 준다. 설정은 아래와 같이 진행합니다.

가상머신 이름 Android_4.0.4
운영체제 종류 운영체제(Linux), 버전(Other Linux)
메모리 1024
부팅 하드디스크 새 가상 디스크 만들기
파일 형식 VDI (VirtualBox 디스크 이미지)
저장소 정보 동적 할당
가상 디스크 파일 위치 및 크기 기본설정

이미지가 만들어 졌으면 네트워크 옵션을 브리지 어탭터로 수정한다. 그리고, 저장소에서 CD/DVD드라이버에 다운로드 받은 ISO이미지를 넣어 준다.

부팅을 하면 부트로더 메뉴가 나온다.
여기서 'Installation - Install Android-x86 to harddisk' 를 선택한다.

Choose Partition
   Create/Modify partitions
   cfdisk
   [New] -> [Primary] -> 엔터 -> [Bootable] -> [Write] -> yes -> [Quit]
 
Choose Partition
   sda1  linux   VBOX HARDDISK
 
Choose filesystem
   ext3 -> Confirm -> Yes
 
Do you want to install boot loader GRUB?
   Yes
 
Do you want to install /system directory as read-write?
   Yes
 
Android-x86 is installed successfully.
   Create a fake SD card -> 수정 -> 엔터
 
Reboot

완료 되면, 저장소에서 ISO 이미지를 제거한다. 이렇게 설치하면 정상적으로 안드로이드가 실행 되는 것을 볼 수 있다.

이제 설치한 안드로이드에 앞서 만든 예제 프로그램을 올려보자. 그렇기 위해서는 서로 연결해주는 작업이 필요하다.
먼저 안드로이드에 터미널 프로그램을 실행시켜 아래 그림과 같이 'netcfg' 를 실행한다.

현재 eth0 인터페이스에 192.168.100.21 이 할당된 것을 볼 수 있다. 이 IP 를 통해 Host 와 Guest 가 통신할 것이다.

#cd adt-bundle-linux-x86_64/sdk/platform-tools
#./adb connect 192.168.100.21
 
connected to 192.168.100.21:5555

서로 접속하는데 성공했다. 이제 이클립스를 실행시킨다. 아래 그림처럼 디바이스가 연결된 것을 확인할 수 있다.

이제 앞서 만든 예제를 실행해보자. 에뮬레이터가 아닌 real target 으로 말이다. Guest 의 안드로이드 화면에 Hello world 를 확인할 수 있다.

Guest 에서 외부에 연결할 수 있게 설정을 해줘야 한다. DNS 설정은 아래와 같이 해주면 된다.

setprop ro.kernel.android.ndns 2
setprop net.dns1 8.8.8.8
setprop net.dns2 8.8.4.4


  • computer/embedded/android_app.txt
  • Last modified: 5 weeks ago
  • by 127.0.0.1