Android는 Linux 기반의 오픈소스 소프트웨어 스택이다. Android 플랫폼의 구성요소는 아래 그림과 같다.
Android 플랫폼의 기반은 Linux 커널로, ART(Android 런타임)는 스레딩(Threading) 및 하위 수준의 메모리 관리와 같은 기본 기능에 Linux 커널을 사용한다.
Linux 커널을 사용하면 Android의 주요 보안 기능을 활용하고 널리 알려진 커널용 하드웨어 드라이버를 개발할 수 있다.
상위 레벨의 Java API 프레임워크에서 하드웨어 기능을 이용할 수 있게 표준 인터페이스를 제공한다. ex) 카메라, Bluetooth 모듈 등.
프레임워크 API가 기기 하드웨어에 액세스하기 위해 호출을 수행하면 Android 시스템이 해당 하드웨어 구성 요소에 대한 라이브러리 모듈을 로드한다.
앱을 실행하는 역할을 한다. DEX 파일을 실행하여 저용량 메모리 기기에서 여러 가상 머신을 실행하도록 작성되었다. Android 5.0 이전에는 Dalvik이 앱을 실행했지만 그 이후 버전은 ART가 대신한다.
Java 소스 코드를 작성하고 컴파일하면 클래스 파일이 만들어진다. 이 파일은 JVM에서 실행되는데 Android는 자바 클래스를 런타임 때 그대로 실행하지 않고 DEX로 컴파일 한다. 이 DEX 파일을 해석해서 실행하는 게 ART이다.
DEX 파일은 Android용으로 특별히 설계된 바이트코드 형식으로, 최소 메모리 공간에 맞게 최적화되었다. Jack과 같은 툴체인을 빌드하고, Java 소스를 Android 플랫폼에서 실행될 수 있는 DEX 바이트코드로 컴파일한다.
대부분은 Java 프레임워크로 개발되지만 네이티브 C/C++ 라이브러리를 이용할 때도 있다. 이를 Android NDK(Android Native Development Kit)라고 한다.
Android 앱을 개발할 때 사용하는 Java API이다. Android 앱을 제작하는 데 필요한 빌딩 블록을 구성한다.
Android는 이메일, SMS 메시징, 캘린더, 인터넷 검색, 주소록 등의 주요 앱 세트와 함께 제공된다. 플랫폼에 기본적으로 포함된 앱에는 사용자가 설치하도록 선택하는 앱과 구별되는 특별한 상태가 없다. 따라서 타사 앱이 사용자의 기본 웹브라우저, SMS 메시징 또는 기본 키보드가 될 수 있다(단, 시스템의 설정 앱 등 가지 예외가 적용될 수 있음).
시스템 앱은 사용자를 위한 앱으로도 작동하고 개발자가 자신의 앱에서 액세스할 수 있는 주요 기능을 제공하기 위한 용도로도 작동한다. 예를 들어, 앱이 SMS 메시지를 제공하고자 할 경우 해당 기능을 직접 빌드할 필요가 없다. 그 대신, 이미 설치된 SMS 앱을 호출하여 지정한 받는 사람에게 메시지를 제공할 수 있다.
구글은 계속해서 새로운 버전의 Android OS를 내놓고 있다. 시간이 지나면서 새로운 기능이 추가되거나, 기존의 API가 변경/제거되는 등 Android 앱 개발에 영향을 주고 있다. 그렇기 때문에 Android 개발자는 새로운 Android 버전에서의 변경사항을 파악해야 한다.
Android 11.0, 12.0 등은 OS 버전을 의미한다. 또 이 OS 버전마다 API 레벨이 지정되어 있는데 이 API 레벨(SDK 버전)이 있다.
Android 10 부터는 디저트 이름으로 코드명 짓기를 공식적으로 폐기했으나 내부에서는 여전히 사용중이다.
플랫폼 버전 | 코드명 | API 레벨 | 출시 연도 |
---|---|---|---|
Android 1.0 | - | 1 | 2008 |
Android 1.1 | Petit Four | 2 | 2009 |
Android 1.5 | Cupcake | 3 | 2009 |
Android 1.6 | Donut | 4 | 2009 |
Android 2.0.x ~ 2.1 | Éclair | 5~7 | 2009 |
Android 2.2.x | Froyo | 8 | 2010 |
Android 2.3.x | Gingerbread | 9~10 | 2010 |
Android 3.x | Honeycomb | 11~13 | 2011 |
Android 4.0.x | Ice Cream Sandwich | 14~15 | 2011 |
Android 4.1.x~4.3.x | Jelly Bean | 16~18 | 2012 |
Android 4.4.x | KitKat | 19~20 | 2013 |
Android 5.x | Lollipop | 21~22 | 2014 |
Android 6.x | Marshmallow | 23 | 2015 |
Android 7.x | Nougat | 24~25 | 2016 |
Android 8.x | Oreo | 26~27 | 2017 |
Android 9.0 | Pie | 28 | 2018 |
Android 10.0 | Q(Quince Tart) | 29 | 2019 |
Android 11.0 | R(Red Velvet Cake) | 30 | 2020 |
Android 12.0 | S(Snow Cone) | 31 | 2021 |
Android 12.1 | Sv2 | 32 | 2022 |
Android 13.0(Beta) | T(Tiramisu) | 32 | 2022 |
새로운 버전이 나오면서 이전 버전에서 사용하던 API에 변화가 생겼다면 앱이 정상적으로 동작하지 않을 수 있다.