안드로이드 (Android)

개념
운영체제, 미들웨어 그리고 중요 프로그램을 포함하는 임베디드 디바이스를 위한 소프트웨어 스택을 제공 2007년 11월 공개된 구글의안드로이드(Android)는 휴대폰 개발에 필요한 소프트웨어 플랫폼 일체를 제공하는 공개 소프트웨어 Open software, Open Device, Open Eco-System

I. 스마트 폰 및 임베디드 디바이스를 위한 개방형 플랫폼, 안드로이드의 개요
    가.  안드로이드(Android)의 정의

  • 운영체제, 미들웨어 그리고 중요 프로그램을 포함하는 임베디드 디바이스를 위한 소프트웨어 스택을 제공
  • 2007년 11월 공개된 구글의안드로이드(Android)는 휴대폰 개발에 필요한 소프트웨어 플랫폼 일체를 제공하는 공개 소프트웨어
  • Open software, Open Device, Open Eco-System

 

    나.  안드로이드 아키텍처의 특징

특징

설명

어플리케이션

프레임워크

리눅스커널 상에 네이티브 코드로 동작하는 라이브러리 군과 Dalvik 가상 머신(VM) 이라 부르는 독자 VM 실행 환경 및 그 위에서 동작하는 어플리케이션 프레임워크로 구성

리눅스커널 기반

공개 운영체제 사용을 통한 광범위한 디바이스 지원

Dalvik

가상 머신

모바일 환경에 최적화된 Dalvik 가상 머신

 

II. 안드로이드 아키텍처 (관리 96회 3교시)
    가. 안드로이드 아키텍처 개념도
 
 

  • UI, Application Layer개발은 Google이 주도, 그 밖의 kernel개발은 GPL진영의 소스를 이용하여 개발

 
    나. 안드로이드 아키텍처의 계층별 구성요소

구성요소

설명

상세 구성요소

리눅스커널

(Linux Kernel)

- Linux version 2.6.x

- 추상 계층 제공: 하드웨어와

상위 소프트웨어 스택 사이

- Core System Service

Display Driver, Camera

Driver, Bluetooth Driver,

Flash Memory Driver,

Binder(IPC) Driver,

Binder(IPC) Driver, USB

Driver, Keypad Driver,

Wi-Fi Driver, Audio

Drivers, Power

management

라이브러리 (Libraries)

- C/C++ 로 작성된 라이브러리

- 개발자에게 Application

Framework을 통해 제공

- 라이브러리 접근 방법:

Binder 를 이용한

프로세스간의 통신, JINI 를

이용한 접근

Surface Manager ,

Media Framework ,

SQLite,

OpenGL ES, Free Type, Webkit, SGL, SSL,

Libc

안드로이드

런타임

(Android Runtime)

- Core Library: JAVA 의 Core

Library를 사용할 수 있도록

제공

- Dalvik VM(Virtual Machine) :

모든 안드로이드

어플리케이션은 Dalvik VM에

대한 자기 자신의 인스턴스를

가지고 자신의 프로세스 내에서

동작

Core Libraries

, Dalvik Virtual Machine

애플리케이션 프레임워크 (Application Framework)

- 개발자는 Core Application에서 사용되는 Framework API 를 같이 사용할 수 있음

- Component 재사용이 용이하도록 설계

- Application 에서 만든 기능을 다른 Application 에서 사용 가능

- Application Framework 에서 제공하는 Service 와 System

Activity Manager,

Window Manager,

Content Providers, View

System, Notification

Manager, Package

Manager, Telephony

Manager, Resource

Manager, Location

Manager , XMPP Service

애플리케이션

(Applications)

- Java 로 작성

- Core Application 을 탑재

- Android package(*.apk) 형태: 디바이스로 다운로드 하는 단위, Java code+data/resource files로 구성, aapt tool 을 사용하여 제작

Email, SMS Program, Calendar, Maps, Browser , Contacts, Others

 

    다. 세부 구성요소

구분

세부 구성요소

설명

Application Framework 구성요소

Content Provider

