Android平台架构

  • 作者:Moilk
  • 最后编辑:2018年07月27日
  • 标签: android

平台架构

Android是一种基于Linux的开源软件栈,与IOS不同,Android是为了适配各种各样的设备和机型而创建的。如下所示为Android平台的主要组件:

Android软件栈

Linux内核

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

Linux内核为Android提供了一些重要的安全功能,其中包括:

  • 基于用户的权限模式
  • 进程隔离
  • 用于实现安全IPC的可扩展机制
  • 能够移除内核中不必要和可能不安全的部分

另外,使用Linux内核还让设备运行商更愿意开发并提供硬件的驱动程序。

硬件抽象层(HAL)

HAL层为JAVA API框架提供了调度硬件功能的标准接口,HAL层包含多个库模块(如相机模块和蓝牙模块),每个模块都为特定类型的硬件组件实现了一组软件接口。当java API框架要访问某个设备硬件时,Android系统将加载相应的库模块。

Android Runtime

对于运行Android5.0(API级别21)或更高版本的设备,每个应用都在其自己的进程中运行,并且有其自己的Android Runtime(ART)实例。ART可以在低内存的设备的运行多个虚拟机来执行DEX文件,DEX文件是一种专为Android设计,优化了内存使用的字节码格式。编译工具链(如Jack)会将Java源代码编译成DEX字节码,使其可在Android平台上运行。

ART的主要功能包括:

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

在Android5.0之前,Android使用的是Dalvik虚拟机,一个APP如果能在ART上运行良好,那么它应该也能在Dalvik上运行,但是反过来就不一定成立。

另外,Android还包含一套核心运行库,提供了Java编程缩需要的大部分功能,包括一些Java 8的功能,供上层Java API框架使用。

原生C/C++库

Android系统中的很多核心组件和服务(如ART和HAL)是用原生代码编写的,需要用C和C++编写原生库。不过其实,Android平台已经为一部分原生库提供了Java接口,比如说我们可以用Java OpenGL API访问OpenGL ES,在APP中绘制和操作2D和3D图形。

而如果开发的是需要C或C++代码的应用,我们可以使用Android NDK直接从原生代码中访问某些原生库。

Java API框架

Android开发者可以使用Java语言编写的API使用Android OS的整个功能集。这些API形成创建Android APP所需要的基石,主要包括以下组件和服务:

  • 用于构建UI的强大视图系统,如列表、网格、文本框、按钮甚至可嵌入的网络浏览器
  • 资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件等
  • 通知(Notification)管理器,可让所有应用在状态栏显示自定义通知
  • Activity管理器,用于管理应用的生命周期,提供常见的导航返回栈
  • 内容提供器(ContentProvider),可让应用访问其他应用中的数据或者把自己的数据共享给其他应用

开发者可以使用Android中系统应用所使用的全部API框架。

系统应用

Android系统自带了一套核心应用,如电子邮箱、短信、日历、浏览器和联系人等,这些自带的应用和用户自己安装的应用一样,没有什么特殊的,用户也可以让自己安装的应用成为系统默认的浏览器、短信APP甚至默认键盘(不过也有些例外,如系统的“设置”应用)。

系统应用可以当做用户应用一样来使用,另外,开发者还可以在自己编写的应用中访问这些系统应用的功能。比如说,如果你的应用要发短信,你不需要在自己的APP里边写代码实现发短信的功能,而是调用已安装的短信APP,向指定的接收者发送消息。

Knowledge from Android Developer.