안드로이드 구조는 위와 같다. 크게 커널, HAL, Native Library, Android Runtime, Framework, Application으로 이루어 진다.

 

1.  Kernel

리눅스 커널을 사용 한다. 기본적인 IPC, 등을 사용하며 커널의 경량화를 위해 리눅스 커널에 존재하는 많은 API 제거했으며 일부는 Kernel단이 아닌 User단에서 실행하도록 안드로이드는 수정했다. 이로 인해 둘의 호환은 어려우며 리눅스 프로그램이 안드로이드에서, 안드로이드 프로그램이 리눅스 PC에서 사용하는데는 어려움이 있다.

 

결과적으로 리눅스 베이스로 안드로이드가 배포된 것이며 기본적인 H/W 접근과 작업은 리눅스와 유사함을 있다.

 

 

2.  HAL

HAL 안드로이드에서 user들이 applicatoin 개발을 진행할 , framework api 통해서 개발을 진행하는데 framework H/W device 제어하는 api 연결될 있기를 원했다.(결과적으로 개발자 사용자가 user단에서 API호출을 통해 쉽게 H/W deivce 통제하고 싶어 )

 

이러한 작업이 실제적으로 이루어지기 위해서는 많은 H/W 대한 제어가 필요하기때문에 많은 어려움이 있다.(모든 H/W 종류에 맞도록 API를 구현하는 것은 현실적으로 불가능함) 그래서 안드로이드는 모든 H/W 공통적으로 사용하는 open, close, write, read등의 기본적인 함수들을 API 만들었고 device vendor사에 해당 API 맞도록 구현을 요청하였다.

결과적으로 해당 API 호출함으로써 H/W Device 종류와 상관없이 윗단에서는 H/W open, read, write등의 기본적인 동작을 진행할 있게 되었고 이렇게 vendor 측에 요청하여 H/W device 접근 제어하는 API들이 바로 HAL이다.

 

 

3. Native Library

Native Library 안드로이드에서 보안, 경량화 등의 이슈로 인해 java 아닌 C,C++ 네이티브 소스 코드로 작성할 필요가 있을 때를 위해 만든 라이브러리이다. 해당 라이브러리들은 C, C++ 코드로 작성되었으며 java보다 효율적인 동작을 수행할 있다.

 

여기서 안드로이드는 Native Library 정말 필요한 소수만 구현하여 제공하는데 이유는 OS 경량화에 목적이있다.

추가적으로 개발에 있어 필요한 부분의 Native Library 개발자가 자신의 필요에 맞게 JNI 통해 네이티브 C,C++ 소스 코드로 구현할 있도록 지원한다.

 

 

4. Framework

Framework JAVA API 의미하며 해당 API로는 View, Activity 기본적으로 App개발에 있어 사용되는 라이브러리를 말한다.

보통의 App개발자들이 사용하는 기본적인 라이브러리가 모두 Framework 단에 구현된 API 의미한다.

 

 

5. App

사용자의 관점에서 서비스를 이용하기위한 다리 역할을 해주는 부분이다. 결국 안드로이드의 모든 서비스는 App형태로 지원되며 사용자는 App 통해 원하고자하는 서비스를 사용할 있음.

 

결과적으로는 사용자의 버튼 클릭 한번으로 인해 Framework API 호출 여기서 Framework 필요에 따라 Native Library 호출하며 결과적으로 H/W Device 제어를 하기 위해 HAL 코드를 호출하고 HAL 통한 리눅스 커널 함수는 device로부터 연산 명령 연산 결과를 얻어오고 다시 App단으로 올라와서 화면에 출력한다.

 

 

6. Andriod RunTIme

안드로이드는 안드로이드 구조의 경량화 그리고 효율을 위해 다양한 런타임 빌드 환경을 시도했고 안드로이드 환경에 맞도록 변화를 시도 했다.

+ Recent posts