2019년 통계에 따르면 전 세계 폰 사용자 중 76%가 안드로이드가 장착된 휴대폰을 사용하고 있다고 한다.
안드로이드(android)는 폰에서 사용하는 OS(운영체제)이다.
OS(운영체제)는 Operating System(작동 시스템)의 약자이다.
즉, 폰이나 컴을 작동시키는 시스템 프로그램이다.
OS는 윈도우10, MacOS(맥오에스), Linux(리눅스), iOS 등이 있다.
위 그림의 폰 안에 있는 쟤가 안드로이드의 캐릭터다.
android 라는 말은 그리스의 andro 와 oid가 합쳐진 말이다.
andro는 '남자,사람'이라는 뜻이고 oid는 '모양form'이라는 뜻이다.
그러므로 android는 '남자 모양의 로봇'을 나타낸다.
갑자기 '안드로메다(andromeda)'가 생각난다.
안드로메다는 안드로메다 은하(andromeda galaxy : 갤럭시)를 가리키는데 우리 은하에서 가장 가까운 은하이다.
빛이 되어 달리면 250만년 정도만 가면 도착할 수 있다.
안드로메다 은하가 있는 별자리에 안드로메다라는 이름을 붙였는데 본래 안드로메다는 고대 그리스 신화에 나오는 'andromeda' 공주 이름이다. 그리스 신화에 나오는 영웅 페르세우스가 메두사를 죽이고 바다를 건너오는 도중에 바다 괴물에 제물로 바쳐진 에티오피아의 공주 '안드로메다'를 구해서 결혼했다는 이야기에 나온다.
meda는 '생각하다'라는 뜻이다. 그러므로 andromeda는 '그 남자를 생각하다'일 수도 있겠다. 제물로 바쳐졌을 때 구해줄 사람을 생각해서 페르세우스가 나타난거지. 상상은 자유다.
말이 안드로메다로 가 버렸다.
다시 안드로이드로 돌아와서
구글이 안드로이드 운영체제를 플랫폼(platform)으로 만들어 2008년 버전 1.0을 오픈소스(코드 공개)로 발표했다.
플랫폼(platform)은 OS 뿐만 아니라 컴퓨터 부품과의 연결 구조, 코딩 언어 등을 통합한 형태를 말한다.
참고로 platform은 '기차역, 연단' 등의 뜻이 있다.
platform에서 plat은 본래 flat인데 '평평한'이고 form은 '형태, 모양'이다.
그래서 '평평한 것을 깔아놓는다'의 뜻에서 유추할 수 있다.
컴퓨터에서는 '실행 계획' , '운영 시스템' , '디자인 판' 등을 나타낸다.
그 후 발표하는 안드로이드 플랫폼의 코드 버전 마다 디저트 이름을 별명으로 붙여서 발표했다.
4.0에는 IceCreamSandwich(아이스크림 샌드위치)
4.1에는 Jelly Bean(젤리빈)
4.4에는 KitKat(킷캣)
5.0에는 Lollipop(랄리팝)
6.0에는 Marchmallow(마쉬멜로)
7.0에는 Nougat(뉴것)
8.0에는 Oreo(오레오)
9.0에는 Pie(파이)
2018년 9.0 버전(Pie, 파이)이 마지막이었고 2019년 부터는 디저트가 다 떨어졌는지 그냥 버전10으로 부르고 있다.
안드로이드 플랫폼의 구조
안드로이드 플랫폼은 위 그림과 같은 구조로 만들어진 소프트웨어를 기반으로 작동한다.
가장 밑바닥에는 리눅스라는 운영체제(OS)가 있다.
즉, 공개 운영체제인 리눅스 커널을 바탕으로 만들어졌다는 말이다.
리눅스는 폰의 하드웨어(부품, 기능)과 연결하기 위해 각 장치에 대한 드라이브 소프트웨어를 포함하고 있으며 이것을 관리한다.
1. 리눅스 커널과 HAL
리눅스 커널을 기반으로 그 위에 하드웨어 추상화 계층(HAL)이 만들어져 있다.
HAL은 Java API Framework가 장치 사용을 필요로 할 때 표준 인터페이스(기본 틀)을 제공하는 역할을 한다.
즉, 자바API 프레임워크에서 폰의 기능(카메라, 와이파이 등)을 요청하면 HAL에 만들어져 있는 해당 Library Module(라이브러리 모듈; 소스 모음 단위)이 처리한다.
2. 안드로이드 런타임과 C 라이브러리
안드로이드 런타임(ART)는 앱의 코드를 컴파일(compile)해서 실행하는 역할을 한다.
예전에는 Dalvik(달빅) 이라는 자바 가상기기로 앱을 실행했는데 안드로이드5.0 (API21) 이상 부터는 ART(안드로이드 런타임)를 사용해서 실행한다.
작성한 소스코드가 ART에 의해 실행되거나 APK 실행파일로 만들어 지는 과정은 다음과 같다.
- 자바/코틀린으로 소스코드를 만든다.
- 컴파일러를 거치면
- 자바 바이트 코드가 만들어 진다.
- 다시 덱스컴파일러를 거치면
- 달빅 바이트 코드가 만들어진다.
- 만들어진 dex파일을 ART(안드로이드 런타임) 가상기기로 실행하는 방법이 있고
- 소스 자원과 기계어 코드를 합쳐 APK 실행 파일을 만드는 방법이 있다.
코딩 언어인 C언어의 Library(라이브러리; 기능 모음)는 ART와 HAL의 많은 기능을 구현하기 위해 사용되었다.
3. 자바 API 프레임워크
지금까지 구성된 요소들과 기능들은 Java API Framework라는 작업 틀로 통합되어 있다.
즉, 앱을 만들 때 사용할 수 있는 '표준 라이브러리'이다.
이것은 코딩 언어 Java(자바)로 만들어졌다.
API는 Application Programming Interface(앱 프로그래밍 인터페이스)의 약자이다.
이름에서 알 수 있듯이 앱 프로그래밍과 서로 소통할 수 있는 역할을 한다.
즉, 운영체제나 코딩 언어의 기능을 이 API에 만들어져 있는 많은 Class(클래스)를 사용해서 접근할 수 있는 것이다.
그러므로 앱을 만들 때 이 API를 이용하면 되므로 가장 핵심적이고 중요한 부분이라 할 수 있다.
API는 모듈식(기능별 단위)으로 Class(클래스)가 만들어져 있는데 대표적인 것은 다음과 같다.
View System (뷰 시스템)
Activity Manager (액티비티 매니저)
Resource Manager (리소스 매니저)
Notification Manager (알림 매니저)
Content Providers (컨텐트 제공자)
View System은 단추 등과 같은 사용자 인터페이스를 제공한다.
Activity Manager는 액티비티의 수명 주기(lifecycle)를 관리한다.
Resource Manager는 앱에서 사용하는 이미지, 소리 등과 같은 파일을 관리한다.
Notification Manager는 앱에서 알림 기능을 관리한다.
Content Providers는 데이터 공유와 엑세스(접근)을 관리한다.
이런 기능들을 조합해서 앱을 만들 수 있다.
4. 시스템 앱들
가장 윗쪽에 시스템 앱들이 자리하고 있다.
안드로이드에는 이메일, 달력, 검색 등과 같은 기본적 기능을 가진 앱들이 만들어져 있다.
폰을 사서 처음 켰을 때 나타나는 앱들이다.
이런 앱들도 역시 자바 API 프레임워크로 만들어져 있는 것이다.
그러므로 앱을 만들 때 이런 기본 기능이 필요하다면 연결하여 만들면 되므로 직접 만드는 고통을 줄일 수 있다.
API 레벨
위에서 코딩할 때 핵심적인 역할을 하는 것이 API라는 것을 알았다.
API도 안드로이드 코드 버전 처럼 업그레이드 되면서 API레벨을 가진다.
4.0에는 IceCreamSandwich(아이스크림 샌드위치) : API 14
4.1에는 Jelly Bean(젤리빈)
4.4에는 KitKat(킷캣)
5.0에는 Lollipop(랄리팝) : API 21
6.0에는 Marchmallow(마쉬멜로) : API 23
7.0에는 Nougat(뉴것) : API 24
8.0에는 Oreo(오레오) : API 26
9.0에는 Pie(파이) : API 28
10.0에는 Android 10 : API 29
11.0에는 Android 11 : API 30
실제 사용자가 가지고 있는 폰에 장착된 안드로이드 버전은 다양하다.
그러므로 앱을 만드는 사람의 입장에서는 어느 버전에 맞춰야 할 지 고민스러울 수 있다.
그래서 안드로이드 스튜디오에서 프로젝트를 만들 때 그 기준을 추천해 주기도 한다.
2020년 초 현재 안드로이드 코드버전 5.0(API 21)이 설치되어 있는 폰이 94%정도 이므로 특별한 경우를 제외하고는 이것을 기준으로 앱을 만들면 된다. 이 말은 굳이 최신 버전에 맞출 필요가 없다는 뜻이다.
지금까지 안드로이드 플랫폼에 대해 간단하게 알아보았다.
Wraven...
'안드로이드앱 코딩_AndroidApp > 안스_코틀린_쪼개기' 카테고리의 다른 글
파편012_마지막 프로젝트 자동 열기 해제 (0) | 2020.07.01 |
---|---|
파편011_안드로이드 세팅_자동저장_자동완성 (0) | 2020.07.01 |
파편009_Animation 애니메이션 (0) | 2020.06.25 |
파편008_Debug_디버그_breakpoints (0) | 2020.06.23 |
파편007_Activity & Life Cycle_액티비티 생명주기 (0) | 2020.06.22 |