애플리케이션이 다른 애플리케이션의 데이터에 접근하는 것을 가능하게 하거나, 또는 자신의 데이터를 공유하는 것을 가능하게 하는 provider

Resource Manager

로컬라이즈된localized 문자열, 그래픽, 그리고 레이아웃 파일 같은 비 코드non-code 리소스에 대한 접근을 제공

Notification Manager

모든 애플리케이션이 상태 바status bar에 커스텀 알림 메시지를 표시하는 것을 가능하게 하는 Manager

Activity Manger

애플리케이션의 생명주기lifecycle를 관리하며, 사용자의 일반적인 애플리케이션 네비게이션히스토리를 관리

Libraries 구성요소

System

C library

임베디드리눅스 기반의 디바이스에 적합하도록 만들어진 표준 C 시스템 라이브러리로써 BSD libc로부터 파생되어 구현되었음

미디어 라이브러리

Packet Video의 OpenCORE 기반임; MPEG4, H.264, MP3, AAC, AMR, JPG, 그리고 PNG를 포함하는 정지still 이미지 파일과 널리 사용되는 오디오와 비디오 포맷의 재생과 녹화를 지원

Surface Manger

디스플레이 서브시스템subsystem에 대한 접근 관리 및 다양한 애플리케이션에 의해 사용되는 2D 및 3D 그래픽 레이어들을 단일하게 관리

LibWebCore

안드로이드 브라우저와 임베딩 가능한 웹 뷰, 두 가지 모두를 제공하는 최신 웹 브라우저 엔진

SGL

2D 그래픽스 엔진의 하단을 구성

3D libraries

OpenGL ES 1.0 API 기반으로 구현되었음. 이 라이브러리는 하드웨어 3D 가속기(단, 그것이 사용가능 하다면)를 사용하거나, 또는 보유하고 있는 최적화된 3D 소프트웨어 레스터라이저를 사용

FreeType

비트 맵 및 벡터 폰트 렌더링 엔진

SQLite

모든 애플리케이션에서 이용할 수 있는 강력하며 경량화(lightweight)된 관계형 데이터 베이스 엔진

 

    라. 안드로이드 응용(application)의 주요 컴포넌트

컴포넌트

내용

액티비티

(Activity)

-사용자가 보는 UI(보이는 화면)를 액티비티(Activity)라고 함

-하나의 어플리케이션은 하나 이상의 액티비티가 존재하며 결합된 UI를 위해 함께 동작하지만 각각의 액티비티는 독립적임

-각 액티비티는 그리기(draw)가 가능한 하나의 디폴트 윈도우가 부여되며 추가 윈도우를 사용할 수 있음

서비스

(Service)

-백그라운드에서 수행되는 프로그램을 서비스라고 함

-음악재생이나 데이터 처리 등을 수행함

-예를 들어 음악플레이어는 음악을 선택/재생/되감기/다음 곡 등의 작업을 할 수 있는 하나 이상의 액티비티가 있지만 사용자가 플레이어 화면을 벗어나도 음악재생이 계속되도록 음악재생은 액티비티에 의해 제어되면 안되며, 액티비티는 하나의 서비스(service)를 시작해야 됨

- 또한 실행되고 있는 서비스(service)에 접속하는 것이 가능하며, 음악플레이어의 경우 이 인터페이스를 통해 사용자는 재생 중에도 음악을 멈추거나 재생하거나 다음 곡으로 넘어가는 일이 가능함.

브로드캐스트 리시버

(Broadcast receiver)

-어플리케이션은 브로드캐스트(배터리 부족, 시간대변경, 언어변경 등) 공지를 수신하고 필요 시 응답할 수 있도록 임의의 수의 브로드캐스트 리시버를 가짐

-예를 들어 시스템에서 배터리가 다 떨어졌다고 브로드캐스르를 하면 어플리케이션 내에는 브로드캐스트 리시버라는 컴포넌트가 이를 감지함. 브로드캐스트 리시버는 필요에 따라 사용자에게 알리기 위해 알림화면(Notification, Toast)를 사용함 (Toast : 잠깐 나왔다가 사라지는 메시지 창)

