Android系统架构
系统架构
Android是Google公司推出的一款智能手机平台,该平台本身是基于Linux内核的,下面是系统的架构图:
从图中可以看到,Andoid系统大体可以分为四层,从上往下依次是:
Application层:与用户直接交互的就是该层的应用程序,都是由Java语言开发的。
Framework层:基本上由Java语言编写,它是Android平台上Java世界的基石。
Libraris层:动态库(共享库)、Android运行时库,Dalvik虚拟机等,可以称为Native层。
Linux内核层:包含Linux内核和一些驱动模块(比如USB驱动、Camera驱动、蓝牙驱动等)。
应用层(System Apps)
系统应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用 Java 进行开发的。
应用框架层(Java API Framework)
应用框架层为开发人员提供了开发应用程序所需要的 API ,我们平常开发应用程序都是调用这一层所提供的 API ,当然也包括系统应用。这 层是由 Java 代码编写的,可以称Java Framework 。
应用框架层所提供的组件如下所示:
名称 | 功能描述 |
---|---|
Activity Manager(活动管理器) | 管理各个应用程序生命周期,以及常用的导航回退功能。 |
Location Manager(位置管理器) | 提供地理位置及定位功能服务。 |
Package Manager (包管理器) | 管理所有安装在Android系统中的应用程序。 |
Notification Manager (通知管理器) | 使得应用程序可以在状态栏中显示自定义的提示信息 |
Resource Manager (资源管理器) | 提供应用程序使用的非代码资源,如本地化字符串、图片、布局文件、颜色文件等。 |
Telephony Manager (电话管理器) | 管理所有的移动设备功能。 |
Window Manager (窗口管理器) | 管理所有开启的窗口程序。 |
Content Provider (内容提供器) | 使得不同应用程序之间可以共享数据。 |
View System (视图系统) | 构建应用程序的基本组件。 |
系统运行库层( Native)
系统运行库层分为两部分,分别是C++程序库和 Android 运行时库,下面分别进行介绍。
1、C++程序块库
C/C++程序库能被 Android 系统中的不同组件所使用,井通过应用程序框架为开发者提供服务。
名称 | 功能 |
---|---|
OpenGL ES | 3D 绘图函数库。 |
Libc | 从BSD继承来的标准C系统函数库,专门为基于嵌入式Linux的设备定制。 |
Media Framework | 多媒体库,支持多种常用的音频、视频格式录制和回放。 |
SQLite | 轻型的关系型数据库引擎。 |
SGL | 底层的2D图形渲染引擎。 |
SSL | 安全套接层,是一种为网络通信提供安全及数据完整性的安全协议。 |
Free Type | 可移植的字体引擎,它提供统一的接口来访问多种字体格式文件。 |
2、Android运行时库
运行时库又分为核心库和 ART (Android 5.0 系统之后, Dalvik拟机被 ART 取代)。核心库提供了 Java 语言核心库的大多数功能,这样开发者可以使用 Java语言来编写 Android 应用。
与 JVM 相比, Dalvik 虚拟机( DVM )是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每 Dalvik 应用作为 个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
DVM :应用每次运行时,字节码都需要通过即时编译器转换为机器码,这会使得应用的运行效率降低。(JIT)
ART:系统在安装应用时会进行一次预编译,将字节码预先编译成机器码并存储在本地,这样应用每次运行时就不需要执行编译了,运行效率也大大提高。(AOT)
硬件抽象层(HAL)
硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。
Linux 内核层 (Linux Kernel)
Android 的核心系统服务基于 Linux 内核,在此基础上添加了部分 Android 专用的驱动。系统的安全性、内存管理、进程管理、网络协议技和驱动模型等都依赖于该内核。