일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- svn
- git
- 모바텀
- oracle
- IntelliJ
- SQL
- Redis
- 보안
- 마이바티스
- 상태코드
- mybatis
- Tomcat
- JSON
- JQuery
- Server
- Javascript
- 이클립스
- HTTP
- 오라클
- 톰캣
- 자바문법
- db
- java
- Eclipse
- DBeaver
- 인텔리제이
- 자바
- Linux
- 디비버
- 자바스크립트
- Today
- Total
JongTachi의 개발 블로그
Android 구조 본문
1. 안드로이드의 구조
설명에 앞서 밑의 사진은 안드로이드의 구조를 나타낸 그림이다. 그림을 보고 차근 차근 읽어보자.
일단 안드로이드는 5개의 층으로 나눠져있다.
- Linux Kernel(리눅스 커널)
- Hardware Abstraction Layer (하드웨어 추상화 계층)
- Native C/C++ Libraries, Android Runtime
- Java API Framework(자바 API 프레임워크)
- System Apps(애플리케이션 계층)
1) Linux Kernel(리눅스 커널)
커널(Kernel)이란 뜻은 '알맹이'라는 뜻인데 컴퓨터 쪽에선 '핵심'이라는 뜻이다. 즉 OS(운영체제)의 관리자라고 보면 된다. 리눅스 커널에는 하드웨어의 운영과 관련된 낮은 수준의 관리 기능이 들어있다. 주로 메모리 관리, 디바이스 드라이버, 보안등을 담당한다. 안드로이드 커널로 리눅스를 채택한 이유는 오픈 소스라는 장점과 함께 카메라, 터치스크린, GPS, 자이로스코프 등 많은 스마트폰 장치를 지원하기 때문이다.
2) Hardware Abstraction Layer (하드웨어 추상화 계층)
하드웨어은 굉장히 Low한 언어들을 사용하여 만들어진다. 그러한 하드웨어를 쓰기 위해서는 기계어를 써야하며 이를 위해 MIPS같은 어셈블리 언어를 쓴다. 아무튼 하드웨어 명령어들이 굉장히 복잡하기 때문에 그것들을 추상시켜놨다고 보면 된다. 즉 하드웨어 명령어들을 이 계층이 추상화 시켜놓았기 때문에 커널에서도 가져다 쓰고, 프레임 워크 계층에서도 가져다 쓴다.
3) Native C/C++ Libraries, Android Runtime
- Native 라이브러리: 라이브러리란 어떤 것들을 가져다가 그대로 쓸 수 있도록 해주는 것이다. 여기에 Native라는 것이 붙었다. 즉 우리가 쓰던 라이브러리 기능이기 한데 좀 더 low한 레벨에서 동작하는 라이브러리라고 볼 수 있다. 여기에는 HAL 계층에서 쓰는 하드웨어들의 라이브러리나 OpenGL같은 그래픽, SQLite같은 로컬 DB등이 들어있다. 즉 안드로이드에 필수적인 라이브러리들이 들어간 계층이다.
- Runtime : Java 코어 랑브러리와 달빅 가상 머신 또는 아트 런타임으로 구성된다. 안드로이드는 Java 문법으로 프로그래밍 하지만 Java 가상 머신을 사용하지 않고, 이곳의 달빅 가상 머신 이나 아트 런타임을 사용한다. 달빅 가상 머신과 아트 런타임은 모바일 환경에 최적화 되어있다.
4) Java API Framework(자바 API 프레임워크)
안드로이드 API가 존재하는 곳이다. 쉽게 말해 미들웨어로 보면된다. 애플리케이션은 API를 통해 안드로이드의 커널에 접근할 수 있으므로 안드로이드폰은 하드웨어에 접근할 때는 Java에 직접 접근하는 것이 아니라 API를 통해서만 가능하다.
5) System Apps(애플리케이션 계층)
일반적으로 안드로이드 스마트폰에서 사용할 수 있는 일반적인 응용프로그램이다. 웹 브라우저, 달력, 구글 맵, 연락처, 게임 등 사용자 입장에서 가장 많이 사용하는 앱이다. 모두 JAVA로 제작된다.
'Android' 카테고리의 다른 글
All of Fragment (0) | 2022.06.20 |
---|---|
Service Life_Cycle (0) | 2022.06.06 |
Android Activity-LifeCycle (0) | 2022.05.19 |
Android Storage (0) | 2022.05.16 |