基于Android官方文档学习翻译。

Android是一个基于Linux的开源系统,适用于各种外形的设备。本篇文章翻译自官方文档介绍了Android系统的整体架构。

下图显示了Android平台的主要组件:

Linux内核

​ Android系统的底层是依赖于Linux内核。例如,Android运行环境(ART)依赖于Linux内核的底层功能,如线程和底层内存的管理。

​ Linux内核允许Android使用重要的安全特性,并允许设备制造商为一个知名的内核开发硬件驱动程序。

硬件抽象层(HAL)

​ 硬件抽象层(HAL)提供了将设备硬件功能暴露给更高级别的Java API框架的标准接口。 HAL由多个库模块组成,每个库模块实现用于特定类型的硬件组件(例如相机或蓝牙模块)的接口。 当框架API被调用访问设备硬件时,Android系统将加载该硬件组件的库模块。

Android运行环境

​ 对于运行Android版本5.0(API level 21)或者更高版本的设备,每个应用程序都运行在其自己的进程里,同时拥有自己的Android运行环境实例。ART被用来在低内存设备上执行DEX文件运行在多个虚拟机中而编写的,DEX文件是专为Android设计的专为最小内存占用而优化的字节码格式。构建工具链,如Jack,将Java源代码编译成DEX字节码,可以在Android平台上运行。

ART的一些主要特征包括:

  • 预先编译(AOT)和即时(JIT)编译
  • 优化垃圾回收(GC)
  • 更好的调试支持,包括专用的采样分析器,详细的诊断异常和崩溃报告,以及设置监视点以监视特定字段的能力

​ 在早于Android5.0版本(API 21)之前,Dalvik是Android的运行环境。如果你的应用程序可以很好的运ART上,那么他应该也可以在Dalvik上很好的运行,但是反之则不然。

C/C++原生本地库

​ 许多Android系统组件和服务的核心,例如ART和HAL,都是使用C/C++的本地库代码构建的。Android平台提供了一些Java框架的API,用来向应用程序公开一些本地库的功能。例如,你可以通过Android的Java OpenGL API框架来访问OpenGL ES,从而支持应用程序对2D和3D图形的绘制和操作。

​ 如果你正在开发需要C/C++代码的应用程序,你可以使用Android NDK从你的C/C++代码来访问这些本地平台库。

Java API 框架

​ 您可以通过以Java语言编写的API来使用Android操作系统的整个功能集。这些API的建立是通过简化核心的重用,模块化的系统组件和服务,其中包括以下内容来创建Android应用的基石:

  • 丰富且可扩展的View系统,可用于构建应用程序的UI,包括列表,网格,文本框,按钮,甚至可嵌入式Web浏览器
  • 资源管理器,提供对非代码资源(如本地化字符串,图形和布局文件)的访问
  • 通知管理器,可让所有应用在状态栏中显示自定义提醒
  • 一个Activity Manager,用于管理应用程序的生命周期,并提供通用的导航返回堆栈
  • Content Providers(内容提供者),可让应用程序访问其他应用程序(例如联系人)的资料,或是分享自己的资料

开发人员完全可以通过访问标准的API框架来使用Android系统应用。

系统应用程序

​ Android提供了一套核心应用程序,用于电子邮件,短信,日历,互联网浏览,联系人等。 该平台附带的应用在用户选择安装的应用之间没有特殊状态。 因此,第三方应用程序可以成为用户的默认网络浏览器,短信通讯录,甚至默认键盘(有些例外情况,例如系统的设置)。

​ 系统应用程序既可以作为用户的应用程序,也可以提供开发人员可以从自己的应用程序访问的关键功能。 例如,如果您的应用想要发送短信,则不需要自行构建该功能,您可以调用已安装的任何短信应用,向您指定的收件人发送短信。