2.安卓的系统架构

大学之道,在明明德,在亲民,在止于至善。

 知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。

 物有本末,事有终始,知所先后,则近道矣。 ------《大学》

能够知其所止,止于至善,然后意志才有定力;意志有了定力,然后心才能静下来,不会妄动;能做到心不妄动,然后才能安处境随遇而安;能够随遇而安,然后才能处事精当思虑周详;能够思虑周详,才能得到至善的境界。 


Android架构解析

Android分为四个层,从低到高分别是linux核心层、系统运行库层、应用程序框架层和应用程序层。在最底层,Android使用了Linux内核,从而能够利用起Linux已有的丰富的硬件支持(当然Android由于版权原因在Linux内核之上使用了完全不同的架构,现在已经被从Linux状态树上移出,算是完全脱离正式的Linux系统了)。在Linux内核之上,Android选择使用Java进行各项API的开发,因此制作了适宜移动端使用的Dalvik虚拟机(现在已被更快的ART所取代),从而向上提供系统运行库。再往上则是丰富的应用程序框架层,最上层则是丰富的应用程序;利用Java跨平台的性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有android系统的平台,这可以说是Android的精髓所在。

 

Android采用层次化系统架构,官方公布的标准架构如下图所示。

 

从上到下分别为:

应用程序层Applications

应用程序架构层Application Framework

系统运行时库层Libraries和Android Runtime

linux内核层Linux Kernel

 

我们分别为其进行解说:

应用层

Android应用层提供的服务即我们常说的应用,它是与用户直接交互的,如系统自带的日历、通话、短信、浏览器等以及我们在Android应用商店(不同的手机品牌叫法不一样)中下载的打飞机游戏、音乐软件等,其提供了实实在在的功能供用户使用。

 

 

应用程序框架层

应用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。具体包括的模块如表:

 

1.活动管理器Activity Mananger

管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口

 

2.窗口管理器Window Manager

对所有开启的窗口程序进行管理

 

3.内容提供器Content Provider

提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享

 

4.视图系统View System

创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons)可嵌入的web浏览器。

 

5.通知管理器Notification Manager

使应用程序可以在状态栏中显示自定义的客户提示信息

 

6.包管理器(Package Manager)

对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等

 

7.资源管理器(Resource Manager)

提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等

 

8.位置管理器(Location Manager) 提供位置服务

 

9. 电话管理器(Telephony Manager)  管理所有的移动设备功能

 

系统运行库层

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

系统类库

系统类库大部分由C/C++编写,所提供的功能通过Android应用程序框架为开发者所使用

Surface Manage   

执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持

 

Media Framework

基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM

 

SQLite 本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API

 

OpenGL|ES 基于OpenGL ES 1.0API标准实现的3D跨平台图形库

 

FreeType用于显示位图和矢量字体

 

WebKitWeb浏览器的软件引擎

 

SGL底层的2D图形引擎

 

Libc(bionic l ibc)继承自BSD的C函数库bionic libc,更适合基于嵌入式Linux的移动设备

 

SSL安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

 

运行时

Android运行时包含核心库和Dalvik虚拟机两部分。

核心库:核心库提供了Java5 se API的多数功能,并提供Android的核心API,如android.os,android.net,android.media等。

Dalvik虚拟机:Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。

本质而言,Dalvik虚拟机并非传统意义上的java虚拟机(JVM)。Dalvik虚拟机不仅不按照Java虚拟机的规范来实现,而且两者不兼容。

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

Dalvik基于寄存器,而JVM基于栈。一般认为,基于寄存器的实现虽然更多依赖于具体的CPU结构,硬件通用性稍差,但其使用等长指令,在效率速度上较传统JVM更有优势。

Dalvik经过优化,允许在有限的内存中同时高效地运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例。Android这种基于Linux的进程“沙箱”机制,是整个安全设计的基础之一。

Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。

Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX); 第三方的应用程序则可在运行时在缓存中优化与保存,优化后的格式为DEY(.dey文件)。

 

 

硬件抽象层

Android Linux内核层作为系统架构的最底层借助Linux内核服务实现硬件设备驱动,从而为上层提供诸如进程与内存管理、网络协议栈、电源管理以及驱动模型等功能,同时Linux内核也是硬件与软件之间的抽象层(Hardware Abstract Layer,HAL),它是对硬件设备具体实现的抽象,这样开发者就无需考虑系统底部的实现细节,提高开发效率了。

 

Linux内核层

Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。Linux3.4增添了电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持。直到现在最新的android6.0仍然继续延用着linux3.4.0,而linux最新的版本已经到了4.3系列,那么为什么android没有继续去更新Linux kernel的版本也是一个值得探讨的课题。 
Android内核 对Linux内核进行了增强,增加了一些面向移动计算的特有功能。例如,低内存管理器LMKLow Memory Keller),匿名共享内存Ashmem,以及轻量级的进程间通信Binder机制等。这些内核的增强使Android在继承Linux内核安全机制的同时,进一步提升了内存管理,进程间通信等方面的安全性。

 

Android电源管理(Power Management)

针对嵌入式设备的,基于标准Linux电源管理系统的,轻量级的电源管理驱动

 

低内存管理器(Low Memory Keller)

可以根据需要杀死进程来释放需要的内存。扩展了Linux的OOM机制,形成独特的LMK机制

匿名共享内存(Ashmem)

为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制

 

日志(Android Logger)

一个轻量级的日志设备

 

定时器(Anroid Alarm)  提供了一个定时器用于把设备从睡眠状态唤醒

 

物理内存映射管理(Android PMEM)

DSP及其他设备只能工作在连续的物理内存上,PMEM用于向用户空间提供 连续的物理内存区域映射

 

Android定时设备(Android Timed device)

可以执行对设备的定时控制功能

 

Yaffs2文件系统

Android采用大容量的NAND闪存作为存储设备,使用Yaffs2作为文件系统管理大容量MTD NAND Flash;Yaffs2占用内存小,垃圾回收简洁迅速。

 

Android Paranoid网络

Linux内核的网络代码进行了改动,增加了网络认证机制。可在IPV4,IPV6和蓝牙中设置,由ANDROID_PARANOID_NETWORK宏来启用此特性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值