作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc。

本文选自书客创作平台第112篇文章。阅读原文 。

【Android】系统构架_第1张图片 书客创作

身为一个Android开发者,如果对Android系统构架一点也不了解,怎么也说不过去。作为第一章节,我就取之大概,给大家提供基础性的讲解。

有人说Android系统架构一共四层,但是也有人说Android系统架构一共五层,这两种说法都没有错。Android的四层架构由高到底分别是:Android应用层,Android应用框架层,Android系统运行层和Linux内核层。而Android的五层架构,只是在Android系统运行层和Linux内核层之间多了一层硬件抽象层(HAL),HAL并没有在Android官方系统架构图中标明。

【Android】系统构架_第2张图片 系统构架图

所谓硬件抽象层(Hardware Abstract Layer,HAL)是对硬件设备的实现加以抽象,隐藏Android底层的硬件接口细节。通俗点说,HAL将Android的应用框架层与Linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,减少对Linux内核的依赖。

Android应用层

能与用户进行最直接的交互都能称之为Android应用层,虽然这句话说的并不是很贴切,但是很容易让人理解。例如:email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等都属于应用层程序,一般都是使用Java进行编写。

Android应用框架层

Android应用框架层为开发人员提供一系列API,这些API可以被应用程序进行调用,简化了组件的重用。

下面是这一层所提供的主要模块。

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

Android系统运行层

Android系统运行层分为两部分,分别是系统类库和Android运行时。

1、系统类库

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

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

除了以上类库之外,还有一个类库也相当重要,Android NDK(Native Development Kit),即Android原生库。NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。

2、Android运行时

Android运行时包含核心库和Dalvik虚拟机(5.0系统之后,Dalvik虚拟机被ART取代)两部分。

核心库提供了JAVA编程语言核心库的大多数功能,并提供Android的核心API,如android.os,android.net,android.media等。

Dalvik虚拟机并不是Java虚拟机(JVM),它们是有区别的。

  • Dalvik虚拟机是基于寄存器,而JVM基于栈。
  • 每一个Dalvik应用都是一个独立的Linux进程,都拥有一个独立的Dalvik虚拟机实例。简单点说,每开启一个Java程序,就有一个Dalvik虚拟机实例。
  • Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。同时,Dalvik的DEX文件还可以进一步优化,提高运行性能。通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX)。

Dalvik已经很不错了,为什么还会被ART取代呢?

ART的机制与Dalvik不同。在Dalvik环境下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率。而在ART环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用,这个过程叫做预编译(AOT,Ahead-Of-Time)。所以ART环境下,应用的启动和执行都会变得更快。

Linux内核层

Android的核心系统服务基于Linux内核,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。

结语:在Android实际开发当中,Application应用层操作最为之多,但是同样可以找到其他层次相关的东西,如SQLite,WebKit等。所以了解每一层是什么?有什么作用?还是很有必要的。

阅读原文


【Android】系统构架_第3张图片 微信公众号:书客创作

更多相关文章

  1. linux系统和android系统的区别
  2. 分别在Linux和Android中用C语言写系统日志
  3. Android系统中UID

随机推荐

  1. Android(安卓)Google Map实例 - 发布Andr
  2. 那些年,在Fragment中犯的错
  3. 一个APK反编译利器Apktool(android汉化)
  4. Android实现QQ分享及注意事项
  5. Android(安卓)10 开发亮点有哪些?
  6. Android的layout_weight属性释疑
  7. Android(Java):EditText相关
  8. 【Android】17.5 利用Messenger实现进程
  9. [android深入学习]android窗口管理机制
  10. Android开发学习笔记(八)Android应用界面编