본문 바로가기

Android Tutorial/Android Framework

[Android Framework #01] Android Architecture

[Android Framework #01] Android Architecture

 Android Architecture




 안드로이드 플랫폼의 구성

  - 애플리케이션 프레임워크(Application Framework)
  - 라이브러리(Libraries)
  - 안드로이드 런타임(Android Runtime)
  - 리눅스 커널(Linux kernel)






Application Framework

안드로이드는 오픈 개발 플랫폼을 제공함으로써 개발자에게 매우 풍부하고 혁신적인 애플리케이션을 구축할 수 있는 능력을 제공합니다.
개발자들은 장치 하드웨어의 장점, 위치정보에 대한 액세스, 백그라운드 서비스의 활용, 알람 설정, 상태표시줄에 알림을 추가하기 등 많은, 더 많은 것들을 자유롭게 사용할 수 있습니다.

개발자들은 코어 애플리케이션이 사용하는것과 동일한 프레임워크 API를 완전하게 액세스할 수 있습니다. 응용 프로그램 아키텍처(Application Architecture)는 컴포넌트의 재사용을 단순화 할 수 있도록 설계되었습니다; 어떤 애플리케이션이라도 기능을 게시(publish)할 수 있고, 다른 애플리케이션은 이러한 기능들을 사용할 수 있습니다(프레임워크에 의해 보안을 위한 제약 조건에 따라 수행된다). 이러한 같은 메카니즘은 컴포넌트가 사용자에 의해 대체되는것을 수용합니다.


모든 애플리케이션들은 
아래의 서비스와 시스템의 집합을 포함합니다.

  리스트, 그리드, 텍스트 박스, 버튼, 그리고 심지어 내장 웹브라우저까지
  응용프로그램을 빌드하는데 사용가능한 풍부하고 확장 가능한 뷰(View)들의 집합

  애플리케이션이 다른 애플리케이션으로부터의 데이터에 액세스 가능도록 하거나,
  또는 자신의 데이터를 공유하는게 가능하도록 하는 컨텐트 프로바이더(Content Provider)

  지역화된 문자열, 그래픽, 레이아웃 파일같이 코드가 아닌(non-code)
  리소스에 대한 액세스를 제공하는 리소스 매니저(Resource Manager)

  모든 애플리케이션이 상태표시줄(status bar)에 커스텀 알럿(custom alerts)을
  보여줄 수 있도록 하는 노티피케이션 매니저(Notification Manager)
 
  애플리케이션의 라이프 사이클을 관리하고
  공통적인 네비게이션 
백스택을 제공하는 액티비티 매니저(Activity Manager) 

애플리케이션에 대한 더 자세한 내용과 설명은 Notepad Tutorial을 보세요.



Libraries

안드로이드는 안드로이드 시스템의 다양한 컴포넌트에서 사용되는 C/C++ 라이브러리의 집합을 포함합니다. 이런 기능은 안드로이드 애플리케이션 프레임워크(Android application framework)를 통해서 개발자들에게 노출됩니다. 코어 라이브러리의 일부는 다음과 같습니다.

  System C library

    - 임베디드 리눅스 기반 장치에 맞춰진 표준 C 시스템 라이브러리(libc), BSD에서 파생된 구현

  Media Libraries
    - PacketVideo의 OpenCORE에 기반해서; 라이브러리는 플레이백(playback), 
많은 대중적인
      오디오와 비디오 포멧뿐만 아니라 정적 이미지 파일(
MPEG4, H.264, MP3, AAC, AMR,
      JPG와 PNG를 포함하는)
을 제공합니다.

  Surface Manager
    - 여러 애플리케이션으로 부터 디스플레이를 위한 서브시스템에 대한 관리하고, 복합 2D, 3D
      그래픽 레이어를 원활하게 관리합니다.

  LibWebCore
    - 현대적인 웹 브라우저와 엔진의 파워를 안드로이드 브라우저와 내장된 웹뷰 모두에서 볼 수
      있습니다.

  3D libraries
    - OpenGL ES 1.0 APIs를 기반으로한 구현; 라이브러리는 하드웨어 3D 가속 또는
      포함되어있는 고도로 최적화된 3D 소프트웨어 래스터라이저(rasterizer)를 사용합니다.
 
  FreeType
    - 비트맵과 벡터 폰트 렌더링

  SQLite
    - 모든 애플리케이션에서 사용할 수 있는 강력하고 가벼운 관계형 데이터베이스 엔진.



Android Runtime

안드로이드는 자바 프로그래밍 언어의 코어 라이브러리에서 사용할 수 있는 기능의 대부분을 제공하는 코어 라이브러리의 집합을 포함합니다.

모든 안드로이드 애플리케이션은 달빅 가상 머신의 인스턴스에 있는, 그 자체 프로세스 안에서 실행됩니다. 달빅은 하나의 디바이스에서 효율적으로 여러개의 VM(가상 머신)을 실행할 수 있도록 작성되었습니다. 달빅 VM은 최소한의 메모리 공간(footprint)을 위해 최적화된 달빅 실행 형식(.dex) 파일을 실행합니다. VM은 레지스터 기반이고, "dx" 툴이 포함되는 것에 의해 .dex 포멧으로 변형된 자바 언어 컴파일러에 의해 컴파일된 클래스를 실행합니다.

달빅 VM은 스레딩(trheading)과 낮은수준의 메모리 관리(low-level memory management) 같은 기본 기능에 대해서 리눅스 커널에 의존합니다.



Linux Kernel

안드로이드는 보안, 메모리 관리, 프로세스 관리, 네트워크 스택, 드라이버 모델과 같은 코어 시스템 서비스를 위해서 리눅스 버전 2.6에 의존합니다.
커널은 또한 하드웨어와 소프트웨어 스택의 나머지 사이에서 추상화 계층같은 역할을 합니다.



 안드로이드 소스 코드 구조

안드로이드 관련 소스 - http://source.android.com/source/downloading.html


안드로이드의 주요 소스 코드
  - kernel : 안드로이드의 리눅스 커널 2.6
  - bionic : 안드로이드 표준 C 라이브러리
  - bootloader : 참고용 안드로이드 부트로더
  - build : 안드로이드 빌드 시스템
  - cts : 안드로이드 호환성 테스트 관련 소스
  - dalvik : 달빅 가상 머신
  - external : 안드로이드에서 사용하는 오픈소스들
  - frameworks : 안드로이드 프레임워크
  - hardware : 안드로이드 HAL(Hardware Abstraction Layer) 소스
  - packages : 안드로이드 기본 애플리케이션, 컨텐트 프로바이더 등
  - system : 안드로이드 init 프로세스, 블루투스 도구 모음 등

책에서 주로 분석한 소스코드
  - kernel
  - frameworks
  - packages
  - system



책에 나온 내용을 정리하면서 안드로이드 아키텍쳐 부분을 공부하며, 추가적으로 안드로이드 개발자 사이트의 What is Android?를 보고 조금 옮겨보았습니다.