[안드로이드 개요]
-- 안드로이드 개요
- Open, Complete. Free한 플랫폼
- 운영체제, 미들웨어, 자바로 개발된 핵심 애플리케이션(key application)을 포함하는 모바일 기기의 소프트웨어 집합체
- 단말기에서 하드웨어를 제외한 나머지 모든 소프트웨어 계층
- 개방형 플랫폼으로 소스 코드를 완전 개방 → 제한 없이 안드로이드 기반의 모바일 기기 제작 가능
- 2007년 11월 구글과 OHA(Open Handset Alliance)라는 모임에 의해 발표한 모바일 플랫폼
- 아파치 2.0 라이센스를 가지며 소스 코드로 모든 사람이 빌드 가능
- 기본적으로 JAVA 프로그래밍 언어를 사용하며 어플리케이션의 빌드, 컴파일, Test 및 디버그를 할 수 있는 SDK를 제공
-- 안드로이드 특징
- 애플리케이션 프레임워크: 컴포넌트의 재사용과 대체를 가능케 함
- Dalvic 가상머신: 모바일 디바이스에 최적화
- 통합(Integrated) 브라우저: 오픈 소스 Webkit 엔진 기반
- 최적화된 그래픽: 구글이 만든 2D 그래픽 라이브러리 사용
- OpenGL ES 1.0 스펙에 기반한 3D 그래픽 사용(하드웨어 가속은 선택 사항)
- SQLite: 정형화된 데이터 저장공간을 위함
- 미디어 지원: 일반적 포맷(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)을 지원
- GSM Telephony, Bluetooth, EDGE, 3G, WiFi, 카메라, GPS, 나침반, 가속도계(하드웨어 의존적)
- 풍부한 개발 환경: 디바이스 에뮬레이터, 디버깅 도구, 메모리 및 성능 프로파일링, Eclipse IDE를 위한 플러그인
-- 안드로이드 아키텍쳐 [가볍게 보고 넘어가도 됨]
- 구조
- 세부 설명
애플리케이션
- ex) Gmail과 연동되는 이메일 클라이언트, SMS 문자 메시지 프로그램, 캘린더, 구글 맵 애플리케이션 등등
- Webkit 기반 웹 브라우저
- 컨택트(contact)
- 네이티브 애플리케이션과 서드파티 애플리케이션이 하드웨어 접근 혹은 실행 권한 등 모든 면에서 동등
- 동일한 API 사용
- 동일한 런타임에서 실행
- 애플리케이션 간의 직접적인 데이터 공유가 불가능 (컨텐트 프로바이더를 통해야함)
애플리케이션 프레임워크
- 자바 기반의 애플리케이션 프레임워크. 대부분 JNI(Java Native Interface)를 통해 native C/C++ 코드로 작성
- 개발자에게 API를 제공
라이브러리
- Binoic Libc는 임베디드 디바이스를 위한 최적화된 libc
- 직접 구현한 이유: 사용자 영역에서 GPL에 적용되지 않기 위하여, 개별 프로세스마다 포함되는 영역이기 때문에 크기를 최소화하기 위하여, 제한된 CPU의 최적 성능 효과를 위하여
- Function Library
- 웹 브라우저를 위한 Webkit
- PacketVideo의 OpenCORE 플랫폼 기반의 미디어 프레임워크
- 가벼운 데이터 베이스인 SQLite
안드로이드 런타임
- 여러개의 VM을 동시에 실행시키도록 디자인되어 있으며 프로세스 독립과 메모리 관리 쓰레드를 OS에 의존
- 모든 안드로이드 애플리케이션은 Dalvic 가상머신 내에서 자신의 인스턴스를 가지고 자신의 프로세스내에서 동작
- 달빅 VM
- 런타임 환경을 통해 더 확실하게 HW와 SW를 계층화
- 임베디드 단말에 최적화된 VM으로 메모리 보호(Memory Protection), 가비지 컬렉션(Garbage-collection), 라이프 사이클 관리 등의 특징
- Sun의 JVM보다 작은 메모리 환경에서도 잘 실행할 수 있도록 성능 개선의 효과도 얻으면서 자바를 탑재할 때의 라이선스 비용의 문제도 해결
-- 안드로이드 애플리케이션
- 개요
- 안드로이드 애플리케이션은 자바 언어로 작성
- 컴파일 후 압축된 아카이브 파일(.apk 파일)로 모바일 디바이스에 배포
- apk 파일 내부에 있는 모든 코드는 하나의 애플리케이션으로 간주
- 애플리케이션은 4가지 컴포넌트의 조합으로 구성
Activity
뷰와 이벤트 응답으로 이루어진, 사용자와의 상호작용을 할 수 있게 사용자 눈에 보여지는 컴포넌트
애플리케이션에 하나 이상의 Activity 포함 가능
Service
비쥬얼한 사용자 인터페이스 없이 정해지지 않은 시간 동안 내부에서 실행되는 코드
예: 백그라운드 음악 재생, 네트워크 상에서 데이터 전송 등
Broadcast Receiver
외부 이벤트를 처리하는데 사용되며, 대기하고 있다가 이벤트가 발생하면 사용자에게 알려줌
예: 시간대 변경, 배터리 부족, 사진 촬영, 사용자 언어 설정 변경 등
Content Provider
다른 애플리케이션에게 유용한 애플리케이션 데이터의 특정 집합을 생성
애플리케이션 사이에 데이터를 공유할 때 유용
애플리케이션의 컴포넌트를 AndroidManifest.xml에 포함
Intent는 어떤 작업에 대한 요청, 즉 Activity, Service, Broadcast Receiver 컴포넌트를 활성화하는데 필요한
명령과 데이터를 담은 클래스
- 개요
Managed Application
가장 기본적이고 주요한 안드로이드 애플리케이션 개발 방식
달빅 VM에서 동작하는 순수 자바로만 개발한 프로그램
안드로이드는 달빅 위에 여러 프레임워크 API를 제공하고 있고, OpenGL이나 Multimedia 등의 라이브러리에서 지원하는 기능 또한 API 형태로 달빅 위에서 이용할 수 있도록 제공
개발자는 SDK에서 제공하는 이클립스 플러그인을 통해서 쉽게 UI를 구성하면서 개발 가능
자바라는 언어의 특성상, 약간의 속도 저하와 예측 불가능한 Garbage collection의 수행이라는 약점
하드웨어나 라이브러리와 밀접하게 결합이 되어야 하는 경우는 기존의 프레임워크 API로는 불충분
Native Application
달빅 내에서 C/C++으로 구성된 동적 라이브러리를 적재하여 JNI(Java Native Interface) 형태로 함수를 호출하는 방식
구글이 최근 NDK(Native Development Kit)를 따로 배포하여 C/C++의 코드를 손쉽게 .so 형태의 라이브러리로 교차컴파일
CPU의 의존도가 높은 프로그램 또한 하드웨어를 직접 다루거나 기존 달빅 API로 구현하기 어려운 경우 효율적
메모리 제어 등 프로그램 개발에 보다 세심한 관리가 필요
AJAX Application
JavaScript와 Ajax 등으로 웹페이지를 작성하고 안드로이드의 브라우저를 통해서 수행하는 방식
웹킷(Webkit) 코어와 SquirrelFish 자바스크립트 엔진을 사용하고 있으므로 PC 기반의 동작과 유사한 기능 제공
구글의 대표 웹 서비스(Gmail, Google Docs 등)가 Ajax로만 구현
항상 브라우저를 통해서 수행이 되어야 하므로 백그라운드 서비스 등이 불가능하고, 시스템이나 프레임워크 내의 접근이 불가능