본문 바로가기

날마다 반복되는 생활./아직 처리되지 않은 자료

안드로이드 기초


1. 개요


안드로이드는 운영체제와 미들웨어 그리고 핵심 애플리케이션을 포함하고 잇는 모바일 디바이스를 위한 소프트웨어 스택(Stack)이다.


2. 주요 특징


  • 애플리케이션 프레임워크 : 컴포넌트에 대한 재사용 및 치환(Replacement)를 가능하게 함
  • 달빅(Dalvik) 가상머신 : 모바일 디바이스를 위해 최적화됨.
  • 통합 브라우저 : 웹 소스 웹킷(Webkit) 엔진 기반.
  • 최적화된 그래픽 : 자체 제작된 2D 그래픽 라이브러리와 OpenGl Es 1.0 스펙(하드웨어 가속은 선택사항)에 기반의 3D 그래픽에 의해 강화됨
  • SQLite : 정형화된 데이터 저장곤간을 위한 것
  • 미디어 지원 : 일반적인 오디오, 비디오 그리고 정지(Still) 이미지 포맷들을 지원 (MPEG4, H264, MP3, AAC, AMR, JPG, PNG, GIF)
  • GSM 테크놀로지 (하드웨어 의존적)
  • 블루투스, EDGE, 3G와 WiFi (하드웨어 의존적)
  • 카메라, GPS, 나침반과 가속도계 (하드웨어 의존적)
  • 풍부한 개발 환경 : 디바이스 에뮬레이터, 디버깅 툴, 메모리 및 성능 프로파일링 그리고 이클립스 통합개발환경(IDE)을 위한 플러그인 포함.


3. 애플리케이션


안드로이드는 다양한 애플리케이션을 탑재한다. 모든 애플리케이션은 Java 프로그래밍 언어를 사용하여 작성된다. 컴퓨터의 소프트웨어와 비슷하다고 생각하면 된다.


4. 애플리케이션 프레임워크


개발자는 안드로이드에 이미 탑재된 핵심 애플리케이션에 사용된 것과 동일한 프레임워크 API에 완벽하게 접근할 수 있다. 애플리케이션의 아키텍처는 컴포넌트의 재사용을 쉽게 하도록 디자인되었다. 애플리케이션은 자신의 기능을 외부 애플리케이션에 제공할 수 있으며, 다른 애플리케이션이 제공하는 기능을 사용할 수도 있다. (단, 프레임워크에 의해 관리되는 보안 제약에 기초함) 이와 같은 메커니즘은 사용자에 의한 컴포넌트의 치환(Replacement)를 가능하게 한다. 모든 애플리케이션 하단에는 다음과 같은 서비스와 시스템의 집합이 존재한다.


  • 애플리케이션을 만드는 데 사용될 수 있는 풍부하고 확장가능한 뷰 집합, 이것은 리스트(list), 그리드(grid), 텍스트 박스(text box), 버튼(button) 심지어 임베딩 가능한 웹 브라우저까지도 포함
  • Contacts과 같이 애플리케이션이 다른 애플리케이션의 데이터에 접근하는 것을 가능하게 하거나, 또는 자신의 데이터를 공유하는 것을 가능하게 하는 컨텐트 프로바이더(Content Provider)
  • 리소스(Resource) 매니저 : 로컬라이즈된(Localized) 문자열, 그래픽, 그리고 레이아웃 파일 같은 비 코드(Non-Code) 리소스에 대한 접근을 제공하는 리소스 매니저(Resource Manager)
  • 모든 애플리케이션이 상태 바(Status Bar)에 커스텀 알림 메시지를 표시하는 것을 가능하게 하는 노티피케이션 매니저(Notification Manager)
  • 애플리케이션의 생명주기(LifeCycle)를 관리하며, 사용자의 일반적인 애플리케이션 네비게이션 히스토리를 관리(단, 뒤로 돌아가기 기능만을 지원함)하는 액티비티 매니저(Activity Manager)


5. 라이브러리


안드로이드는 다양한 안드로이드 시스템 컴포넌트에서 사용되는 C/C++ 라이브러리들을 포함하고 있다. 이런 기능은 안드로이드 애플리케이션 프레임워크를 통해 개발자에게 제공된다.


  • 시스템 C 라이브러리 : 임베디드 리눅스 기반의 디바이스에 적합하도록 만들어진 표준 C 시스템 라이브러리로써 BSD libc로부터 파생되어 구현되었음
  • 미디어 라이브러리 : PacketVideo의 OpenCORE 기반임 - MPEG4, H264, MP3, AAC, AMR, JPG, 그리고 PNG를 포함하는 정지(Still) 이미지 파일과 널리 사용되는 오디오와 비디오 포맷의 재생과 녹화를 지원한다.
  • 서피스(Surface) 매니저 : 디스플레이 서브시스템(Subsystem)에 대한 접근 관리 및 다양한 애플리케이션에 의해 사용되는 2D 및 3D 그래픽 레이어들을 단일하게 관리함
  • LibeWebCore : 안드로이드 브라우저와 임베딩 가능한 웹 뷰, 두 가지 모두를 제공하는 최신 웹 브라우저 엔진
  • SGL : 2D 그래픽스 엔진의 하단을 구성
  • 3D 라이브러리 : OpenGL ES 1.0 API 기반으로 구현되었으미. 이 라이브러리는 하드웨어 3D 가속기를 사용하거나, 또는 보유하고 있는 최적화된 3D 소프트웨어 래스터라이저를 사용함
  • FreeType : 비트 맵 및 벡터 폰트 렌더링 엔진
  • SQLite : 모든 애플리케이션에서 이용할 수 있는 강력하며 경량화(Lightweight)된 관계형 데이터 베이스 엔진


6. 안드로이드 런타임


안드로이드의 핵심 라이브러리(Core Library)는 Java 프로그래밍 언어의 핵심 라이브러리에서 사용가능한 대부분의 기능을 포함하고 있다.


모든 안드로이드 애플리케이션은 달빅(Dalvik) 가상 머신에 대한 자기 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다. 달빅은 하나의 디바이스에서 다양한 가상머신이 효율적으로 실행될 수 있도록 만들어졌다. 달빅 가상머신은 최소 메모리를 사용(Footprint)하도록 최적화된 달빅 실행(Executable) 포맷(.dex)의 파일을 실행한다. 이 가상머신은 레지스터 기반이며, java 언어 커파일러에 의해 컴파일된 후, SDK에 포함되어 있는 "dx"라는 툴을 통해 .dex 포맷으로 변환된 클래스를 실행한다.


달빅 가상머신은 쓰레딩(Threading)과 저 수준(Low-level) 메모리 관리와 같이 그것의 기반이 되는 기능에 대해서는 리눅스 커널에 의존한다.


7. 리눅스 커널(Kernel)


안드로이드는 보안, 메모리 관리, 프로세스 관리, 네트워크 스택, 그리고 드라이버 모델과 같은 핵심 시스템 서비스에 대해서는 리눅스 버전 2.6에 의존한다. 또한 리눅스 커널은 하드웨어와 안드로이드 플랫폼 스택의 나머지 계층 간의 추상화된 계층 역활을 담당한다.