리눅스 커널은 구글에서 만들며, 운영 체제의 핵심 부분을 말한다.
하드웨어와 소프트웨어 간의 상호작용을 관리하고 시스템 리소스를 효율적으로 관리한다, 즉 하드웨어를 컨트롤하는 역할을 한다
리눅스 커널과 하드웨어 기기간의 인터페이스 부분으로 단말기 제조사가 드라이버를 구현할 수 있도록 제공되는 계층이다.
단말기 제조사는 안드로이드 기기의 하드웨어 구성 요소를 제어하기 위해 HAL 규격에 맞게 하드웨어를 구현한다. 이 구현된 하드웨어는 HAL을 통해 안드로이드 시스템과 상호작용할 수 있도록 한다.
앱 개발자는 이러한 HAL을 통해 하드웨어 기능을 사용할 수 있다. 앱은 안드로이드 프레임워크에서 제공하는 API를 사용하여 HAL을 호출하고, 하드웨어 기능을 사용하거나 제어할 수 있다. 이를 통해 앱은 단말기의 카메라, 오디오, 센서 등과 같은 하드웨어 기능을 활용한다.
자바 가상 머신과 거의 비슷하다. Dalvik 같은 경우 실행시 코드 변환되어 비효율적이였다. 이러한 이유로 안드로이드 5.0 이후 ART(Anroid Runtime)으로 바뀌게 된다.
Dalvik은 실행시 코드가 변환이 된다면 ART는 설치시 코드가 변환이 된다.
즉, 앱을 실행하기 전에 앱의 코드를 미리 컴파일하여 기계어로 변환한다. 그래서 앱을 실행할 때마다 코드를 번역하는 Dalvik보다 빠르고 효율적인 실행이 가능하다
안드로이드 애플리케이션을 개발할 때, 일부 기능이나 성능 최적화를 위해 Java가 아닌 네이티브 코드를 작성해야 할 경우가 있다. 이때 C 및 C++을 사용하여 개발된 코드를 네이티브 코드 또는 Native C/C++ 코드라고 한다.
개발자가 애플리케이션을 제작할 때 사용하는 라이브러리
안드로이드 버전이 많은 변화를 이어오면서 하위버전에 서비스가 되지 않는 문제가 있다. 이를 위해 라이브러리를 통합한 것이 Android X 라이브러리이다. 이로 인해 버전이 낮은 경우에도 똑같은 모습을 제공해줄 수 있다.
하지만 다양한 버전의 OS가 존재하기 때문에 메모리를 많이 잡아 먹는 단점이 있다.
눈에 보이는 화면을 관리하는 실행 단위
화면을 가지지 않은 실행 단위, 백그라운드 프로세싱, 백그라운드를 사용하고 있다는 것을 사용자에게 알려야한다. 그렇지 않을 경우 실행이 안된다.
OS가 메시지를 받으면 실행되는 실행 단위, 예를 들어 단말기 배터리가 없을 경우 띄우게 된다. OS가 데이터를 알려주면 화면에 보여주는 과정을 거친다.
저장된 데이터를 제공하기 위해 실행되는 실행 단위, A와 B가 있을 때 데이터 공유
OS, 가상머신 애플리케이션에 정보를 알려준다.
안드로이드 4대 요소는 anifest에 반드시 기록되어져야 한다.
즉, 애플리케이션의 전체 구성을 정의하고 안드로이드 시스템에게 애플리케이션의 기능과 규칙을 알려주는 역할을 한다
AndroidManifest.xml
에 기록되어 있는 Activity들 중android.intent.action.MAIN
이름으로 설정되어 있는 intent filter
가 있는 Activity를 찾는다.<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
onCreate
메서드를 호출해준다.Activity가 보여줄 화면을 설정하는 부분