안드로이드 아키텍처

안드로이드는 어플리케이션(System Apps), 자바 API(Java API Framework)의 앱 레벨(App Level)과 Native C/C++ 라이브러리, 런타임, HAL(Hardware Abstraction Layer), Linux 커널의 시스템 레벨(System Level)로 나눌 수 있다.


앱 레벨은 안드로이드 개발에 필요한 클래스와 메서드, 컴포넌트 등 프로그램에 필요한 자바 소스로 된 라이브러리다. 시스템 레벨은 C/C++(Native)로 변경하거나 C/C++로 만들어진 라이브러리, 장치, OS(커널)로 구성된다. 이 책에서는 앱 레벨의 개발을 다루고 있다.

▲ 안드로이드 아키텍처


안드로이드 앱 개발자는 어플리케이션 앱(System Apps) 레벨의 자바 API(Java API Framework)를 사용해서 원하는 앱 소스를 만들어 앱을 실행한다. 자바 API(Application Programming Interface)는 앱 개발자를 위해 구글이 제공하는 클래스와 메서드로 보면 된다. SPI는 스마트폰의 제조사(또는 3rdparty)가 확장하거나 구현해야 할 인터페이스나 추상 클래스 및 추상 메서드며, 스마트폰의 제조사가 확장하거나 구현한다.


개발자는 API를 이용하여 개발하고 실행한 후, SPI가 구현된 System Level 위에서 개발 소스를 실현(구현)시켜주는 관계인 것이다. 예를 들어, API의 Canvas를 통해 원과 라인을 그리는 API 메서드(drawCricle( ), drawLine( ))를 이용하여 개발자는 drawClock( ) 메서드를 만들 수 있다. 이때 drawClock( )을 사용자가 만든 메서드라고 한다. 그리고 사용자가 drawClock( )을 실행하면 스마트폰(System Level)이 시계를 사용자에게 보여준다.

▲ 안드로이드 작동 원리


API는 자바로 되어 있으므로 안드로이드 개발자가 자바 프로그래밍에서 AWT나 SWING 같은 윈도우 프로그래밍을 제외한 자바의 기본 문법과 객체지향의 특징을 모두 사용할 수 있다. 자바 어플리케이션 개발은 자바로 코딩한다. 자바로 만든 소스를 컴파일(javac.exe)해서 자바 바이트코드로 만들고 JVM에서 실행(java.exe)한다. JVM은 OS(MS, Linux, Unix,…)에 상관없이 자바 바이트코드를 실행하기 위해 만든 가상의 OS다. MS사는 C#을 만들었는데 자바 바이트코드와 같은 역할의 IL 코드(Intermediate Language), JVM과 같은 역할의 CLR을 만들었다.


안드로이드도 자바와 C#처럼 바이트코드와 VM을 만들어서 소형 전자기기에 반영하기 위해 달빅(dalvik) 바이트코드와 달빅 VM을 개발했다. 그런데 여기에 사용할 새로운 언어를 만들기 보다는 기존의 자바를 활용하면 좋겠다고 판단했다. 자바로 개발하고 컴파일하여 자바 바이트코드로 만든 후, 안드로이드에서 실행시키기 위해 자바 바이트코드를 덱스 컴파일러(dex compiler)로 컴파일하여 달빅 바이트코드로 만든 다음에 달빅 VM에서 실행시킨다.

▲ 자바와 안드로이드의 관계


안드로이드 플랫폼은 안드로이드 아키텍처(422쪽 그림 참조)의 안드로이드 App(API 레벨, API 프레임워크) 레벨과 시스템 레벨을 모두 포함한다. 플랫폼 버전은 안드로이드 플랫폼의 버전을 표시한다. API 레벨은 시스템 레벨과 상호작용하는 안드로이드 App 레벨을 정수로 표시한 것이다. 안드로이드 버전이 6.0.1인 제품을 구입했다면 플랫폼 버전은 Android 6.0이고, API 레벨은 23이하를 사용해야 한다. 구글에서는 API 레벨 이하는 사용할 수 있다고 하지만, 제품에 따라 또는 너무 오래된 버전은 실행되지 않을 수 있다. API 레벨을 맞춰서 사용하는 것이 좋다.

▲ 안드로이드 버전과 API 레벨



초보자도 쉽게 배우는 자바 for 안드로이드 프로그래밍

작가 | 조효은

출판 | 정보문화사

Follow
4.7 Star App Store Review!
Cpl.dev***uke
The Communities are great you rarely see anyone get in to an argument :)
king***ing
Love Love LOVE
Download

Select Collections