2010.05.24 00:44
http://developer.android.com/guide/basics/what-is-android.html
제멋대로의 해석입니다. 

안드로이드란 무엇인가?
안드로이드는 모바일 기기를 위한 OS, 미들웨어 및 핵심 소프트웨어에 이르는 단계별 소프트웨어들입니다. Android SDK는 자바 프로그래밍 언어를 사용하여 안드로이드 플랫폼에서 앱 개발을 시작하기 위해 필수적인 도구와 API를 제공합니다.

특징
- Application framework: 컴포넌트의 재사용 및 교체를 가능하게 합니다.
- Dalvik virtual machine: 모바일 기기를 위해 최적화되어 있습니다. 
- Integrated browser: 오픈소스 웹킷 엔진에 기반하고 있습니다.
- Optimized graphics: 커스텀 2D그래픽과 OpenGL ES 1.0 명세를 기반으로 하는 3D 그래픽을 제공합니다.(하드웨어 가속은 옵션입니다)
- SQLite: 구조적 데이터 저장소입니다.
- Media support: MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF
- GSM 전화(하드웨어 의존적)
- Bluetooth, EDGE, 3G, WiFi(하드웨어 의존적)
- Camera, GPS, 나침반, 가속도측정기(하드웨어 의존적)
- 풍부한 개발 환경: 기기 에뮬레이터, 디버깅을 위한 도구, 메모리 및 성능 측정도구, 이클립스를 위한 플러그인

안드로이드 아키텍쳐
다음 다이어그램은 안드로이드 OS의 주요 구성요소를 보여주고 있습니다.

[Applications]
안드로이드에는 이메일 클라이언트, SMS 프로그램, 달력, 지도, 브라우저, 연락처 등의 핵심 앱들이 포함됩니다.(ship with 해석하려다 포기) 모든 앱은 자바로 작성됩니다.

[Application Framework]
개방형 개발 플랫폼을 제공함으로써, Android는 개발자들이 풍부하고 혁신적인 앱을 개발할 수 있도록 합니다.  개발자들은 무료로 하드웨어의 이점을 취하고, 위치 정보에 접근하고, 백그라운드 서비스를 돌리고, 상태바에 알림을 더하고, 그밦에 무지무지 많은 일을 할 수 있습니다. 

개발자들은 핵심 앱에서 사용된 것과 동일한 프레임웍 API에 완전하게 접근할 수 있습니다. 앱 아키텍쳐는 구성요소를 간단하게 재사용할 수 있도록 설계되었는데, 어떤 앱이라도 그 기능을 배포하고, 다른 어떤 앱이 그 기능을 사용할 수 있습니다(프레임웍에 의해 강제되는 보안 제약사항의 적용을 받습니다). 같은 매커니즘으로 사용자는 컴포넌트를 교체할 수 있습니다. 

모든 기반 앱들은 서비스와 시스템의 집합이고, 그 서비스와 시스템에는 다음과 같은 것들이 있습니다. 
-  View들의 풍부하고 확장성있는 집합. 이 View에는 목록 List, 격자 Grid, 글상자 Text box, 단추 Button, 심지어 내장할 수 있는 웹브라우저도 있는데, 당연히 앱을 만들때 사용합니다.
- Content Providers를 사용하여 연락처 Contacts와 같은 다른 앱의 데이터에 접근할 수 있으며, 스스로의 데이터를 공유할 수 있습니다. 
- Resource Manager는 지역별 문자열, 그래픽, 배치 Layout 파일과 같은 비코드 non-code 데이터에 대한 접근을 제공합니다. 
- Notification Manager를 통해서 앱들은 상태바에 사용자정의 경고 custom alert을 표시할 수있습니다. 
- Activity Manager는 앱들의 생명주기 Lifecycle을 관리하며, 'common navigation backstack(이게 뭐임, 일단 패스)'을 제공합니다. 

더 자세히 알고 싶으면, 이 예제를 보아주세요. Notepad Tutorial.(일단 패스)

[Libraries]
안드로이드에는 다수의 C/C++ 라이브러리가 포함되어 있으며, 안드로이드 시스템의 다양한 요소요소에 사용되고 있습니다. 이 기능들은 안드로이드 프레임웍을 통해 개발자들에게 공개되어 있습니다. 그 핵심 라이브러리들은 다음과 같습니다.
- 시스템 C 라이브러리: BSD계열의 표준 C 시스템 라이브러리구현(libc), 임베디드 리눅스 기반 기기를 위해 손보았음.
- 미디어 라이브러리: PacketVideo의 OpenCore에 기반. 정적인 이미지파일과 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG와 같은 많이 사용되는 다수의 오디오 및 비디오 포맷의 재생과 기록을 지원
- Surface Manager: 디스플레이 하부 시스템에 대한 접근을 관리하고, 다수 앱들의 2D와 3D 그래픽 레이어들을 통합해줌(seamlessly composites)
- LibWebCore: Android 브라우저와 내장형 웹 뷰를 작동시키는 현대적인 웹브라우저 엔진
- SGL: 기반 2D 그래픽 엔진
- 3D 라이브러리: OpenGL 1.0 API 기반 구현. 하드웨어 3D 가속기 또는  최적회된 3D 소프트웨어 rasterizer(Raster 이미지는 비트맵이미지를 말하는데, 3D를 비트맵 이미지로 그려주는 역할)
- FreeType:  비트맵과 벡터 폰트 렌더링
- SQLite: 모든 앱에서 사용할 수 있는 강력하고 가벼운 관계형 데이터베이스 엔진

[Android Runtime]
안드로이드에는 다수의 핵심 라이브러리들이 포함되어, 자바 프로그래밍 언어의 핵심 라이브러리에서 가능한 대부분의 기능성을 제공합니다.(???)

모든 안드로이드 앱은 고유의 프로세스로 동작하며, 각각의 Dalvik 가상머신 Instance를 사용합니다. Dalvik은 기기가 다수의 VM들을 효과적으로 실행할 수 있도록 작성되었습니다. Dalvik VM은 Dalvik Executable(.dex) 포맷으로 작성된 파일을 실행하며, 최소한의 메모리 공간(memory footprint)만을 사용하도록 최적화되어 있음.VM은 레지서터 기반이며, 자바 언어 컴파일러에 의해 컴파일되고 포함된 "dx" 도구에 의해 .dex 포맷으로 변환된 클래스를 실행합니다.(The VM is register-based, and runs classes compiled by a Java language compiler that have been transformed into the .dex format by the included "dx" tool. - 제대로 해석했는지 모르겠습니다.)

Dalvik VM의 threading과 저수준 메모리 관리와 같은 기반 기능들은 Linux 커널에 의존하고 있습니다. 

[Linux Kernel]
안드로이드는 보안, 메모리관리, 프로시스 관리, 네트워크 스택, 드리이버 모델과 같은 핵심 시스템 서비스에 있어서 Linux 버전 2.6에 의존하고 있습니다. 커널은 또한 하드웨어와 나머지 소프트웨어 단계들 사이에서 추상 계층으로써 동작합니다. 

...
아 어렵네요. 
아 어렵다 어려워...
Posted by 나야