-어플리케이션을 만들 때 이 컴포넌트를 추가하거나 뺄 수도 있음

컨텐트 프로바이더

(Content provider)

-어플리케이션에서 어떤 정보를 가져오고자 행위의 중심역할을 함

-주소록,미디어,북마크, 콜 로그 등 디바이스에 저장되어 있는 다양한 데이터를 외부 어플리케이션이 가져가거나 업데이트 할 수 있는 방법을 노출시켜 줌.

-Content Provider를 사용하거나 직접 구현하며 개발 시 URL을 이용하여 어떠한 Content Provider를 사용할지 지정하고 SQL문을 이용하여 쿼리를 하고 커서를 이용하여 그 결과를 탐색할 수 있음

인텐트(intent)

-컴포넌트에 액션,데이터 등을 전달하는 메시지 요소임

-인텐트에는 명시적 인텐트와 암시적 인텐트가 있음

인텐트 필터

(Intent Filter)

-수신할 수 있는 인텐트를 정의하여 컴포넌트를 정의하는 역할을 하는 요소임

 

 

III. 안드로이드 응용프로그램 프레임워크 (응용98회 1교시)
    가. 안드로이드 응용프로그램 프레임워크의 역할
 

  • 안드로이드 응용프로그램을 구현하는데 필요한 모든 것을 제공하는 Component 재사용이 가능하도록 설계 가능한 프레임워크
  • 안드로이드 응용프로그램의 4대 컴포넌트인 Activity, Service, BR, CP를 구현하기 위한 API를 제공

   
    나. 안드로이드 응용프로그램 프레임워크의 개념도
 

  • Activity Manager 는 Intent를 수신 받으면, Package Manager에 해당 intent에 가장 잘 부합하는 컴포넌트가 무엇인지 물어봄, Activity Manager는 작동중인 컴포넌트들의 상태 정보를 모두 관리하고 있기 때문에, 타겟 컴포넌트의 현재 상태를 확인 할 수 있음

 

    다. 안드로이드 응용프로그램 프레임워크의 구성요소

주요기능

설명

Activity Manager

- 어플리케이션의 생명주기를 관리하고 사용자 네비게이션을 위해 백스택(Back-Stack)을 유지

Window Manager

- 모든 어플리케이션과 관련된 윈도우 관리

Content Providers

- 어플리케이션이 다른 어플리케이션의 데이터에 접근하는 것을 가능 하게 하거나, 또는 자신의 데이터를 공유 하는것을 가능하게 함

View System

- 어플리케이션 구성을 위한 위젯 제공, 리스트/텍스트박스/버튼 등

Notification Manager

- 모든 어플리케이션이 상태 표시줄에 사용자 정의 경고문을 표시할 수 있도록 해주는 통지 관리자

Package Manager

- 시스템에 로드 된 어플리케이션과 관련된 정보관리, 특정 패키지에 들어있는 Activity / Service / BroadcastReceiver 들의 각종 권한 정보, 인텐트 필터 정보 관리

Telephony Manager

- 전화정보 및 단말정보를 갖고 오는 데 사용함

Resource

- 지역화된 문자열, 그래픽, 그리고 레이아웃 파일 같은 비 코드(non-code) 리소스에 대한 접근을 제공

※ 리소스: 프로그램의 코드 외의 모든 부분

Location Manager

- 안드로이드폰은 항상 자신의 위치를 파악함. 위치정보의 관리

Sensor Manager

- 장치의 센서의 접근을 가능하게 함. 센서정보의 관리

 

