Android 系统架构及系统的启动流程

一、Android 系统架构

网上的关于android系统架构的分层是分为四层和五层,如果是四层则划分为应用程序层,应用框架层,系统运行库层,linux内核层;

1、应用程序层:

所有的 Android 应用程序。应用程序将被安装在这层。这些应用程序包括通讯录,浏览器,电话,相机等应用。

2、应用框架层:

应用框架层以 Java 类的形式为应用程序提供许多高级的服务,提供开发应用程序所需要的API。应用程序开发者被允许在应用中使用这些服务。

活动管理者 - 控制应用程序生命周期和活动栈的所有方面。

内容提供者管道 - 允许应用程序之间发布和分享数据。

资源管理器 - 提供对非代码嵌入资源的访问,如字符串,颜色设置和用户界面布局。

通知管理器 - 允许应用程序显示对话框或者通知给用户。

视图系统 - 一个可扩展的视图集合,用于创建应用程序用户界面。

3、系统运行库层:(程序库和Android运行时库)

程序库

在 Linux 内核层的上面是一系列程序库的集合,包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用序库和Android运行;数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等。

Android程序库

这个类别包括了专门为 Android 开发的基于 Java 的程序库。这个类别程序库的示例包括应用程序框架库,如用户界面构建,图形绘制和数据库访问。一些 Android 开发者可用的 Android 核心程序库总结如下:

android.app - 提供应用程序模型的访问,是所有 Android 应用程序的基石

android.content - 方便应用程序之间,应用程序组件之间的内容访问,发布,消息传递。

android.database - 用于访问内容提供者发布的数据,包含 SQLite 数据库管理类。

android.opengl - OpenGL ES 3D 图片渲染 API 的 Java 接口。

android.os - 提供应用程序访问标注操作系统服务的能力,包括消息,系统服务和进程间通信。

android.text - 在设备显示上渲染和操作文本。

android.view - 应用程序用户界面的基础构建块。

android.widget - 丰富的预置用户界面组件集合,包括按钮,标签,列表,布局管理,单选按钮等。

android.webkit - 一系列类的集合,允许为应用程序提供内建的 Web 浏览能力。

Android运行时

这是架构中的第三部分,自下而上的第二层。这个部分提供名为 Dalvik 虚拟机的关键组件,类似于 Java 虚拟机,但专门为 Android 设计和优化。

Dalvik 虚拟机使得可以在 Java 中使用 Linux 核心功能,如内存管理和多线程。Dalvik 虚拟机使得每一个 Android 应用程序运行在自己独立的虚拟机进程。

Android 运行时同时提供一系列核心的库来为 Android 应用程序开发者使用标准的 Java 语言来编写 Android 应用程序。​​

4、Linux内核

提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅长的工作,如网络和大量的设备驱动,避免兼容大量外围硬件接口带来的不便。

                                                                                                                                                           

  而将android系统架构分为五层,最明显的区别就是HAL层(HAL提供标准接口,包含多个库模块,其中每个模块都为特定类型的硬件组件实现一组接口,当框架API请求访问设备硬件时,Android系统将为该硬件加载相应的库模块。)如下图所示:

 二、Android系统的启动流程

分为五层后可以更清楚地了解Android系统的启动流程:

从下往上的一个过程是由Boot Loader引导开机,然后依次进入 -> Kernel -> Native -> Framework -> App。自己画了一个图来梳理这个启动流程,(Loader层不包含在android系统架构当中),如下所示:

Loader层:(该层不包含在android系统架构当中)

Boot ROM: 当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设代码开始执行,然后加载引导程序到RAM;

Boot Loader:这是启动Android系统之前的引导程序,主要是检查RAM,初始化硬件参数等功能。

1、Linux内核层

Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

启动Kernel的swapper进程(pid=0):该进程又称为idle进程, 系统初始化过程Kernel由无到有开创的第一个进程, 用于初始化进程管理、内存管理,加载Display,Camera Driver,Binder Driver等相关工作;

启动kthreadd进程(pid=2):是Linux系统的内核进程,会创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。kthreadd进程是所有内核进程的鼻祖。

2、硬件抽象层 (HAL)

硬件抽象层 (HAL) 提供标准接口,HAL包含多个库模块,其中每个模块都为特定类型的硬件组件实现一组接口,比如WIFI/蓝牙模块,当框架API请求访问设备硬件时,Android系统将为该硬件加载相应的库模块。

3、Android Runtime & 系统库

每个应用都在其自己的进程中运行,都有自己的虚拟机实例。ART(是一种在Android操作系统上的运行环境),通过执行DEX文件可在设备运行多个虚拟机,DEX文件是一种专为Android设计的字节码格式文件,经过优化,使用内存很少。ART主要功能包括:预先(AOT)和即时(JIT)编译,优化的垃圾回收(GC),以及调试相关的支持。

这里的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进程的父进程,Zygote进程本身是由init进程孵化而来的

4、Framework层

Zygote进程,是由init进程通过解析init.rc文件后fork生成的,Zygote进程主要包含:

加载ZygoteInit类,注册Zygote Socket服务端套接字

加载虚拟机

提前加载类preloadClasses

提前加载资源preloadResouces

System Server进程,是由Zygote进程fork而来,System Server是Zygote孵化的第一个进程,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。

Media Server进程,是由init进程fork而来负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务。

5、App层

Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;

Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。

所有的App进程都是由Zygote进程fork生成的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值