본문 바로가기

나는 엔지니어/안드로이드

Android란?

 

Android는 오퍼레이팅 시스템,미들 웨어 그리고 주요 어플리케이션을 포함하는 휴대전화를 대상으로한 

소프트웨어 스택이다. ( 여기서 소프트웨어 스택이란 Android 아키텍쳐를 말하는것 같다. 아래 그림 참고)

 

Android SDK는 Android 플랫폼을 대상으로 Java 프로그래밍 언어를 사용해 어플리케이션 개발을 시작할때

필요한 툴과 API를 제공한다.

특징 ( Android 아키텍쳐의 특징)

  • 콤포넌트의 재사용과 치환이 가능한 어플리케이션 프레임워크
  • 휴대전화 활용에 최적화된 Dalvik 가상머신
  • 오픈 소스 WebKit 엔진을 기초로한 통합 브라우저
  • 커스텀2D 그래픽 라이브러리와 OpenGL ES 1.0 사양에 기초한 3D 그래픽스로부터 제공된
    최적화된 그래픽스(Hardware Acceleration optional)
  • SQLite 에 의한 구조화 데이터 스트레이지
  • 음성,영화,정지 화면의 일반적인 포멧(MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF)에 대한
    미디어 서포트
  • GSM 텔레포니 기능(하드웨어에 의존)
  • Bluetooth、EDGE、3G、WiFi(하드웨어에 의존)
  • 카메라、GPS、컨퍼스、가속도계(하드웨어에 의존)
  • 장치 애뮬레이터、디버그용 툴、메모리와 퍼포먼스 분석、Eclipse IDE 용 플러그인을 포함한 기능의
    풍부한 개발 환경

Android 아키텍쳐

Android 오퍼레이팅 시스템의 주콤포넌트를 다음 그림에 표시합니다.
각각의 섹션에는 각 컴포넌트의 상세가 기술되어 있습니다.

Android システム アーキテクチャ

어플리케이션

Android 에는, 메일 클라이언트 ,SMS 프로그램, 달력,지도,브라우저,연락처등의
코어 어플리케이션의 셋트를 첨부하고 있습니다.
어플리케이션은 모두 JAVA프로그램 언어로 작성되어 있습니다.


어플리케이션 프레임워크

개발자는,코어 어플리케이션으로 모든 프레임워크 API에 접근 가능합니다.
어플리케이션 아키텍쳐는 컴포넌트의 재이용을 좋게 하도록 설계되어 있습니다.
이를 위해서 어떤 어플리케이션이라도 기능을 공개하고 다른 어플리케이션이 그 기능을 사용하는것이 가능합니다.
(다만, 프레임워크에 의해 보안 제한의 대상이 됩니다.)
이 메커니즘에 의해, 유저로 부터 컴퍼넌트의 교체도 가능합니다.

어플리케이션의 기초가 되는 것은 다음의 서비스와 시스템 셋입니다.

( 키워드는 번역 안하는게 나을려나 )

  • 어플리케이션 구축을 가능하게 한다. 확장 가능하고 풍부한 뷰 셋. 
    뷰에는 리스트,그리드,텍스트 박스,버튼만이 아니라 삽입 가능한 웹 프라우저도 포함되어 있다.
  • 컨텐츠 프로바이더를 사용하면,어플리케이션 데이터 ( 예를들어 연락처 어플리케이션)에
    다른 어플리케이션으로 부터 접근 하거나 데이터를 제공 시키는 일도 가능하다.
  • 리소스 매니져는 로컬라이즈 된 문자열,그래픽스,레이아웃 파일등의 코드 이외의 리소스 접근을 제공한다.
  • 통지 매니져를 사용하면,모든 어플리케이션의 상태를 바로 커스터마이즈한 경고로 제공할 수있다.
  • 엑티비티 메니져는,어플리케이션의 라이프 사이클을 관리하고 공통 navigation backstack 을 제공한다.
어플리케이션의 간단한 설명에 대해서는,  Notepad Tutorial. 을 봐주세요.

 

라이브러리

Android 에는 C/C++ 라이브러리 셋이 포함되어 있어, Android 시스템의 여러가지 코포넌트에 사용되고 있습니다.

이들의 기능은 Android 어플리케이션 프레임워크를 소개하고 개발자에 공개되어 있습니다.

코어 라이브러리의 일부를 아래에 표시합니다.

  • 시스템 C 라이브러리 - BSD에 의한 실장을 베이스로 한 표준의 C 시스템 라이브러리(libc)입니다.
    삽입한 Linux 베이스의 디바이스용으로 최적화 되어 있습니다.
  • 미디어 라이브러리 - PacketVideo 의 OpenCORE 를 베이스로한 라이브러리 입니다.
    MPEG4、H.264、MP3、AAC、AMR、JPG、PNG 등의 많은 일반적인 영상과 음성 포멧과 정지화면 파일의 재생과 기록을 서포트하고 있습니다.
  • Surface Manager - display subsystem 접근을 관리하고 복수의 어플리케이션으로 부터2D와3D 그래픽 레이어를 문제없이 합성 가능 합니다.
  • LibWebCore - 최신식의 웹 브라우저 엔진으로 Android 브라우저와 삽입 가능한 Web display 양쪽을
    제공 합니다.
  • SGL - 베이스가 되는 2D 그래픽 엔진 입니다.
  • 3D 라이브러리 - OpenGL ES 1.0 API 를 베이스로 해서 실장된 라이브러리 입니다.하드웨어 3D 가속
    (가능한 경우)이,고도로 최적화 된 삽입 3D 소프트웨어 rasterizer의 어느 한쪽을 사용합니다.
  • FreeType - bitmap 그리고 vector font 의 랜더링을 실시합니다.
  • SQLite - 모든 어플리케이션에서 이용 가능한 강력하고 경량의 관계 데이터 베이스 엔진 입니다.

Android 런타임

Android 에는 Java 언어 코어 라이브러리로 이용할 수있는 기능의 대부분을 제공하는 코어 라이브러리셋이 포함되어 있습니다.Android의 각 어플리케이션은 독자적(독립?) 프로세스로 실행되어 Dalvik 가상머신(VM)의 독자적 인스턴스로 실행됩니다. Dalvik는 휴대전화로 복수의 VM을 효율 좋게 실행 할수 있도록 설계되어 있습니다.Dalvik VM은 메모리의 사용률을 최소화 하도록 최적화된 Dalvik 실행(.dex)포멧 파일을 실행합니다.VM은 레지스터 베이스로 Java 언어 컴파일러로 컴파일된 내장「dx」툴로 .dex 포멧으로 변환된 클래스를 실행합니다.

Dalvik VM은 Linux 커널을사용하고 threading 이랑 low-level memory 관리등의 기본 기능을 실행하고 있습니다.

Linux カーネル

Android 는 Linux 버젼 2.6 을 사용하고 보안, 메모리 관리 , 프로세스 관리 , 네트워크 스택 ,드라이브 모델등의 코어 시스템 서비스를 제공합니다.  커널은 하드웨어와 다른 소프트웨어 스택 사이의 가상화 레이어로써 기능합니다.

'나는 엔지니어 > 안드로이드' 카테고리의 다른 글

Application Fundamentals (2)  (0) 2012.06.07
Application Fundamentals(1)  (0) 2012.05.30
안드로이드 정리를 시작하며.  (0) 2012.05.29