Android是一个基于Linux内核的、开源的软件栈,为各种类型的设备而创建。
下图给出了Android平台的大致组成结构:

Linux 内核
Android平台的基石就是Linux内核。比如,Android运行时(ART)的一些基本功能如线程管理、低内存管理都依赖于Linux内核。
Android利用Linux内核提供的关键安全特性,允许设备制造商为一个著名的内核开发硬件驱动。
硬件抽象层(HAL)
硬件抽象层提供标准接口,并暴露设备的硬件功能给高一级的Java API框架。硬件抽象层由多个库模块组成,每一个都为特定类型的硬件组件实现了一个接口,比如相机或者蓝牙模块。当框架层的api调用设备硬件时,Android系统会加载那个硬件组件的库模块。
Android运行时
运行着Android5.0及以上的设备,每一个应用运行在它自己的进程中,拥有它自己的运行时实例。运行时是为了在低内存设备上通过执行DEX文件运行多个虚拟机。DEX文件是为Android特殊设计的一种字节代码格式,为最小内存占用进行了优化。构建工具链如Jack,将Java文件编译为DEX字节代码,可以在Android平台运行。
ART的主要特性如下:
-
AOT和JIT编译 - 优化垃圾回收
- 支持更好地调试,包括一个专门的采样分析器、详细的异常诊断和崩溃报告,而且可以设置断点监视指定域
在Android5.0之前,Android运行时是Dalvik。如果你的应用可以在ART上运行良好,那么在Dalvik上也会很好的运行,反过来则不一定。
Android也包括一些核心的运行时库,提供了Java API框架层使用的Java语言编程的大部分功能,包括Java8的特性。
原生C/C++库
很多核心的Android系统组件和服务,如ART和HAL,都是用原生代码编写的,要求用C和C++编写原生库。Android平台提供了Java框架的API,可以为应用提供这些原生库中的一些功能。比如,你可以通过Android框架的Java OpenGL API调用OpenGL ES在你的应用中添加对2D和3D图形的绘画操作的支持。
Java API 框架
通过使用Java语言编写的API,你可以使用Android系统所有的特性。这些API构成了你创建Android应用所需的基础,简化了核心模块化的系统组件和服务的复用,包括如下:
- 丰富的、可扩展的
View系统,你可以用来创建应用的UI,包括list、grid、text boxes、buttons,甚至是嵌入的web浏览器。 - 资源管理器,提供了对非代码资源的调用,如,本地化字符串,图像资源以及布局文件等
- 通知管理器,使所有的应用都可以在状态栏显示定制的
alerts -
Activity管理器,管理应用的声明周期,并提供一个公共导航回退栈 -
Content Provide,使应用获取其他应用的数据,如联系人,或者分享他们自己的数据
开发者和系统应用拥有完全一样的框架API
系统应用
Android自带一些核心应用,如邮件、信息、日历、网络浏览器和联系人等。平台提供的应用和用户选择安装的应用有相同的状态。因此,一个安装的第三方应用可以作为用户默认的浏览器、默认信息程序以及默认输入法。
系统应用程序既可以作为用户的应用程序,也可以提供开发人员从自己的应用程序访问的关键功能。比如,如果你的应用想发送一条短信,你不必自己编写这个功能而是调用任何一个已经安装的SMS应用给你指定的收件人发送短信