1.2 Android系统架构
前面学习了智能手机的基本硬件结构,可通过功能手机与智能手机的特点和区别从本质上去认识它们。Android作为一款运行在AP上的开源智能手机操作系统,其系统架构是什么样的呢?我们先来看看图1-2。
图1-2 Android系统架构
通过图1-2不难发现,Android是一个分层的基于Linux Kernel的智能手机操作系统,共分为四层,从上到下依次是应用层(Applications)、应用框架层(Framework)、系统运行库层(Libraries)和核心层(Linux Kernel),下面将对这四层进行简要的分析和介绍。
1.2.1 应用层
Android近几年的发展可谓是非常迅猛,有一个很重要的原因,那就是它的应用非常多。安卓市场已发布的软件个数和软件下载量目前仅次于苹果的应用商店,并且保持着快速增长态势。只有这些第三方开发的应用(如游戏、导航、播放器、桌面主题等)日益丰富,手机终端用户才能不断地发展和壮大,而这些应用均在应用层运行。
应用层包括了各种Android应用程序,这些应用程序是使用Java语言开发,并运行在Dalvik虚拟机上,处于Android系统架构中的第一层。在Android源码和SDK中,谷歌公司已经捆绑和发布了一些核心应用及源代码,如Dialer、MMS、日历、谷歌地图、浏览器、联系人等。
1.2.2 应用框架层
如图1-2所示,Android系统架构中的第二层是应用框架层,是用Java语言实现和开发的。有了应用框架层,开发者使用该层提供的API便可非常方便地完成访问设备硬件、获取位置信息、向状态栏添加通知消息、设置闹铃等操作,而不必关心具体的底层实现机制和硬件实现方式。这样,简化了Android应用开发者开发程序时的架构设计,从而能够快速开发新的应用程序。
应用框架层是谷歌公司发布核心应用时所使用的API框架,开发人员可以使用这些框架提供的API来快速开发自己的应用程序。下面是对Android中一些主要的组件的简要总结及相关说明。
• 视图(View)
在Android SDK(Software Development Kit,软件开发工具包)中介绍了其丰富的视图的使用方法及相关属性,所有的Android应用程序都由这些视图构成,主要包括列表(List)、网格(Grid)、文本框(Text)、按钮(Buttons)等基础Android应用的界面控件。
• 资源管理器(Resource Manager)
提供非代码资源转换和访问,如本地字符串(xml文件配置)、图片和布局文件(Layout File,使用xml文件配置)。
• 通知管理器(Notification Manager)
应用可以在状态栏中显示自定义的提示信息,如新短信通知、未接来电通知、手机信号量通知等。
• Activity管理器(Activity Manager)
用来管理Android应用程序界面的生命周期(onCreate创建、onResume显示、onPause暂停、onStop停止等),一个手机屏幕界面可对应一个Activity。
1.2.3 系统运行库层
如图1-2所示,Android系统架构中的第三层为系统运行库层,这一层主要包含了手机操作系统平台必备的C/C++核心库、Dalvik虚拟机运行环境和HAL子层。我们跳过HAL,先简单地介绍和分析C/C++核心库和Dalvik虚拟机运行环境。
1. C/C++核心库
系统运行库层包含一个C/C++库的集合,当使用Android应用框架的一些接口时,系统运行库层通过C/C++核心库来支持对应的组件使用,使其能更好地为Android应用开发者服务。下面是一些主要的核心C/C++库及其简要说明。
• libc(系统C库)
C语言标准库,处于系统最底层的系统库,由Linux系统来调用。
• Media Framework(多媒体库)
Android系统多媒体库,支持当前手机平台上主流的音频和视频格式播放和录制,以及静态图像。如MPEG-4、MP3、AAC、JPG、PNG等多媒体格式。
• SGL
2D图形引擎库
• OpenGL
3D效果的支持。
• SQLite
轻量级关系数据库引擎,可用来增、删、改、查通话记录、联系人等信息。
• WebKit
新式的Web浏览器引擎,支持当前非常流行的HTML 5。
• SSL
基于TCP/IP网络协议,为数据安全通信提供支持。
2. Dalvik虚拟机运行环境
系统运行库层包含了Android Runtime,其核心为Dalvik虚拟机。每一个Android应用程序都运行在Dalvik虚拟机之上,且每一个应用程序都有自己独立运行的进程空间;Dalvik虚拟机只执行DEX可执行文件。
DEX格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。要生成DEX格式文件,首先通过Java程序编译生成class文件,然后通过Android提供的dx工具将class文件格式转换成DEX格式。
Dalvik虚拟机的特性总结如下。
• 每一个Android应用运行在一个Dalvik虚拟机实例中,而每一个虚拟机实例都是一个独立的进程空间。
• 虚拟机的线程机制、内存分配和管理、Mutex(进程同步)等的实现都依赖底层Linux操作系统。
• 所有Android应用的线程都对应一个Linux线程,因而虚拟机可以更多地使用Linux操作系统的线程调度和管理机制。
注意
因为Android的编程语言是Java的缘故,我们很容易将Dalvik虚拟机与Java虚拟机误认为是同一个东西。但Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;它们之间最大的不同在于Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的是其专有的文件格式——DEX(Dalvik Executable)文件。
1.2.4 核心层
Android 4.0基于Linux Kernel 3.0.8提供核心系统服务,如文件管理、内存管理、进程管理、网络堆栈、驱动模型等操作系统的基本服务能力。Linux Kernel同时也作为硬件和软件之间的抽象层,需要一些与移动设备相关的驱动程序来支持,主要的驱动如下。
• 显示驱动(Display Driver)
基于Linux的帧缓冲驱动。
• 键盘驱动(Keyboard Driver)
输入设备的键盘驱动,如Home(待机)、Menu(菜单)、Return(返回)、Power(电源)等设备按键。
• 音频驱动(Audio Driver)
常用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。
• 电源管理(Power Management)
如电池电量、充电、屏幕开启关闭管理等。
• Binder IPC驱动
Android平台上一个特殊的驱动程序,具有单独设备访问节点,用来提供IPC进程间的通信功能。
• 蓝牙驱动(Bluetooth Driver)
基于IEEE 802.15.1标准的蓝牙无线传输技术。
• WiFi驱动(WIFI Driver)
基于IEEE 802.11标准的WiFi驱动。
• 照相机驱动(Camera Driver)
常用的基于Linux的照相机驱动。