안드로이드의 특징
- 애플리케이션 프레임워크 : 컴포넌트의 재사용과 대체가 가능
- 달빅 가상 머신 : 모바일 장치에 최적화
- 내장된 웹브라우저 : 오픈 소스인 WebKit 엔진
- 최적화된 그래픽 : 자체 2D라이브러리로 2D 그래픽 지원 및 OpenGL ES 규격에 맞춰 3D 그래픽 지원
- SQLite 데이터베이스 지원
- 각종 오디오, 비디오 규격 지원
- 블루투스, EDGE, 3G, WIFI지원
- 카메라, GPS, 나침판, 가속도계 지원
- 풍부한 개발 환경 제공
컴포넌트의 재사용
안드로이드 애플리케이션은 여러 개의 컴포넌트로 이루어져 있고, 이 컴포넌트는 다른 애플리케이션에서도 사용할 수 있다
자바 언어 사용
자바의 SE버전 중 AWT와 SWING을 제외한 모든 패키지를 사용할 수 있으며, 모바일 환경에서 속도도와 메모리 관리를 위해 자체적인 가상 머신을 사용한다(Dalvik, ART)
XML을 이용한 사용자 인터페이스 사용
함수를 호출하는 기존 절차적 방법을 사용하지 않고, (HTML과 비슷한)보다 진보된 방법인 선언적으로 정의하는 XML방법을 사용한다
첨단 기능 제공
카메라, GPS, 나침판, 가속도계와 같은 센서를 지원하고, 멀티미디어의 지원도 강력하다. 이를 이용한 라이브러리등도 제공한다.
개방적이고 풍부한 개발 환경 제공
누구나 가져다가 사용할 수 있고 무료로 제공된다. 오랜 기간 동안에 검증된 소프트웨어나 기존에 많이 사용되고 있는 개방적인 오픈소스를 제공하여 폐쇠적인 플랫폼과 비교해도 손색없다.
클라우드 컴퓨팅
음성 인식이나 사진 앱, 게임, 이메일, 연락처등을 서버에 저장하고 필요할때 불러오는 방법을 사용할 수 있다.
안드로이드의 구조
안드로이드는 운영체제, 미들웨어, 핵심 애플리케이션을 모두 포함하는 모바일 플랫폼, 구글에서는 안드로이드를 소프트웨어 스택(software stack)라고 부른다.
리눅스 커널
보안, 메모리 관리, 프로세스 관리, 네트워크, 장치 드라이버 같은 시스템 서비스를 제공, 하드웨어와 소프트웨어 스택 사이의 추상화 계층으로 동작하여 하드웨어가 다르더라도 균일한 환경을 제공
안드로이드 런타임
안드로이드 애필리케이션은 리눅스의 하나의 프로세스로 실행되고, 각 프로세스는 자신만의 가상 머신을 가진다.
라이브러리
- 시스템 C 라이브러리 : BSD 기반의 표준 C 라이브러리를 제공
- 미디어 라이브러리 : 오디오, 비디오 형식의 재색 및 녹음을 지원
- Surface manager : 디스플레이 서브시스템을 관리하고 그래픽 레이어를 합성
- LibWebCore : 웹 브라우저 구현 엔진
- SGL : 기본 2D 그래픽 엔진
- 3D 라이브러리 : OpenGL ES API 기반의 라이브러리
- FreeType : 비트맵과 벡터 글꼴 렌더링
- SQLite : 강력하고 가벼운 관계형 데이터베이스
애플리케이션 프레임워크(application framework)
프레임워크가 제공하는 기능을 이용하여 자신들의 애플리케이션을 개발할 수 있다.
애플리케이션(application)
안드로이드에서 모든 애플리케이션은 동일한 라이브러리를 사용하여 실행된다.
애플리케이션의 기초 개념
자바 코드를 컴파일하고 리소스와 결합하여서 안드로이드 패키지로 만든다. 하나의 apk 파일 안에 있는 모든 코드는 하나의 애플리케이션으로 간주된다.
각 애플리케이션은 리눅스 커널 상에서 ID를 부여 받으며, 다른 ID를 가진 애플리케이션에는 접근할 수 없다. 최소 권한의 법칙에 의해 필요한 작업을 할 수 있을 만큼의 권한만 가지고 권한이 없는 시스템 기능에 접근할 수 없다.
애플리케이션이 다른 애플리케이션들과 데이터를 공유해야 할 경우에는 동일한 ID를 부여 받아 같은 프로세스 안에서 동작할 수 있도록 설정 가능하다.
추가 권한이 필요할 경우 애플리케이션 개발 시 추가 권한을 요청할 수 있다.
애플리케이션 컴포넌트
애플리케이션은 컴포넌트로 구성되고 각 컴포넌트는 하나의 독립된 엔티티로 존재, 정해진 역활을 수행, 각 컴포넌트는 애플리케이션을 시작하는 진입점을 가질 수 있다.
- 액티비티 : 사용자 인터페이스 화면을 가지고 특정한 작업을 담당한다
- 서비스 : 백그라운드에서 작업이 필요하거나, 다른 작업을 방해하지 않으면서 독립적인 작업이 필요하거나, 원격 프로세스를 위한 작업을 할 때 사용한다.
- 방송 수신자 : 디바이스의 상태나 제어, 또는 다른 애플리케이션에서 송출된 방송을 수신하여 액티비티를 실행하거나 서비스를 시작할 수 있다. 특정한 방송을 송출할 수 도 있다.
- 콘텐트 제공자 : 데이터를 관리하고 다른 애플리케이션에게 데이터를 제공하는 컴포넌트이다. SQLite 데이터베이스나 웹에 저장하고 다른 애플리케이션과 데이터를 공유할 수 있다.
다른 애플리케이션에서 특정 애플리케이션의 컴포넌트를 공유하여 사용 가능하다. 즉 다른 애플리케이션에서 특정 애플리케이션의 특정 작업을 호출하여 작업하고 그 결과가 리턴되면 계속 작업을 할 수 있는 것.
다른 애플리케이션의 컴포넌트를 사용하기 위해서 인텐트라는 메시지를 전달하고, 안드로이드는 이 엔텐트를 분석하여 적절한 컴포넌트를 찾아 활성화 하고 실행한다. 인텐트는 필요한 작업을 지칭하는 액션과, 필요한 데이터의 URI로 구성되어 있다.
매니페스트 파일
애플리케이션을 실행하려면 애플리케이션안에 어떤 컴포넌트가 존재하는지를 안드로이드에게 알려줘야 하기 때문에 매니페스트 파일을 생성하고, 애플리케이션의 모든 컴포넌트가 선언되어 있다.
추가적으로 애플리케이션의 권한이나, 최소 실행 API, 하드웨어 사양등을 지정하는게 일반적이고, 추가로 컴포넌트를 실행할때 특정 데이터를 선언해 주기도 한다.