Android是采用层次化系统架构,官方公布的标准架构图如下图:
Android由底往上分为4层:Linux内核层(Linux Kernel),硬件抽象层(HAL),系统运行时库层(Native C/C++ Libraries和Android Runtime),应用程序框架层(Java API Framework),应用程序层(System Apps)
Linux内核层:
Android平台的基础是Linux内核,例如,Android Runtime(ART)依靠Linux内核来执行底层功能,例如线程和底层内存管理
Android内核对Linux内核进行了增强,增加一些面向移动计算的功能,如:共享内存,低内存管理器,轻量级的进程间通信Binder机制等。下面列举一些Android内核的主要驱动模块:
Android电源管理(Power Management):基于linux电源管理系统的,轻量级的电源管理驱动
音频驱动器(Audio Drivers):音频管理驱动
Binder(IPC):binder属于一个驱动,进程间通信的方式之一
Display Drivers:显示驱动,对图形显示提供桥梁
Keypad Drivers:键盘驱动,对用户输入提供平台
Bluetooth Drivers:蓝牙驱动
Share Memory Drivers:为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制
USB Drivers:USB驱动
WIFI Drivers:wifi驱动
硬件抽象层(HAL):
根据字面的意思:就是对硬件设备的具体实现加以抽象,硬件抽象层的作用是将android的应用框架层与linxu系统内核的设备驱动隔离,使应用程序框架的开发独立于具体的驱动程序,android减少对linux的依赖。HAL提供标准界面,向更高级别的Java API框架显示设备硬件功能,HAL包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,如相机或者蓝牙模块。当框架API要求访问设备硬件时,Android系统将为该硬件加载库模块。
系统运行库层:
原生C/C++库:
WebKit:Web浏览器的软件引擎
OpenMAX AL:应用级的多媒体回放和记录接口,用在移动式嵌入式设备
Libc:继承BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备
Media Framework:基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
OpenGL ES:基于OpenGL ES 1.0API标准实现的3D跨平台图形库
运行时
Core Libraries:核心库,提供Android的核心API,如android.os,android.net,android.media等
Dalvik虚拟机:Dalvik虚拟机基于apache的Java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。当然从Android4.4开始出现了ART(android time),这是一种用来代替Dalvik的新型环境
应用程序框架层(JAVA API Framework)
丰富,可扩展的试图系统,可用以构建应用的UI,包括列表,网格,文本框,按钮甚至可嵌入的网络浏览器
活动管理器(Activity Manager):管理各个应用程序生命周期,为所有程序的窗口提供交互的接口
窗口管理器(Window Manager):对所有开启的窗口程序进行管理
内容提供器(Content Provider):提供一个应用程序访问另一个应用程序数据的功能,实现应用程序间数据共享
视图系统(View System):创建应用程序的基本组件,列表,网格,文本框,按钮
通知管理器(Notification Manager):应用程序可以在状态栏显示自定义的客户提示信息
包管理器(Package Manager):对应用程序进行管理,提供的功能如安装应用程序,卸载应用程序
资源管理器(Resource Manager):提供非代码资源提供应用程序使用
位置管理器(Location Manager):提供位置服务
电话管理器(Telephony Manager):管理所有的移动设备功能
应用程序层:
Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用),平时开发中最常接触和用到的一定是application层。
以上就是对Android的基本架构分析。