Android系统架构解析

作为一名Android 开发人员,了解Android的系统机制应该是一项基本功。
今儿得空,整理了一番。
官方给出的结构图如下:
Android系统架构

第一层:Linux内核层

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

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

Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。

Linux3.4将会增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持。

Android内核 对Linux内核进行了增强,增加了一些面向移动计算的特有功能。内核的增强使

Android在继承Linux内核安全机制的同时,进一步提升了内存管理,进程间通信等方面的安全性。

列举Android内核的主要驱动模块

驱动名称说明
Android电源管理(Power Management)针对嵌入式设备的,基于标准Linux电源管理系统的,轻量级的电源管理驱动
匿名共享内存(Ashmem)为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制
定时器(Anroid Alarm)提供了一个定时器用于把设备从睡眠状态唤醒
Android定时设备(Android Timed device)可以执行对设备的定时控制功能
Android Paranoid网络对Linux内核的网络代码进行了改动,增加了网络认证机制。可在IPV4,IPV6和蓝牙中设置,由ANDROID_PARANOID_NETWORK宏来启用此特性

第二层:系统运行库层

系统类库

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

系统类库名称说明
Surface Manager执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持
SQLite本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBC API
FreeType用于显示位图和矢量字体
SGL底层的2D图形引擎
SSL安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

除上表列举外,Android NDK(Native Development Kit)提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。

因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。
实际上,NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和java应用程序一起打包成应用程序包文件,即.apk文件

[注意:使用原生库无法访问应用框架层API,兼容性可能无法保障。而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性]
运行时

包含核心库Dalvik虚拟机两部分

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

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

大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以將 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有時必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。

Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

[本质而言,Dalvik虚拟机并非传统意义上的java虚拟机(JVM)。Dalvik虚拟机不仅不按照Java虚拟机的规范来实现,而且两者不兼容。]
Dalvik和标准Java虚拟机有以下主要区别
  • Dalvik基于寄存器,而JVM基于栈。一般认为,基于寄存器的实现虽然更多依赖于具体的CPU结构,硬件通用性稍差,但其使用等长指令,在效率速度上较传统JVM更有优势。
  • Dalvik经过优化,允许在有限的内存中同时高效地运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例,是整个安全设计的基础之一。
  • Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。
  • Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX); 第三方的应用程序则可在运行时在缓存中优化与保存,优化后的格式为DEY(.dey文件)。

第三层:应用程序框架层

类库,方便我们快速开发App重用组件,通过继承实现个性化的扩展。常用的模块如表:

应用程序框架层类库名称功能
活动管理器(Activity Mananger)管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
内容提供器(Content Provider)提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
通知管理器(Notification Manager)使应用程序可以在状态栏中显示自定义的客户提示信息
资源管理器(Resource Manager)提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
电话管理器(Telephony Manager)管理所有的移动设备功能

第四层:应用层

该层提供一些核心应用程序包,如短信、日历、地图、浏览器和联系人管理等。

还有一份文字描述继续细分的结构图

上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为「软件叠层架构」,叠层主要分成三层:操作系统、中间件、应用程序。

这里写图片描述

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

HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。

[更多了解]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值