Android系统体系结构详解
Android系统体系结构详解
Android系统是一个由Google公司开发的手机平台,其大部分代码已经开源。该系统采用分层架构设计,从高层到低层依次为应用程序层、应用程序框架层、系统运行库层和Linux核心层。本文将详细介绍Android系统的体系结构及其各个组成部分的功能和实现方式。
Android系统架构概述
Android的系统架构采用了分层的设计理念,从高层到低层依次分为四个层次:
应用程序层:这一层包含了Android系统自带的核心应用程序,如电子邮件客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序等。所有这些应用程序都是使用Java语言编写的。
应用程序框架层:这一层提供了应用程序开发所需的API框架。其设计允许开发人员完全访问核心应用程序所使用的API,并且支持组件的重用。应用程序可以发布其功能块,其他应用程序也可以使用这些功能块(在遵循框架的安全性限制的前提下)。此外,该架构还支持用户方便地替换程序组件。
系统运行库层:这一层包含了多个C/C++库,为Android系统中的不同组件提供服务。其中包括Bionic系统C库、媒体库、Surface Manager、WebKit、SGL、3D库、FreeType、SQLite等。此外,这一层还包括了硬件抽象层,用于实现设备驱动。
Linux核心层:Android系统的核心系统服务依赖于Linux 2.6内核,包括安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核还作为硬件和软件栈之间的抽象层。
应用程序层
Android系统自带了一系列核心应用程序,包括:
- 电子邮件客户端
- SMS短消息程序
- 日历
- 地图
- 浏览器
- 联系人管理程序
所有这些应用程序都是使用Java语言编写的。
应用程序框架层
应用程序框架层提供了丰富的API,支持应用程序开发。其主要组件包括:
- 丰富且可扩展的视图(Views):用于构建应用程序,包括列表、网格、文本框、按钮等组件,以及可嵌入的Web浏览器。
- 内容提供器(Content Providers):允许应用程序访问其他应用程序的数据(如联系人数据库),或共享自己的数据。
- 资源管理器(Resource Manager):提供对非代码资源的访问,如本地字符串、图形和布局文件。
- 通知管理器(Notification Manager):允许应用程序在状态栏中显示自定义提示信息。
- 活动管理器(Activity Manager):管理应用程序生命周期并提供常用的导航回退功能。
系统运行库层
系统运行库层包含了多个C/C++库,为Android系统中的不同组件提供服务。其中包括:
- Bionic系统C库:基于BSD的C标准函数库,专门为嵌入式Linux设备定制。
- 媒体库:基于PacketVideo OpenCORE,支持多种音频、视频格式的播放和录制,以及静态图像文件的处理。支持的编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等。
- Surface Manager:管理显示子系统,支持多个应用程序的2D和3D图层的无缝融合。
- WebKit:最新的Web浏览器引擎,支持Android浏览器和可嵌入的Web视图。
- SGL:底层的2D图形引擎。
- 3D库:基于OpenGL ES 1.0 APIs实现,支持硬件3D加速(如果可用)或高度优化的3D软加速。
- FreeType:位图和矢量字体显示。
- SQLite:一个轻量级的关系型数据库引擎,对所有应用程序可用。
此外,系统运行库层还包括硬件抽象层,用于实现设备驱动。为了避开GPL协议的限制,Android将部分设备驱动实现为用户空间驱动,而不是直接放在Linux内核中。这样可以避免公开所有源代码,只需要公开与内核交互的“后门”代码即可。
Linux核心层
Android系统的核心系统服务依赖于Linux 2.6内核,包括:
- 安全性
- 内存管理
- 进程管理
- 网络协议栈
- 驱动模型
Linux内核还作为硬件和软件栈之间的抽象层。Android对Linux内核进行了部分修改,主要包括:
- Binder (IPC):提供有效的进程间通信机制。
- 电源管理:优化电源使用,以延长电池寿命。
Android开发语言
Android应用程序开发使用Java语言,主要包括三个部分:
- Java语言:即其语法,用于编写代码。
- Java虚拟机:为了实现“一次编译,到处运行”的原则,Java在编译连接后产生Java bytecode,需要Java虚拟机来执行。
- 库:提供常用的功能库。
Android使用Dalvik虚拟机,它不是为Java设计的,而是运行Dalvik executable(简称dx)。为此,Android提供了dx工具,用于将Java bytecode转换为dx格式。
Android源代码结构
Google提供的Android源代码包经过解压缩后,第一级别的目录和文件结构如下:
.
|-- Makefile (全局的Makefile)
|-- bionic (基础库源代码)
|-- bootloader (引导加载器)
|-- build (编译和配置脚本)
|-- dalvik (Java虚拟机)
|-- development (程序开发模板和工具)
|-- external (目标机器使用的库)
|-- frameworks (应用程序框架层)
|-- hardware (与硬件相关的库)
|-- kernel (Linux 2.6内核源代码)
|-- packages (Android应用程序)
|-- prebuilt (预置脚本)
|-- recovery (恢复功能相关)
`-- system (底层库)
其中,各个目录的具体内容和功能如下:
- bionic:包含基础库的源代码,如libc、libdl、libm等。
- bootloader:引导加载器相关代码。
- build:包含编译和配置所需的脚本和工具,如Makefile、envsetup.sh等。
- dalvik:Java虚拟机相关代码。
- development:包含应用程序开发所需的模板和工具,如示例程序、仿真环境等。
- external:包含Android目标系统中的各种模块,如多媒体框架、网络协议栈、数据库系统等。
- frameworks:应用程序框架层的代码。
- hardware:与硬件相关的库。
- kernel:Linux 2.6内核源代码。
- packages:包含Android的各种应用程序和内容提供者。
- prebuilt:包含在各种平台下预编译的脚本。
- recovery:与目标设备恢复功能相关的代码。
- system:Android底层库的代码。
通过以上结构,开发者可以方便地理解和修改Android系统的各个组件,进行定制化开发。