1. 안드로이드란?
안드로이드는 모바일디바이스들을 위한 SW Stack으로써, OS, Middleware, Key application을 포함하고 있다.
안드로이드SDK는 Java language를 사용하여 안드로이드플랫폼상의 application 개발에 필요한 API들과 도구들을 제공한다.
2. Features
애플리케이션 프레임워크 : 컴포넌트의 재사용과 대체(replacement)를 가능하게 함.
달빅(Dalvik) 가상머신 : 모바일 디바이스에 최적화됨.
통합(Integrated) 브라우저 : 오픈 소스 Webkit 엔진 기반임.
최적화된 그래픽 : 구글이 만든 2D 그래픽 라이브러리를 사용함.
OpenGL ES 1.0 스펙에 기반한 3D 그래픽을 사용함 (하드웨어 가속은 선택사항임)
SQLite : 정형화된 데이터 저장공간을 위한 것임.
미디어 지원 : 일반적인 오디오, 비디오, 그리고 정지(still) 이미지 포맷들을 지원
(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
GSM과 CDMA 텔레포니(Telephony) (하드웨어 의존적)
블루투스, EDGE, 3G, WiFi (하드웨어 의존적)
카메라, GPS, 나침반, 그리고 가속도계 (하드웨어 의존적)
풍부한 개발 환경 : 디바이스 에뮬레이터, 디버깅 도구, 메모리 및 성능 프로파일링 그리고 Eclipse
IDE를 위한 플러그인을 포함함
3. Architecture
3.1 Applications
안드로이드가 기본적으로 제공하는 Java Applications
3.2 Application Framework
자바기반의 프레임웍으로 대부분 native C/C++코드로 작성되어 JNI로 자바와 인터페이싱되어 있다.
코어시스템서비스와 하드웨어 서비스로 구성되어 있다.
Core System Services
- Activity Manager
- Package Manager
- Resource Manager
- Content Provierss
- Window Manager
- View System
Hardware services
- low-level access to hw device
- Location Manager
- Telephony Manager
- Blutooth service
- Wifi service
- USB service
- Sensor service
3.3 Libraries
안드로이드가 내장하고 있는 기본적인 라이브러리는 Bionic Libc, Function Library, Navive Service, Hardware Abstraction Library로 구성된다.
- Bionic Libc : 임베디드에 최적화된 구글에서 직접 구현한 libc이다. 이를 직접 구현한 이유는 GPL를 피하여 일부 라이선스 프리를 보장하기 위한것과, 개별프로세스마다 포함되어야 하고 빨라야 하기 때문이다. 따라서 가볍고 빠른 libc를 목표로 작성된 Libc이다.
- Function Library : Webkit, OpenCORE, SQLite들이 있다.
- Native server : Surface flinger, Audio flinger가 있다. 이는 시스템 전반에 걸친 화면과 소리를 담당하는 서버라고 보면된다.
- Hardware Abstraction Layer : OS로 사용하고 있는 리눅스운영체제가 다수의 드라이버개발모델을 가지고 있어 이를 통합하고자 하는 의도가 보이는 대목이다. 이를 이용하여 안드로이드플랫폼을 하드웨어인터페이스로부터 분리할수 있다. GPL을 피할수 있으며 안드로이드가 별도의 하드웨어 요구사항을 정의하고 있다.
- 안드로이드 런타임 라이브러리 : Dalvik가상머신과 Core라이브러리들로 구성된다.
3.4 안드로이드 런타임 라이브러리
- Dalvik 가상머신 : 안드로이들에서는 자바 가상머신을 사용하지 않는다. 이유는 여러가지가 있는데 속도와 안드로이드 프레임웤구조때문이다. 달빅가상머신은 프로세스별로 생성되어 어플리케이션간의 청정영역(clean-room)을 제공한다.
- Register 기반의 가상머신 (no JIT, interpreter-only)
- Optimized for low memory requirements
- Designed to allow multiple VM instances to run at one
- Relying on underlying OS for process isolation,
memory management and threading support
- Executes Dalvik Executables (DEX) files which are zipped into
an Android Package (APK)
- Core라이브러리 : 강력하지만 단순하고 익숙한 개발 플랫폼을 제공하는 자바언어를 위한 Core API들을 포함하고 있다. Application개발시 필요한 거의 모든 자바Core API들이 있다고 보면된다. Data structure, Utility, File access, Network access, graphic, ...
- Bundled in android.jar
- Android platform library: android.*.
XML Parser implementations included (DOM, SAX, XMLPullParser)
- Apache Harmony (Standrard Java Library implementation)
- Several popular Open Source projects available out-of-the-box.
Apache Commons (HttpClients 2/4, Codec), BouncyCastle JCE providers, SQLite, JUnit 3.8.x
- GData APIs partly included as wireless version(com.google.wireless.gdata)
4. 리눅스 커널
- 리눅스커널을 기반으로 하고 있으나 리눅스는 아니다.
X-Windows내장하지 않음, Glibc지원하지 않음, 표준리눅스유틸리티 전체를 포함하지 않는다.
- 리눅스커널 버전 2.6.23, 2.6.24, 2.6.25, 2.6.27를 사용해왔으며 안드로이드지원을 위해 패치를 포함한다.
- 리눅스를 사용하는 이유
- 메모리 및 프로세스관리
- Permission기반의 보안모델
- 검증된 드라이버모델
- 공유라이브러리 지원
- 오픈소스기반 등의 장점을 이용함.
- 확장된 리눅스커널영역
- Alarm, Ashmem, Binder, Power Management, Low memory killer, Kernel debugger, logger
-
http://git.android.com에서 배포