1.1 Android平台架构

Android是一种基于Linux的开放源代码软件栈,其平台架构如图1-1所示。

图1-1 Android平台架构

(1)Linux内核层

Android平台的基础是Linux内核。Android Runtime(ART)依靠Linux内核来执行底层功能,如线程和底层内存管理。

使用Linux内核可让Android更安全,设备制造商可以在开源的内核上开发硬件驱动程序。

(2)硬件抽象层(HAL)

硬件抽象层(HAL)提供标准界面,向更高级别的Java API框架显示设备硬件功能。HAL包含多个库模块,其中每个库模块都为特定类型的硬件组件实现一个界面,如相机或蓝牙模块。当框架API要求访问设备硬件时,Android系统将为该硬件组件加载库模块。

(3)原生C/C++库与Android Runtime

① 原生C/C++库。

许多核心Android系统组件和服务(如ART和HAL)构建自原生代码,需要C和C++编写的原生库。Android平台提供Java API框架以向应用显示其中部分原生库的功能。例如,用户可以通过Android框架的Java OpenGL API访问OpenGL ES,以支持在应用中绘制和操作2D和3D图形。

如果使用C或C++类库,可以借助Android NDK直接访问这些原生平台库。

② Android Runtime(ART)。

Android Runtime是一种在Android操作系统上的运行环境,在Android 5.0及后续Android版本中作为正式的运行时库取代了以往的Dalvik虚拟机。ART能够把应用程序的字节码转换为机器码,是Android系统所使用的一种新的虚拟机。

ART的主要功能如下。

① 预先(AOT)和即时(JIT)编译。

② 优化的垃圾回收(GC)。

③ 更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置监视点以监控特定字段。

在Android 5.0版本(API级别21)之前,Dalvik是Android Runtime。如果用户的应用在ART上运行效果很好,那么它应该也可以在Dalvik上运行,但反过来却不一定。

Android还包含一套核心运行时库,可提供Java API框架使用的Java编程语言中的大部分功能,包括一些Java 8的语言功能。

(4)Java API框架层

用户可通过Java语言编写的API使用Android OS的整个功能集。这些API形成了创建Android应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务。

① 丰富、可扩展的视图系统。可用以构建应用的UI,包括列表、网格、文本框、按钮,甚至是可嵌入的网络浏览器。

② 资源管理器。用于访问非代码资源,如本地化的字符串、图形和布局文件。

③ 通知管理器。可让所有应用在状态栏中显示自定义提醒。

④ Activity管理器。用于管理应用的生命周期,提供常见的导航返回栈。

⑤ 内容提供程序。可让应用访问其他应用(如“联系人”应用)中的数据或共享自己的数据。

开发者可以完全访问Android系统应用使用的框架API。

(5)系统应用层

Android自带有一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。用户通过第三方平台下载的一些应用软件大都属于应用层。