안드로이드 개요
주요 내용 안드로이드 소개 안드로이드 SDK Hello, world 예 안드로이드 아키텍처 응용 프로그램, 응용 프레임워크 안드로이드 런타임, 라이브러리 리눅스 커널 안드로이드 SDK 개발 환경 구축 컴파일 과정 Hello, world 예
안드로이드 소개
구글 안드로이드(Google Android) 모바일 장치를 위한 소프트웨어 스택 리눅스 운영체제, 미들웨어와 핵심 응용 프로그램들로 구성 안드로이드 SDK 제공 자바 언어로 안드로이드 응용 프로그램을 개발을 위한 API와 툴 제공 오픈소스 기존의 다양한 오픈소스를 기반으로 개발 기존의 오픈소스 라이선스 GPL, GPL2, LGPL Apache BSD MIT SGI OpenGL
안드로이드 주요 특징 컴포넌트들의 교체와 재사용이 가능한 응용 프레임워크 모바일 장치에 최적화된 Dalvik 가상머신 Apache Harmony 표준 자바 라이브러리, http://harmony.apache.org/ Webkit 기반 웹 브라우저, http://webkit.org/ OpenGL ES 기반 3D 그래픽스 , http://www.khronos.org/opengles/ SQLite에 기반한 데이터베이스, http://sqlite.org/ OpenSSL에 기반한 SSL/TSL 보안 라이브러리, http://openssl.org/ 다양한 미디어 코덱 지원 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF GSM, 3G, 블루투스, WiFi, GPS, 카메라, 가속도계(accelerometer) 지원 풍부한 개발 환경 이클립스 IDE 플러그인, http://www.eclipse.org/ 디바이스 에뮬레이터, 디버깅 툴, 메모리 성능 프로파일링
안드로이드 아키텍처
응용 프로그램 구글 또는 제3자가 Java로 작성한 응용 프로그램 기본 응용 프로그램 내장 안드로이드 런타임(Dalvik 가상머신, 코어 라이브러리) 상에서 수행 Java API는 Java SE 5 버전에 기반 기본 응용 프로그램 내장 Email, SMS, Calendar, Maps, Browser, Contacts
응용 프레임워크 안드로이드 응용 프로그램 작성 시 사용되는 클래스들을 제공 Activity Manager Views 응용들의 수명(life cycle)을 관리 Views 응용들의 사용자 인터페이스의 구성 Content Provider 응용들 간의 데이터 액세스와 공유 기능 제공 Notification Manager 사용자에게 알려주는 시그널링 메커니즘 제공 Resource Manager 문자열, 그래픽 등과 같은 코드가 아닌 리소스들을 액세스하는 기능
Dalvik 가상머신 (1) 안드로이드 아키텍처의 핵심 구성요소 Java ME(Mobile Edition) 등과 같은 기존 Java 가상머신을 사용하지 않고 고유의 가상머신 개발 SUN의 라이선스 문제 회피 Davlik은 레지스터-기반 가상머신 Java 가상머신은 스택-기반 가상머신 Dalvik은 Java bytecode 대신 dex라 불리우는 고유의 bytecode 사용 각 응용들은 Dalvik 가상머신의 인스턴스들로 실행 Dalvik의 각 인스턴스는 리눅스 커널의 프로세스 Dalvik은 다수의 인스턴스를 효율적으로 처리하도록 설계 모든 안드로이드 하드웨어와 시스템 서비스는 Dalvik 을 사용하여 관리 Dalvik 은개발자 본스타인의 조상 마을 아이슬란드 어촌 지역명
Dalvik 가상머신 (2)
라이브러리 (1) 라이브러리 Apache Harmony 표준 자바 라이브러리, http://harmony.apache.org/ Surface manager 디스플레이 서브시스템에 대한 접근을 관리 Media Framework PacketVideo의 OpenCORE 기반, http://www.packetvideo.com/ MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 등 지원 SQLite 경량 데이터베이스, http://sqlite.org/ OpenGL/ES 3D 그래픽스, http://www.khronos.org/opengles/ FreeType 비트맵 및 벡터 폰트 렌더링 지원, http://www.freetype.org/
라이브러리 (2) Webkit SGL SSL Bionic Libc 웹 브라우저, http://webkit.org/ 웹 브라우저, http://webkit.org/ SGL 2D 그래픽스 엔진 SSL OpenSSL 기반 SSL/TSL 보안 라이브러리, http://openssl.org/ Bionic Libc BSD 기반 개발된 고유의 표준 C 시스템 라이브러리 linker, libc 표준 glibc, uclibc 사용하지 않음 사용자 응용 프로그램의 GPL 라이선스 회피 Glibc의 절반 정도의 200k 크기 C++의 STL(standard Template Library) 지원하지 않음
리눅스 커널 (1) 리눅스 커널 2.6 을 기반으로 하드웨어와 소프트웨어 스택 간의 추상화 계층으로 동작 프로세스 관리 Zygote를 통한 프로세스 관리 응용 프로그램을 빠르게 구동하기 위해 미리 fork 되어 있는 프로세스 실행하기 전 까지는 특정 응용 프로그램과 접합하지 않은 중립적인 상태 유지 메모리 관리 네트워크 스택 드라이버 모델 보안
리눅스 커널 (2) ARM 아키텍처에 포팅되는 GNU utillity packages 사용 ARM EABI(Embedded Application Binary Interface)에서 동작 http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3105/4 OpenBinder IPC(Inter Process Communication) 사용 http://www.angryredplanet.com/~hackbod/openbinder/docs/html/index.html X86 머신 상에서는 QEMU 에뮬레이터 필요 Goldfish: QEMU 에뮬레이터 기반 가상 하드웨어 www.qemu.org
안드로이드 SDK 15
안드로이드 SDK 소프트웨어 개발 키트 (Software Development Kit) 응용 프로그램을 개발하기 위한 API와 툴 제공 API 라이브러리, 다큐먼트 문서, 샘플 코드로 구성 안드로이드 에뮬레이터 DDMS (Dalvik Debug Monitoring Service) Java IDE인 Eclipse 상에서 개발환경 구축 다양한 PC 플랫폼 에서 지원 Windows, Mac OS X, Linux
순천향대학교 컴퓨터학부 이 상 정 17
개발 환경 구축 SDK 개발 환경 안드로이드 SDK JDK (Java Development Kit), Eclipse Android SDK 1.5 (Windows 버전) 다운로드, http://developer.android.com/sdk/1.5_r1/index.html JDK (Java Development Kit), Java SE (SDK) 6, JDK 6 Upadte 13 다운로드, http://java.sun.com/javase/downloads/index.jsp Eclipse Eclipse 3.4 (Ganymade), Eclipse IDE for Java Developers 다운로드 , http://www.eclipse.org/downloads/
안드로이드 SDK 설치 SDK 설치 (Windows) 다운로드 후 SDK 설치 경로에 압축 해제 환경 변수 설정 시작 -> 내 컴퓨터 선택, 마우스 오른쪽 버튼 속성 -> 고급 -> 환경 변수, 시스템 변수 Path 선택 SDK 설치 경로 등록, <your_sdk_dir>/tools
JDK 설치 JDK 설치 다운 받은 파일 실행
Eclipse 설치 및 ADT 플러그-인 다운로드 후 설치 경로에 압축 해제 ADT(Android Developer Tool) 플러그-인(plug-in) Eclipse 실행 메뉴, Help -> Software Updates 선택 다이얼로그, Available Software -> Add Site 선택 http://dl-ssl.google.com/android/eclipse/ 입력 다이얼로그, Available Software -> Developer Tools 체크박스 표시-> Install 선택 Install 다이얼로그, Next -> Finish Android DDMS, Android Development Tool 표시 Eclipse 다시 실행
ADT 플러그-인 (1)
ADT 플러그-인 (2)
ADT 플러그-인 (3)
ADT 추가 Eclipse 재실행 후 Window -> Preferences -> Andorod, Click Apply, then OK
응용 프로그램 컴파일 과정
에뮬레이터
Hello, World 예 1, http://developer. android 29
AVD 생성 AVD (Android Virtual Device) 안드로이드 에뮬레이터 실행을 위해 AVD 생성 에뮬레이터에서 사용되는 시스템 이미지와 디바이스 세팅 등을 정의 안드로이드 에뮬레이터 실행을 위해 AVD 생성 명령 창에서 다음 실행 android create avd --target 2 --name my_avd
프로젝트 생성 Eclipse 실행하고, 프로젝트 생성 소스, Eclipse Package File > New > Android Project Project name: HelloAndroid 프로젝트 이름 Application name: Hello, Android 안드로이드 디바이스에 표시되는 응용 이름 Package name: com.example.helloandroid 패키지 이름영역(namespace)으로 소스코드 위치 Create Activity: HelloAndroid 생성되는 클래스 이름, Activity 클래스의 서브클래스 Min SDK Version: 2 응용의 실행에 필요한 최소 API 레벨 표시 2의 값은 Android 1.1 target을 선택 소스, Eclipse Package source -> com.example.helloandroid -> HelloAndroid.java
초기 소스파일
UI 구성 소스 추가
소스 설명 Activity 클래스 뷰(view) TextView 클래스 작업(action)을 실행하고 단일 사용자 인터페이스(UI) 를 생성 onCreate() 메서드 사용자 Activity 실행 시 호출 초기화 및 UI 셋업 setContentView() 메서드 Activity UI의 내용을 디스플레이 뷰(view) 사용자 인터페이스는 뷰라는 객체의 계층으로 구성 뷰는 버튼, 이미지, 텍스트 라벨 등과 같은 객체 이들 객체들은 View 클래스의 서브클래스 TextView 클래스 텍스트를 관리하는 View의 서브클래스 setText() 메서드는 텍스트의 내용을 정의
실행 Run -> Run Android Application 선택
실행결과
Hello, World 예 2, http://developer. android 38
예제 소개 앞의 예제는 프로그램으로 UI 배치 안드로이드는 XML 기반 배치 (XML-based layout) 파일 제공 Eclipse 실행하고, Hello2 프로젝트 생성 File -> New -> Android Project Project name: Hello2 Application name: Hello2 Package name: com.example.hello2 Create Activity: Hello2 Min SDK Version: 2
XML 소스 XML 소스 Eclipse Package, res > layout > main.xml
XML 소스 분석 XML 속성(attribute) xmlns:android android:layout_width 스크린 상에서 배치가 가능한 폭 android:layout_height android:text TextView가 디스플레이하는 텍스트 표시 문자열 직접 기술 대신 string 리소스 사용
string 리소스 수정 string 리소스 Eclipse Package, res -> values -> string.xml
소스 코드 생성된 코드 원본 사용 R 클래스는 프로젝트에서 생성된 리소스를 참조하는 클래스 gen/R.java에서 정의
참고 사이트 구글 사이트, http://www.android.com/ 한국 안드로이드 사이트 Open Source Project, http://source.android.com/ Git, Repo version control system Ubuntu linux, Ecllipse Android Developers, http://developer.android.com/ Android application Android SDK Android Market, http://www.android.com/market/ Google Group, Android Internals, http://groups.google.com/group/android-internals 한국 안드로이드 사이트 http://www.kandroid.org