Android 平台架构

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

The Android software stack

Linux 内核

Android平台的基石就是Linux内核。比如,Android运行时(ART)的一些基本功能如线程管理、低内存管理都依赖于Linux内核。
Android利用Linux内核提供的关键安全特性,允许设备制造商为一个著名的内核开发硬件驱动。

硬件抽象层(HAL)

硬件抽象层提供标准接口,并暴露设备的硬件功能给高一级的Java API框架。硬件抽象层由多个库模块组成,每一个都为特定类型的硬件组件实现了一个接口,比如相机或者蓝牙模块。当框架层的api调用设备硬件时,Android系统会加载那个硬件组件的库模块。

Android运行时

运行着Android5.0及以上的设备,每一个应用运行在它自己的进程中,拥有它自己的运行时实例。运行时是为了在低内存设备上通过执行DEX文件运行多个虚拟机。DEX文件是为Android特殊设计的一种字节代码格式,为最小内存占用进行了优化。构建工具链如Jack,将Java文件编译为DEX字节代码,可以在Android平台运行。
ART的主要特性如下:

  • AOTJIT编译
  • 优化垃圾回收
  • 支持更好地调试,包括一个专门的采样分析器、详细的异常诊断和崩溃报告,而且可以设置断点监视指定域

Android5.0之前,Android运行时是Dalvik。如果你的应用可以在ART上运行良好,那么在Dalvik上也会很好的运行,反过来则不一定。
Android也包括一些核心的运行时库,提供了Java API框架层使用的Java语言编程的大部分功能,包括Java8的特性。

原生C/C++库

很多核心的Android系统组件和服务,如ARTHAL,都是用原生代码编写的,要求用CC++编写原生库。Android平台提供了Java框架的API,可以为应用提供这些原生库中的一些功能。比如,你可以通过Android框架的Java OpenGL API调用OpenGL ES在你的应用中添加对2D3D图形的绘画操作的支持。

Java API 框架

通过使用Java语言编写的API,你可以使用Android系统所有的特性。这些API构成了你创建Android应用所需的基础,简化了核心模块化的系统组件和服务的复用,包括如下:

  • 丰富的、可扩展的View系统,你可以用来创建应用的UI,包括list、grid、text boxes、buttons,甚至是嵌入的web浏览器。
  • 资源管理器,提供了对非代码资源的调用,如,本地化字符串,图像资源以及布局文件等
  • 通知管理器,使所有的应用都可以在状态栏显示定制的alerts
  • Activity管理器,管理应用的声明周期,并提供一个公共导航回退栈
  • Content Provide,使应用获取其他应用的数据,如联系人,或者分享他们自己的数据

开发者和系统应用拥有完全一样的框架API

系统应用

Android自带一些核心应用,如邮件、信息、日历、网络浏览器和联系人等。平台提供的应用和用户选择安装的应用有相同的状态。因此,一个安装的第三方应用可以作为用户默认的浏览器、默认信息程序以及默认输入法。
系统应用程序既可以作为用户的应用程序,也可以提供开发人员从自己的应用程序访问的关键功能。比如,如果你的应用想发送一条短信,你不必自己编写这个功能而是调用任何一个已经安装的SMS应用给你指定的收件人发送短信

你可能感兴趣的:(Android 平台架构)