Android 系统架构
- 应用层:系统内置应用和第三方应用(apk)。
- 应用框架层:为开发人员提供开发应用程序的API,简称:Framework层。
名称 | 功能描述 |
---|---|
Activity Manager(活动管理器) | 管理各个程序生命周期,以及常用的导航回退功能 |
Location Manager(位置管理器) | 提供定位服务 |
Package Manager(包管理器) | 管理所有安装在Android系统上的应用 |
Notification Manager(通知管理器) | 使得应用程序可以在状态栏中显示自定义的提示信息 |
Resource Manager(资源管理器) | 提供应用程序使用的各种非代码资源,如:视频图片、布局、颜色文件等。 |
Telephone Manager(电话管理器) | 管理所有移动设备功能 |
Windows Manager(窗口管理器) | 管理所有开启的窗口程序 |
Content Provide(内容提供器) | 使不同应用之间可以共享数据 |
View System(视图系统) | 构成应用程序的基本条件 |
- 系统运行库层(Native):C/C++程序库和Android运行库。 核心库提供了 Java 语言核心库的大多数功能,这样开发者可以使用 Java语言来编写 Android 应用。与 JVM 相比,Dalvik 虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代 DVM的 ART 的机制与 DVM 不同,DVM 中的应用每次运行时,字节码都需要通过即时编译器(Just In Time,JIT)转换为机器码,这会使得应用的运行效率降低。而在 ART 中,系统在安装应用时会进行一次预编译(Ahead Of Time,AOT),将字节码预先编译成机器码并存储在本地,这样应用每次运行时就不需要执行编译了,运行效率也大大提高。
名称 | 功能描述 |
---|---|
OpenGL ES | 3D绘图库 |
LibC | 标准C系统函数库,专门为嵌入式Linux系统定制 |
Media Framework | 多媒体库,支持常用的音频,视频格式录制和回放 |
SQLite | 轻型的关系型数据库 |
SGL | 底层的2D图形渲染 |
SSL | 数据传输安全协议(加密),https就是添加了SSL |
FreeType | 字体引擎 |
- 硬件抽象层(HAL):位于操作系统内核(Linux系统)和硬件之间的接口层,将硬件抽象化,为了保护硬件厂商的知识产权。
- Linux内核,在此基础上添加了Android专用驱动。安卓系统的系统安全性、内存管理、网络协议栈和驱动模型等都是依赖与Linux内核。
系统目录
应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库及硬件抽象层等进行衔接。应用框架层的主要实现代码在 frameworks目录下面。
C/C++程序库部分
系统运行库层(Native)中的 C/C++程序库的类型繁多,功能强大,C/C++程序库并不完全在一个目录中。部分目录如下:
Android 系统启动
init进程启动过程
init 进程是 Android 系统中用户空间的第一个进程,进程号为 1,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建 Zygote(孵化器)和属性服务等。init 进程是由多个源文件共同组成的,这些文件位于源码目录 system/core/init 中。
过程:
- 启动电源以及系统启动。
当电源按下时引导芯片代码从预定义的地方(固化在 ROM)开始执行。加载引导程序BootLoader 到 RAM 中,然后执行。 - 引导程序 BootLoader
引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把系统 OS 拉起来并运行。 - Linux 内核启动
当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。在内核完成系统设置后,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。 - init 进程启动
init 进程做的工作比较多,主要用来初始化和启动属性服务,也用来启动 Zygote 进程。从上面的步骤可以看出,当我们按下启动电源时,系统启动后会加载引导程序,引导程序又启动 Linux 内核,在 Linux 内核加载完成后,第一件事就是要启动 init 进程。
init 的 main 函数做了很多事情.在开
始的时候创建和挂载启动所需的文件目录,其中挂载了 tmpfs、devpts、proc、sysfs 和 selinuxfs 共 5 种文件系统,这些都是系统运行时目录,顾名思义,只在系统运行时才会存在,系统停止时会消失。
解析init.rc
init.rc 是一个非常重要的配置文件,它是由 Android 初始化语言(Android Init Language)编写的脚本,这种语言主要包含 5 种类型语句:Action、Command、Service、Option 和 Import。
属性服务
属性服务
Windows 平台上有一个注册表管理器,注册表的内容采用键值对的形式来记录用户、软件的一些使用信息。即使系统或者软件重启,其还是能够根据之前注册表中的记录,进行相应的初始化工作。Android 也提供了一个类似的机制,叫作属性服务。init 进程启动时会启动属性服务,并为其分配内存,用来存储这些属性,如果需要这些属性直接读取就可以了。