大家好,我是森森
这节课我简单给大家介绍一下安卓系统的体系结构.
首先声明一个视频中的错误,Audio Driver是音频驱动,翻译错了.
最开始,安卓大体上分为四层,如图:
从下往上分别是:Linux内核层,系统运行库层,应用程序框架层,应用程序层.
Linux内核层:是一些驱动,图上从左到右,从上到下分别是:显示驱动,相机驱动,蓝牙驱动,闪存驱动,binder驱动,usb驱动,键盘驱动,WiFi驱动,音频驱动,电源管理器
系统运行库层:主要是Android RunTime(安卓运行时)以及一些类库.左边的类库,从左到右分别是:显示相关,多媒体播放框架,嵌入式的数据库,图形显示高效引擎,字体,浏览器内核(它对HTML5的支持比较强大),图形显示相关,安全连接加密相关,标准的C代码的库.Android RunTime主要包含一些核心库,该核心库提供了JAVA编程语言核心库的大多数功能。另外就是Dalvik虚拟机,每个应用程序对对应一个Dalvik虚拟机实例.Android RunTime,主要是给应用程序运行提供了一个环境和条件.整个这一层的引入,方便与底层的内核进行交流和操作.
应用程序框架层:框架就是把一些常用的操作或者经常编写的一些逻辑给封装好,供上层应用来调用.里边代码都是由Java编写,Java语言通过特殊的规范,可以与第三层library层进行交互,有了这个框架,安卓系统才可以用Java语言来编程.主要包含一些核心的API,Activity Manager ,管理手机的每个页面和活动,Window Manager,管理手机的窗体,Content provider ,主要用于把应用程序的数据暴露给另外一个应用程序;View System,显示系统;Notification Manager,通知管理器;Package Manager,所有应用程序包的管理器,Telephony Manager,电话管理器;Resource Manager,应用程序资源管理器,Location Manager,手机位置管理器,可以得到手机所处的经纬度;XMPP Service,这主要是做即时通信的一些服务.我们平时开发就是调用这些API.
应用程序层:就是平常我们编写的一些应用程序
当然手机也有一些自带的应用,如桌面,联系人,短信等等,这是谷歌已经写好了,并且也已经把源码开放给我们了,有需要的朋友可以找我要.
下面通过一个例子来解释一下这四层之间的关系,假如大家要开发一个闹钟,如果每天早上七点,我想让闹钟播放一个闹铃,叫我起床,那我肯定先编写一个应用,它要知道早上七点要来一个消息,这时上层代码首先找到Notification Manager,知道上午七点要发来一个通知,这个消息到来之后要有一个铃声播放出来,这个铃声其实靠的是第三层Media Framework播放出来,多媒体这个框架调用声卡,然后声卡驱动喇叭,去播放音乐,这个声卡则需要Audio Driver去驱动喇叭,我们就能听到了,这就是一个自上而下完整调用过程,上层写一个Java代码,利用API调用底层代码去驱动这个喇叭播放声音.
现在,又加了一层,硬件抽象层,如图:
硬件抽象层(Hardware Abstraction Layer),简称为HAL,是在具体的硬件平台上抽象出来的一个硬件接口层,这个接口层负责实现具体硬件平台的功能和控制,同时又为其它软件模块提供统一的API接口。其目的是要保护手机厂商的利益,因为HAL是遵循GNU协议的,我是开源的,你用我,你必须也得开源,而安卓遵循的是阿帕奇协议,我开源,你用我可以不开源.安卓把这层给加进来,那么手机厂商就可以不开源了,这样,他们的利益就得到了保护.
本人QQ号,525902456,如有错误,欢迎指出,希望能交到更多朋友,交流技术.