Android系统采取的是分层的架构,根据官方文档提供的架构图,我们将android的系统架构分成5层,如图:
1.Application Framework (应用框架)
application framework 是应用开发者使用最多的部分,作为一个应用开发者,我们大部分情况下都是在跟它打交道,
当然对于硬件开发者来说,要想更好的编写驱动程序,需要意识到developer api应尽可能地直接映射到硬件抽象层(HAL)接口上。
2.Binder IPC (绑定进程间通信)
绑定进程间通信机制允许应用框架(application framework)直接跨越进程边界去调用android的系统服务代码,也就是说,高级别的framework apis能够跟android的系统服务直接进行交互,当然这一切的通信对于开发者来说都是不可见的,我们只知道它在运行
3. System services (系统服务)
我们平时调用的应用框架的很多api都是通过跟系统服务进行交互来访问底层的硬件的。
这些基于android系统服务都是模块化的,聚焦在组件上,例如窗口管理器(window manager)、搜索服务(search Service)、通知管理器(Notification Manager).
在android系统中包含两组服务,一组是系统服务,例如窗口管理器和通知管理器,
另一组是媒体服务,用来调用播放和录制多媒体。
4. Hardware abstraction layer (HAL 硬件抽象层)
Android的硬件抽像层是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Android framework与Linux kernel隔开,让Android不至过度依赖Linux kernel,以达成“内核独立”(kernel independent)的概念,也让Android framework的开发能在不考量驱动程序实作的前提下进行发展。
HAL stub是一种代理人的概念,stub是以*.so档的形式存在。Stub向HAL“提供”操作函数,并由Android runtime向HAL获取stub的操作,再回调这些操作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即module ID,就可以获取操作函数。
5. Linux Kernel (Linux 内核)
android 的底层是基于linux内核的,当然在在这个版本中新增了诸如wake locks,binder ipc driver以及其他一些对于移动嵌入式平台很重要的一些功能