안드로이드란?

zerolism ㅣ 2009. 9. 14. 21:57

SMALL

안드로이드(Android)는 2007년 11월 구글에서 공개하였으며, 운영체제, 미들웨어 및 주요 응용프로그램을 포함하는 모바일 기기용 소프트웨어 모음으로 휴대폰 개발에 필요한 소프트웨어 플랫폼 일체를 제공하는 공개 소프트웨어이다. 구글이 모바일 환경에서도 이름에 걸맞은 영향력을 발휘할 수 있을지는 전적으로 안드로이드 플랫폼이 지닌 활용성에 달려 있을 것이다. 안드로이드 소프트웨어 개발 툴킷(Android SDK)에서 초반 모양새를 볼 수 있듯, 이것은 자바 프로그래밍 언어를 사용하여 안드로이드 플랫폼 상에 응용프로그램 개발을 시작하는데 필요한 도구들과 API를 제공한다.

 

기능

  • 컴포넌트의 재사용과 교체를 지원하는 응용프로그램 프레임워크 
  • 모바일 기기 용으로 최적화된 달빅 가상 기기(Dalvik virtual machine)
  • 공개 소스 웹킷(WebKit) 엔진을 기반으로 한 통합형 브라우저
  • 커스텀 2D 그래픽 라이브러리로 구동되는 최적화된 그래픽; OpenGL ES 1.0 스팩을 기반으로 한 3D 그래픽 (하드웨어 가속 기능 옵션)
  • 구조적 데이터 저장소 용 SQLite
  • 범용 오디오, 비디오 및 정지 화상 형식 (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) 용 미디어 지원
  • GSM 전화 기능 (하드웨어에 의존적)
  • 블루투스, EDGE, 3G, 및 WiFi (하드웨어에 의존적)
  • 카메라, GPS, 나침반(compass), 및 가속도계(accelerometer) (하드웨어에 의존적)
  • 강력한 개발 환경 Rich development environment including a 기기 에뮬레이터, 디버깅용 도구, 메모리 및 퍼포먼스 프로파일링, 및 이클립스 IDE(Eclipse IDE) 용 플러그인

안드로이드 아키텍처

다음의 그림은 안드로이드 운영체제의 주요 컴포넌트들을 나타낸다. 각 영역은 하단부에 자세히 명시되어 있다



응용프로그램

안드로이드는 e메일 클라이언트, SMS 프로그램, 달력, 지도, 브라우저, 연락처 및 기타 다양한 응용프로그램을 포함한 코어 응용프로그램 한 묶음을 포함한다. 모든 응용프로그램들은 자바 프로그래밍 언어를 사용하여 제작되었다.

응용프로그램 프레임워크

개발자는 코어 응용프로그램에서 사용된 동일한 프레임워크 API를 완전하게 접근할 수 있다. 응용프로그램 아키텍처는 컴포넌트들의 재활용을 손쉽게 하도록 설계되어 있다; 어떤 응용프로그램도 자체 기능을 공개(publish)할 수 있으며, 그렇게 공개가 되면, 다른 응용프로그램들도 그 기능들을 사용할 수 있다. (프레임워크에 의해 강력하게 제한된 보안을 목적으로 한다.) 이 동일한 메커니즘을 이용하여 사용자는 컴포넌트들을 교체할 수 있다.

모든 기반 응용프로그램들은 다음의 기능들을 포함하는 서비스와 시스템의 한 묶음이다;

  • 리스트, 그리드, 텍스트 박스, 버튼, 및 내장형 웹브라우저까지도 포함된, 응용프로그램을 제작할 때 사용할 수 있는, 풍부한 기능과 확장성을 갖고 있는 뷰(Views)의 묶음
  • 응용프로그램이 (예를 들어, 연락처와 같은) 다른 응용프로그램의 데이터를 접근하거나 자체 데이터를 공유할 수 있도록 지원하는 컨텐트 제공자(Content Providers)
  • 지역화된 문자열 및 그래픽, 레이아웃 파일과 같은 코드가 아닌 자원들을에 대한 접을 제공하는 자원 관리자(Resource Manager)
  • 모든 응용프로그램이 상태 표시줄에 사용자 정의 경고문을 표시할 수 있도록 해주는 통지 관리자(Notification Manager)
  • 응용프로그램의 활동주기를 관리하고 범용 네비게이션 백스택(backstack)을 제공하는 활동성 관리자(Activity Manager)

