460 likes | 1.02k Views
안드로이드 개요. 주요 내용. 안드로이드 소개 안드로이드 아키텍처 응용 프로그램 , 응용 프레임워크 안드로이드 런타임 , 라이브러리 리눅스 커널 안드로이드 SDK 개발 환경 구축 컴파일 과정 Hello, world 예. 안드로이드 소개. 구글 안드로이드 (Google Android). 모바일 장치 를 위한 소프트웨어 스택 리눅스 운영체제 , 미들웨어 와 핵심 응용 프로그램 들로 구성 안드로이드 SDK 제공
E N D
주요 내용 • 안드로이드 소개 • 안드로이드 아키텍처 • 응용 프로그램, 응용 프레임워크 • 안드로이드 런타임, 라이브러리 • 리눅스커널 • 안드로이드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 • 응용들의수명(life cycle)을관리 • Views • 응용들의 사용자 인터페이스의 구성 • Content Provider • 응용들간의 데이터 액세스와 공유 기능 제공 • NotificationManager • 사용자에게알려주는 시그널링 메커니즘 제공 • ResourceManager • 문자열, 그래픽등과 같은 코드가 아닌 리소스들을 액세스하는 기능
Dalvik가상머신(1) • 안드로이드 아키텍처의 핵심 구성요소 • Java ME(Mobile Edition) 등과같은 기존 Java 가상머신을 사용하지 않고 고유의 가상머신 개발 • SUN의 라이선스 문제 회피 • Davlik은 레지스터-기반 가상머신 • Java 가상머신은스택-기반 가상머신 • Dalvik은 Java bytecode 대신 dex라 불리우는 고유의 bytecode사용 • 각 응용들은 Dalvik가상머신의인스턴스들로 실행 • Dalvik의 각 인스턴스는리눅스커널의프로세스 • Dalvik은 다수의 인스턴스를 효율적으로 처리하도록 설계 • 모든 안드로이드 하드웨어와 시스템 서비스는 Dalvik을사용하여 관리 • Dalvik은개발자본스타인의 조상 마을 아이슬란드 어촌 지역명
라이브러리 (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 • 웹 브라우저, 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(standardTemplate Library) 지원하지 않음
리눅스커널(1) • 리눅스커널2.6 을 기반으로 하드웨어와 소프트웨어 스택 간의 추상화 계층으로 동작 • 프로세스 관리 • Zygote를 통한 프로세스 관리 • 응용 프로그램을 빠르게 구동하기 위해 미리 fork 되어 있는 프로세스 • 실행하기 전 까지는 특정 응용 프로그램과 접합하지 않은 중립적인 상태 유지 • 메모리 관리 • 네트워크 스택 • 드라이버 모델 • 보안
리눅스커널(2) • ARM 아키텍처에포팅되는GNU utillity packages 사용 • ARMEABI(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 • 소프트웨어 개발 키트 (Software Development Kit) • 응용 프로그램을 개발하기 위한 API와 툴 제공 • API 라이브러리, 다큐먼트 문서, 샘플 코드로 구성 • 안드로이드 에뮬레이터 • DDMS (Dalvik DebugMonitoring Service) • JavaIDE인 Eclipse 상에서 개발환경 구축 • 다양한 PC 플랫폼 에서 지원 • Windows, Mac OS X, Linux
개발 환경 구축 • SDK 개발 환경 • 안드로이드SDK • Android SDK 1.5 (Windows 버전) • 다운로드, http://developer.android.com/sdk/1.5_r1/index.html • JDK (JavaDevelopment Kit), • Java SE (SDK) 6, JDK 6 Upadte13 • 다운로드, 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, AndroidDevelopment Tool 표시 • Eclipse 다시 실행
ADT 추가 • Eclipse 재실행 후 • Window -> Preferences -> Andorod, Click Apply, then OK
Hello, World 예 1,http://developer.android.com/guide/tutorials/hello-world.html
AVD 생성 • AVD (Android Virtual Device) • 에뮬레이터에서 사용되는 시스템 이미지와 디바이스 세팅 등을 정의 • 안드로이드 에뮬레이터 실행을 위해 AVD 생성 • 명령 창에서 다음 실행android create avd --target 2 --name my_avd
프로젝트 생성 • Eclipse 실행하고, 프로젝트 생성 • 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
소스 설명 • Activity 클래스 • 작업(action)을 실행하고 단일사용자 인터페이스(UI) 를 생성 • onCreate() 메서드 • 사용자 Activity 실행시 호출 • 초기화및 UI 셋업 • setContentView() 메서드 • Activity UI의내용을 디스플레이 • 뷰(view) • 사용자 인터페이스는뷰라는 객체의 계층으로 구성 • 뷰는 버튼, 이미지, 텍스트 라벨 등과 같은 객체 • 이들 객체들은 View 클래스의 서브클래스 • TextView클래스 • 텍스트를 관리하는 View의 서브클래스 • setText() 메서드는 텍스트의 내용을 정의
실행 • Run -> Run • Android Application 선택
Hello, World 예 2,http://developer.android.com/guide/tutorials/hello-world.html
예제소개 • 앞의 예제는 프로그램으로 UI 배치 • 소스 코드로 응용의 UI 구현 • 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 • XML 이름영역선언 • 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 • Ubuntulinux, 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