IV. 안드로이드 응용(Application)의 프로세스 상태 및 MVC 구조
    가. 안드로이드 응용(Application)의 프로세스 상태
 

  • 안드로이드의리눅스커널은 기본적으로 init이 가장먼저 실행됨
  • init.rc는 먼저 데몬을 올리고 Zygote가 DalVik을 초기화함
  • C 밑에 있는 기본라이브러리들은 런타임을 통해 실행되고 상위 서비스들은 DalVik을 통해 실행됨
  • 이러한 과정들을 위한 설정은 해당하는 config 파일을 수정하면 되고 시스템 서버, 스페이스 매니저, 오디오 매니저들이 올라가고, 그 다음에는 시스템 서비스들이 활성화 됨. 이들은 서비스이므로 서비스매니저에 등록된다.
  • Zygote가 실행되면 시스템 서비스가 활성화 되고, 응용프로그램에서는 android.process.* 을 가지고 접근할 수 있음. Zygote와 시스템서버간에는 IPC 소켓으로(127.0.0.x) 통신을 하며, 부팅이 완료됨

    나. 안드로이드 응용(Application)의 MVC 구조

구분

설명

MODEL

애플리케이션의 데이터를 저장하는 역할을 담당하며, 안드로이드에 내장된 데이터베이스인 SQLite, File 그리고 애플리케이션 간의 데이터 공유를 위해 사용할 수 있는 Content Provider가 영역에 속함

VIEW

화면을 구성을 담당하는 영역이며, 이 영역은 View 클래스를 상속하는 클래스를 사용해서 구성할 수 있음

CONTROL

VIEW와 MODEL을 서로 연결하고 제어하는 영역이며, 이 영역에는 Activity, Service, Broadcast Receiver)가 포함됨

 

V. 스마트 폰 플랫폼 간 비교

구분

Symbian

iPhone OS

Android

Windows Mobile

개요

Nokia 주도, 스마트폰 플랫폼 점유율 47%로 독보적 위치에서 최근 경쟁 플랫폼 성장으로 도태

혁신적 UI/UX, 앱스토어를 통한 Third-Party SW 확보, 통신사업자와의 전략적 교섭을 통한 단기간에 가장 성공한 스마트폰 사업 모델 창출

애플리케이션 판매수익을 개발자와 통신사업자에게 배분하고, 자체 모바일 플랫폼이 없는 제조업체들이 적극적으로 도입하여 최근 점유율 급격 증가

초기 모바일 플랫폼 시장을 주도했으나 경쟁력 약화로 점유율 급감

플랫폼

역사

-1998년 6월 최초 개발

-Psion사의 PDA용 OS를 기반으로 개발,

-‘10년 2월 오픈 소스버전 Symbian3발표

-2007년 6월 최초 개발

-PC용 OS인 MAC OS 2를 기반으로 탄생

-2008년 10월 최초 개발

-구글은 34개 업체들과 공동으로 OHA(Open Handset Alliance) 창설

-Linux 기반의 오픈 소스 모바일 플랫폼

-2000년 4월 최초개발

-PDA용 OS인 Windows CE 3.0을 토대로 개발

OS기반

Symbian OS

iOS(Mac OS Port)

Linux

Win CE

애플리케이션

개발환경

Symbian C++, Java, Adobe Flash Lite

Objective C

Java, C/C++

Visual C++, .NET Compact

프레임워크 or

런타임

Symbian Stack

Cocoa Touch

Android Application Framework, Dalvik

MFC, .NET Compact Framework

패키징

.sis(Software Install Script)

.zip

.apk

.cab

프로세서

ARM, x86

ARM

ARM, x86

ARM

라이선스

오픈 소스

독자 방식

오픈 소스

유료

마켓

OVi Store

앱스토어

플레이스토어

MS Marketplace

강점

안정된 제품

멀티터치, 고품질의 다양한 앱

무료, 개발자 저번이 넓음

PC와의 호환성

 

VI. 안드로이드 아키텍처의 시장동향 및 최근 이슈
    가. 안드로이드 아키텍처의 시장동향

  • 안드로이드 4.1 젤리빈의 발표로 검색기능 및 터치스크린의 성능이 향상되었고, 전세계 스마트폰 OS 시장점유율 면에서 선두체제를 구축 중

구분

설명

수익모델

구글 웹 광고가 소비자 클릭기반 노출로 되는 것처럼 구글의 휴대폰 광고는 사용자 통화 내용을 음성 인식하여 노출 예상

반응

구글의 이번 행보로 인한 최대 피해자는 이동통신사이며, 기회를 잡는 쪽은 제조업체가 될 것임

