Android系统采用的分层的架构的思想,架构清晰,层次分明,协同工作,从上到下分别是:应用层、应用框架层、系统运行库层和Linux内核层。
应用程序层:
这个层主要指的就是用java语言编写的运行在虚拟机上的程序,Google在最开始时就 在android系统中捆绑了一些核心的应用(核心应用的编写必须使用应用层序框架层的API框架),例如你android手机中的图库、SMS发送短消息的程序,通讯录等等。
应用程序框架层:
指的就是开发时所需要的API框架,开发人员是在遵守该框架的原则上,调用他们的,开发自己所需要的程序。第三方厂商可以修改框架,但是必须保证CTS测试通过,保证系统兼容性。
系统运行库层:
用于支持应用框架层的各个组件的。就是说当开发人员使用android应用框架层时,android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务。
linux核心层:
android的核心系统服务如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于Linux2.6内核,Linux内核同时也作为硬件和软件栈之间的抽象层。
在Core Libraries里不得不提HAL(Hardware AbstractLayer)硬件抽象层,从某些性质上说,HAL可以单独说是一个Layer,它相当于Linux系统中的用户C程序组,不仅要在Linux系统中完成C程序要完成的任务,还要向上给JNI提供完成这些工作的接口,实现从Java调用C获取Kernel系统服务的机制。
那么问题来了,为什么要有HAL?
传统的Linux系统把对硬件的支持完全实现在内核空间中,但是Linux内核源码要遵循GPL(GNU public License)协议,如果Android要在kernel中修改,就必须要将其开源,这会有损厂商利益,所以kernel层只提供可简单的硬件访问通道,用户空间以硬件抽象层HAL的形式来支持。