최종 수정일 : 2019-03-21

1. 리눅스 커널

안드로이드의 기반은 리눅스이다. 따라서 부팅시에는 부트로더를 통해 리눅스가 시작한다.

* 참고 : 부트로더(boot loader, bootstrap, bootstrap loader)  
bootstrap 또는 bootstrap loader라고도 한다.  
컴퓨터의 전원을 켤 때, 운영체제나 데이터 등을 비휘발성 메모리에서 RAM(Random Access Memory)으로 이동시킨다. (로드한다.)|  

리눅스가 부팅되면, 커널 초기화를 수행한 후 마지막 과정에서 init 프로세스를 호출한다.

2. init 프로세스

디바이스를 초기화하고, 안드로이드 프레임워크 동작에 필요한 각종 데몬(daemon), 컨텍스트 매니저(context manager), 미디어 서버(media server), Zygote 등을 실행한다.
init 프로세스가 실행하는 데몬 프로세스 : USB 데몬(usbd, USB 연결 관리), 안드로이드 디버그 브리지 데몬(adbd, 안드로이드 디버그 브리지 연결 관리), 디버거 데몬(debuggered, 디버그 시스템 시작), 무선 인터페이스 레이어 데몬(rild, 무선 통신 연결 관리)

3. 컨텍스트 매니저

안드로이드의 시스템 서비스를 관리하는 프로세스이다.
시스템 서비스는 카메라, 오디오, 비디오 처리하고 API를 제공한다.

안드로이드에서 동작하는 각종 시스템 서비스에 대한 정보는 컨텍스트 매니저에게서 얻는다.
시스템 서비스를 이용하는 애플리케이션이나 프레임워크의 내부 모듈은 서비스 매니저에게 요청하고, 요청 후에는 바인더(Binder)라는 안드로이드의 자체적인 IPC(Inter-process communication) 메커니즘을 통해 시스템 서비스를 이용할 수 있다.

부팅 시 안드로이드의 모든 시스템 서비스는 자신의 핸들 정보를 컨텍스트 매니저에게 등록한다. 시스템 서비스 등록 과정에서도 프로세스 간 통신을 수행하기 위해 바인더 IPC가 이용된다.

4. 미디어 서버(Media Server)

미디어 서버 프로세스는 C/C++ 기반으로 작성되어 있는 네이티브 시스템 서비스를 실행한다.
네이티브 시스템 서비스에는 Audio Flinger(오디오 출력을 담당, 오디오 장치에 대한 접근을 관리하는 소프트웨어)나 Camera 서비스 등이 있다.

5. Zygote(접합자)

안드로이드 어플리케이션의 로딩 시간을 단축하기 위한 프로세스이다.
모든 자바 기반 안드로이드 애플리케이션은 Zygote를 통해 포크(fork)된 프로세스 상에서 동작한다.

6. 시스템 서버(System Server)

시스템 서버는 Zygote에서 최초로 포크되어 실행되는 안드로이드 애플리케이션 프로세스이다.
애플리케이션 생명 주기를 제어하는 액티비티 매니저 서비스(Activity Manager Service)나 단말기의 위치 정보를 제공하는 로케이션 매니저 서비스(Location Manager Service)와 같은 자바 시스템 서비스를 실행한다.

시스템 서버에서 실행하는 자바 시스템 서비스도 안드로이드 애플리케이션이나 프레임워크 내부 모듈에서 이용할 수 있게 하기 위해서는 컨텍스트 매니저에 등록돼 있어야 한다.

바인더 IPC를 통해 자바 시스템 서비스를 C 언어 기반의 서비스 매니저에 등록하려면 자바와 C 언어 간의 인터페이스 역할을 하는 JNI(Java Native Interface)를 추가로 이용해야 한다.