보안

2007.11 보안업체 F-Secure 공식 블로그는안드로이드가 완전개방시스템이 될 경우 악성코드가 노릴 가능성이 높다고 지적

기반 기술

U-City 기반 기술 중 하나로 홈 네트워킹, 홈 컴퓨팅으로의 유입

 

    나. 최근 이슈 사항

  • 안드로이드의 제조사별 구현이 다르고 버전이 상이하여 Fragmentation(파편화)의 문제가 발생하고 있어서, 플랫폼 제공사 및 제조사 측면에서의 대응이 필요함

[참고] Dalvik Virtual Machine

  • 비 표준 JAVA Virtual Machine
  • Android SDK로는 Java 소스를 Dalvik용 bytecode로 직접 컴파일이 불가능
  • DEX File 포멧의 Application을 수행
  • 툴을 사용하여 자바의 .class 파일을 Dalvik용 bytecode로 변한하여 실행 코드를 생성
  • C++ 기반의 Class보다 작고, 호환성이 좋음
  • SUN의 라이선스 정책에 따른 라이선스 비용을 회피하기 위하여 개발
  • JAVA는 GPLv2하의 배포된 오픈소스였으나 Java ME에서 예외가 발생, 핸드셋에 JAVA를 탑해하기 위해서는 라이선스 비용 발생
  • Dalvik VM은 Register-Based Architecture로 모바일 디바이스에 최적화
  • 다수의 VM Instance가 실행 가능하도록 제작
  • Linux Kernel을 사용하여 프로세스의 독립성과 메모리 관리 및 스레딩을 사용할 수 있다는 장점이 존재

 
[참고] [99-관리-1교시]

1. 아파치 v2 라이선스 기반의 OHA 표준, 안드로이드 시스템
가. 안드로이드 시스템의 정의

  • 리눅스 커널위에서 동작하며, 모바일 디바이스를 위한 라이브러리와 미들웨어, 가상머신, 사용자 인터페이스 그리고 표준 응용프로그램을 포함하고 있는 소프트웨어 스택 및 모바일 운영체제

 

나. 안드로이드 시스템 개발 Kit 유형
 

  • 대량의 연산처리와 실시간 반응이 필요한 핵심 모듈은 NDK로, 화면처리는 JDK로 접근

    2. 안드로이드 시스템 개발 Kit 사용의 장단점
        가. 안드로이드 시스템에서 JDK 사용상의 장단점

장점

단점

1) Garbage Collection을 통한 메모리 자동 관리

2) 다양한 Java API를 활용하여 개발 가능

3) 풍부한 오픈소스와 plug-in의 지원

4) 기존 자바개발자의 재교육 최소화

1) JVM 위에서 실행됨에 따른 느린 속도

2) 저수준의 Native API 접근에 제한적

3) 게임과 다양한 디바이스 연동에 취약

4) 안정성이 보장된 C 라이브러리 접근 불가

        나. 안드로이드 시스템에서 NDK 사용상의 장단점

장점

단점

1) 게임이나 다양한 디바이스 연동이 가능

2) 인터넷에 유통중인 C 라이브러리 간편하게 이용

3) JNI를 통한 저수준의 Native API 접근 가능

4) 프로그램 처리 속도의 향상

1) 메모리 직접 접근에 따른 안정성 침해 위험 존재

2) 특정 플랫폼에서 개발시 별도 Kit 요구(Cygwin)

3) JNI라는 통신 방식 학습에 어려움 존재

4) 오용할 경우 프로그램의 복잡성 증대

- JDK와 NDK가 상호 보완적인 관계로 장점을 극대화 하는 방향의 개발 Kit 사용이 증대

     3. 안드로이드 시스템 개발 Kit의 활용 방안

구 분

설 명

UI 접근

화면반응, 액션처리와 같은 부분은 JDK로 구현

Engine 처리

실시간/대용량의 비즈니스 로직은 NDK로 구현

- 빠른 속도와 유연성을 보장하는 NDK를 기반으로 모듈을 만들고 JDK와의 JNI 통신을 통해 SW 운영

 

댓글