Android 系统架构
google经典的四层架构从下往上分别为:Linux内核层、系统库和Android运行时环境、framework层和应用层这四层架构。按照Gityuan大神的视角,我们也从系统启动过程为主线,以进程的视角来剖析Android系统的架构
Android 启动架构
这里先上一张Android 系统启动的架构图:
可以看到:Android系统启动是从下往上的一个过程:Loader->Kernel->Native->Framework->App。
Loader 层
-
Boot Rom:当手机处于关机状态时,长按开机键开机,会引导芯片开始从固化在Rom里预设的代码开始执行,然后加载引导程序到Ram. -
Boot Loader:这是启动Android系统之前的引导程序,主要是检查Ram、初始化参数等功能。
Kernel 层
kernel层指的就是Android内核层,到这里才刚刚进入Android系统
- 启动
Kernel层的swapper进程(pid=1),系统初始化过程Kernel创建的第一个进程,用于初始化进程管理、内存管理,加载Display、Camera、Binder等驱动相关工作。 - 启动
kthreadd(pid=2),这是Linux系统的内核进程,会创建内核工作线程kworkder、软中断线程ksoftirqd和thermal等内核守护进程。kthreadd是所有内核进程的鼻祖。
Native 层
这里的Native层主要包括init孵化来的用户空间的守护进程、HAL层及开机动画等。启动init进程(pid=1),是Linux系统的用户进程,init进程是所有用户进程的鼻祖。
-
init进程会孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程; -
init进程还会启动ServiceManager(Binder服务管家)、bootanim(开机动画)等重要服务。 -
init进程孵化出Zygote进程,Zygote进程是Android系统第一个Java进程(虚拟机进程),zygote进程是所有Java进程的父进程。
Framework 层
framework主要包括Zygote进程、SystemServer进程和MediaServer进程`。
Zygote 进程
Zygote进程是由init进程通过解析init.rc文件后fork生成的。Zygote的任务主要包括:
- 加载
ZygoteInit类,注册Zygote Socket服务端套接字。 - 加载虚拟机
preloadClasssespreloadResources
System Server 进程
System Server进程是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程。System Server负责启动和管理整个Java Framework,包含ActivityManager、PowerManager等服务。
Media Server 进程
Media Server 进程由init进程fork而来,负责管理整个C++ Framework,包含AudioFlinger、Camera Service等服务。
App 层
Zygote进程孵化出的第一个App进程是Launcher,也就是用户看到的桌面App。同时Zygote进程还会创建Browser、Phone、Email等App进程。也就是说所有的App进程都是由Zygote进程fork生成的。
Syscall 和 JNI
Native层和Kernel层有一个系统调用层,也就是Syscall。Java层和native层之间的纽带是JNI。