보다 자세한 정보를 원하거나, 간단한 응용프로그램을 통한 예제를 원한다면, 안드로이드 응용프로그램 제작하기(Writing an Android Application)를 참고한다.

라이브러리

안드로이드는 안드로이드 시스템의 다양한 컴포넌트에서 사용된 일련의 C/C++ 라이브러리가 포함되어 있다. 이 기능들은 안드로이드 응용프로그램 프레임워크를 통해 개발자들에게 노출되어 있다. 코어 라이브러리의 일부를 열거하자면 다음과 같다:

  • 시스템 C 라이브러리 - 임베디드 리눅스 기반 기기 용으로 조정된, 표준 C 시스템 라이브러리(libc)의 BSD 에서 파생된 구현
  • 미디어 라이브러리 - PacketVideo의 OpenCORE에 기반; 본 라이브러리는 MPEG4, H.264, MP3, AAC, AMR, JPG, 및 PNG를 포함하고, 다양한 대중적인 오디오/비디오 포멧과 정적 이미지 파일들의 재생과 레코딩을 지원한다.
  • 표면 관리자(Surface Manager) - 화면 하부시스템과 다중 응용프로그램에서 결함없는 2D/3D 그래픽 계층의 복합체에 대한 접근을 관리
  • LibWebCore - 안드로이드 브라우저와 내장형 웹 뷰(embeddable web view) 양측에서 구동 중인 최신형 웹 브라우저 엔진 
  • SGL - 기반 2D 그래픽 엔진
  • 3D 라이브러리 - OpenGL ES 1.0 API 기반으로 구현; 본 라이브러리는 (가능할 경우) 하드웨어 3D 가속기능과, 고도로 최적화된 내장된 3D 소프트웨어 레스터라이저(rasterizer) 둘 모두를 사용한다.
  • FreeType - 비트맵 및 벡터 폰트 렌더링
  • SQLite - 모든 응용프로그램에서 사용할 수 있는 강력하고 가벼운 관개형 데이터베이스 엔진
  •  

안드로이드 런타임

안드로이드는 자바 프로그래밍 언어의 코어 라이브러리에서 사용할 수 있는 대부분의 기능을 지원하는 일련의 코어 라이브러리를 포함하고 있다.

모든 안드로이드 응용프로그램은 자체 프로세스에서, 달빅 가상 기기(Dalvik Virtual Machine)의 자체 인스턴스를 갖고 구동된다. 달빅(Dalvik)이 구현되어 있어, 기기는 다중 VM을 효과적으로 구동할 수 있다. 달빅(Dalvik) VM은 최소한도로 메모리를 차지하도록 최적화된 달빅 실행 형식(Dalvik Executable format; .dex)에서 파일을 실행한다. VM은 레지스터 기반이며, 자바 언어 컴파일러를 이용하여 컴파일되고, 포함된 "dx" 도구를 이용하여 .dex 형식으로 변환된 클래스들을 구동한다.

달빅(Dalvik) VM은 쓰레드 및 저-레벨 메모리 관리와 같은 기반 기능 용 리눅스 커널에 기반한다.

리눅스 커널

안드로이드는 보안, 메모리 관리, 프로세스 관리, 네트워크 스택 및 드라이버 모델과 같은 코어 시스템 서비스 용 리눅스 버전 2.6을 기반으로 한다. 본 커널은 또한 하드웨어와 다른 소프트웨어 묶음 사이의 추상 계층으로서 동작한다.


출처 : (개방형 외토리) http://blog.naver.com/free2824/60055882976


LIST