您的位置:首页 > 运维架构 > 网站架构

Android系统架构篇

2017-11-30 18:38 148 查看
摘自:《深入解析Android5.0系统》

Android的启动过程可以分为bootloader引导、装载和启动Linux内核、启动Android系统三个大的阶段。

其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。

Android启动过程如图所示:



Android设备的启动过程

1.Bootloader引导

当我们按下手机的电源,最先运行的就是bootloader。bootloader的主要作用是初始化基本的硬件(如cpu、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的运行环境。一旦Linux内核装载完毕,bootloader就会从内存中清除掉。

如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入Fastboot模式或者Recover模式。

FastBoot是Android设计的一套通过USB来更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。

Recovery模式是Android特有的升级系统。利用Recovery模式,手机可以进行恢复出厂设置,或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。

2.装载和启动Linux进程

Android的boot.img存放的就是Linux内核和一个根文件系统。Bootloader会把boot.img映象装载进内存。然后Linux内核会执行整个系统的初始化,完成后装载根文件系统,最后启动Init进程。

3.启动Init进程

Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程、rild守护进程等。

4.启动ServiceManager

ServiceManager由Init进程启动。它的主要作用是管理Binder服务,负责Binder服务的注册与查找。

5.启动Zygote进程

Init进程初始化结束时,会启动Zygote进程。Zygote进程负责fork出应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建Dalivik虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出来的用户进程将继承和共享这些预加载的资源,不用浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也将变为守护进程,负责响应启动APK应用程序的请求。

6.启动SystemServer

SystemServer是Zygote进程fork出的第一个进程,也是整个Android系统的核心进程。在SystemServer中运行着Android系统大部分Binder服务。SystemServer首先启动本地服务SensorService;接着启动包括ActivityManagerService、WindowManagerService、PackManagerService在内的所有Java服务。

7.启动MediaServer

MediaServer由Init进程启动。它包含了一些多媒体相关的本地Binder服务,包括:CameraService、AudioFlingerService、MediaPlayerService和AudioPolicyService。

8.启动Launcher

SystemServer加载完所有Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent“android.intent.category.HOME“。凡是响应这个Intent的apk应用都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。

1)Linux内核 ——为Android设备各种硬件提供底层驱动

2)系统运行库 ——c/c++库为Android系统提供主要特性支持,SQLite库提供数据库支持,OpenGL|ES库提供3D绘 图支持,Webkit库提供浏览器内核支持,Dalvik虚拟机使每一个Android应用独立运行

3)应用框架层 ——-应用程序用到的API(Activity Manager 、Window Manager、Content Providers、View System、Notification Manager、Package Manager 、Telephony Manager 、Resource Manager 、 Location Manager 、XMPP Service)

4)应用层 ——应用程序

1.android目录结构

|– Makefile (全局的Makefile)

|– bionic (Bionic含义为仿生,这里面是一些基础的库的源代码)

|– bootloader (引导加载器)

|– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

|– dalvik (JAVA虚拟机)

|– development (程序开发所需要的模板和工具)

|– external (目标机器使用的一些库)

|– frameworks (应用程序的框架层)

|– hardware (与硬件相关的库)

|– kernel (Linux2.6的源代码)

|– packages (Android的各种应用程序)

|– prebuilt (Android在各种平台下编译的预置脚本)

|– recovery (与目标的恢复功能相关)

|– system (Android的底层的一些库)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: