Android系统架构

Android 系统采用一种被成为“软件叠层(softwareStack)”的方式进行构建,这种软件叠层构建使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或者层下发生改变时,上层应用程序无须改变。

Android系统框架由底层往上分别为:

  1. Linux内核层 (Linux Kernel)
  2. 系统运行时库层 (Libraries 和 Android Runtime)
  3. 应用程序框架层(Application Framework)
  4. 应用程序(Application)

这里写图片描述


Linux内核层

Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备的驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。

发展历史:

Android4.0版本之前基于Linux2.6系列内核;
4.0及以后的版本使用更新的Linux3.X内核,并且与两个开源项目有了互通。

Linux3.3内核中正式包括了一些Android代码,可以直接导进Android
Linux3.4增添电源管理等更多的功能,以增加与Android硬件的兼容性,使Android在更多设备上得到支持。

Android内核对Linux内核进行了增强,增加了一些面向移动计算的特有功能。
例如,低内存管理器LMK(Low Memory Keller),匿名共享内(Ashmem),以及轻量级的进程间通信Binder机制等。这些内核的增强是Android在继承Linux内核安全机制的同时,进一步提成了内存管理,进程间通信等安全性。

下边列举了Android内核的主要驱动模块:

驱动名称说明
Android电源管理器(Power Management)针对嵌入式设备的,基于标准Linux电源管理系统,轻量级的电源管理驱动
低内存管理器(Low Memory Keller)可以根据需要杀死进程来释放需要的内存,扩展了Linux的OOM机制,形成了独特的LMK机制
匿名共享内存(Ashmem)为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制
日志(Android Logger)一个轻量级的日志设备
定时器(Android Alarm)提供了一个定时器用于把设备从睡眠状态唤醒
物理内存映射管理器(Android PMEN)DPS及其他设备只能工作在连续的物理内存上,PMEM用于向用户空间提供连续的物理内存区域映射
Android定时设备(Android Timed Device)可执行对设备的定时控制功能
Yaffs2文件系统Android采用大容量的NAND闪存作为存储设备,使用Yaff2作为文件系统管理大容量MTD NAND Flash;Yaff2占用内存小,垃圾回收简洁迅速
Android Paranoid网络对Linux内核的网络代码进行了改动,增加了网路认证机制。可在IPV4,IPV6和蓝牙中设置,有ANDROID_PARAANOID_NETWORK宏来启用此特性

硬件抽象层(Hardware Abstract Layer,HAL)

内核驱动和用户软件之间还存在一层所谓的硬件抽象层(Hardware Abstract
Layer,HAL),它是对硬件设备的具体实现加以抽象。HAL没有在Android的官方架构图中标明,下面标出了硬件抽象层在android系统中的位置。

这里写图片描述

鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用架构与Linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。

HAL由此而生,它使对Linux内核驱动的封装,将硬件抽象化,屏蔽掉底层实现的代码。

HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间内核空间两个层面;

Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。


系统运行库层

官网的系统架构图中,位于Linux内核层之上的系统运行库层是应用程序框架的支撑,为Android系统中的各个组件提供服务

  • 系统运行库
  • Android运行时
  • 系统运行时

系统类库大部分由c/c++编写,所提供的功能通过Android应用程序框架为开发者所使用。主要的系统类库及说明如下表:

系统类库名说明
Surface Manager执行多个应用程序时,管理子系统的显示,另外对2D、3D图形提供支持
媒体库Media Framework基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回访,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
LibWebCore一个最新的Web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图
SQLite本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API
OpenGL/ES基于OpenGL ES 1.0API标准实现的3D跨平台图形库
FreeType用于显示位图和矢量字体
系统C库 Libc(bilnic/ibc)继承自BSD的C函数bionic libc,更适合基于嵌入式Linux的移动设备
SSL安全套接层,是为网络通信提供安全及数据完整性德一种安全协议

Android NDK 除上表列举的主要系统类库之外,Android NDK(Native Development
Kit),即Android原生库,也十分重要。NDK为开发者提供了直接使用Android系统资源,并采用c或c++编写程序的接口。因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。实际上,*NDK提供了一些了从C或C++生成源代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,能将自动生成的动态库和java应用程序一起打包成应用程序包文件,即.apk文件。*
注意:
使用原生库无法访问应用框架从API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。

  • Android 运行时

Android运行时包括

核心库
Dalvik虚拟机

核心库:核心库提供Sun的Java核心函数库以及Android核心函数库的所有功能。
Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离和线程调试管理,安全和异常管理,垃圾回收等中重要功能。
本质而言,Dalvik虚拟机并非传统意义上的java虚拟机(JVM)。Dalvik虚拟机不仅不按Java虚拟机的规范来实现,而且两者兼容。


Dalvik虚拟机和标准Java虚拟机主要区别:

  • Dalvik基于寄存器,而JVM(Java Virtual Macheine)基于栈。
    • 一般认为,基于寄存器的实现虽然更多依赖于具体CPU结构,硬件通用性稍差,但其使用等长指令,在效率速度上较传统JVM更具有优势。
  • Dalvik虚拟机可以同时运行多个虚拟机实例
    • Dalvik虚拟机经过优化,允许在有限的内存中同时高效的运行多个虚拟机实例,并且每个Dalvik虚拟机应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例。Android这种基于Linux的进程“沙箱”机制,是整个案情设计的基础之一。
  • Dalvik从.dex(Dalvik Executable)文件中读取指令和数据,进行解释和运行。
    • 一般编写好的java程序编译后会产生class文件(或称Bytecode),而且由JVM运行;但是Android应用Dalcik VM,所运行的的文件是dex文件,而非class文件。
    • 在Dalvik VM运行dex文件之前,必须使用Android开发工具(Android SDK)内的dx工具将class文件转化成为dex文件。然后交给Dalvik VM运行
    • dex文件比class文件更精简、运行性能更佳,而且更省电。

应用程序框架层

当我们开发Android应用程序时,就是面向底层的应用程序框架层进行的。从这个意义上来看,Android系统上的应用程序是完全平等的,不管是Android系统提供的程序,还是普通开发者提供的程序,都可以访问Android提供的API框架。

应用程序框架层可作为应用程序开发的基础之外,也是软件复用的重要手段,任何一个应用程序都可以发布他的功能模块——只要遵守了框架的约定,那么其他应用也可以使用这个功能模块。

下表列出应用程序层包括的模块如表:

应用程序框架模块名称功能
活动管理器(Activity Manager)管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的借口
窗口管理器(Window Manager)对所有开启的程序窗口进行管理
内容提供者(Content Provider)提供一个应用程序访问另一个应用程序数据的功能,或者实现程序之间的数据共享
视图系统(View System)创建应用程序的基本组件,包括列表(List),网格(grids),文本框(text boxes),按钮(buttons),还有可嵌入的web浏览器等。
通知管理器(Notification Manager)使应用程序可以在状态栏中显示自定义的客户提示信息
包管理器(Package Manager)对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
资源管理器(Resource Manager)提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
位置管理器(Location Manager)提供位置服务
XMPP服务是Google在线即时交流软件中一个通用的进程,提供后台推送服务

从以上的模块可以看出,应用程序框架层实际上给开发者提供了一系列方便快件的模块框架,开发者利用此应用程序的框架,没有必要重复的复写轮子,例如,在使用button按钮组件的时候不需要考虑button具体的绘制问题,直接拿来用就好了,使得开发更加的方便快捷。


应用层
Android平台的应用层上包括系列的核心应用程序,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等等。或由java语言编写的运行于后台的服务程序。


关于ndk推介阅读链接:点这里

关于api与libraries疑问解答:点这里
An API is the documentation that accompanies a library to explain how to use the library (an example of this is the Android API listed above)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值