博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Android的设计与实现:卷I》——第1章 1.2Android体系结构
阅读量:5814 次
发布时间:2019-06-18

本文共 2982 字,大约阅读时间需要 9 分钟。

1.2 Android体系结构

要深入学习Android,必须理解Android的体系结构,本节将分别从静态和动态两种视角对Android的体系结构进行介绍。

1.2.1 静态视角的体系结构

Android采用了分层的体系结构,各层的结构和功能非常清晰。从上往下看,Android分为四层,分别是:1)应用层,2)应用框架层,3)Android运行环境和系统运行库层,4)Linux内核层,如图1-1所示。

image

1.应用层

应用层位于Android体系结构的最上层。Google在Android中内置了一些核心应用程序,如图1-1所示,有主屏幕(Home)、联系人(Contacts)、电话(Phone)、浏览器(Browser),另外还有日历(Calendar)、地图、SMS短消息程序、图库(Gallery)、输入法、闹钟(Alarm)等。开发者还可以使用应用框架层提供的API 编写自己的应用程序,这也是Android 开源的巨大优势之一。

应用程序主要用Java语言编写,自Android 1.5开始,Google提供了NDK开发工具,可以方便地开发基于JNI的应用程序。NDK便于开发者开发需要基于C/C++才能实现的功能,也可以提高程序执行效率。

2.应用框架层

应用框架层是Android体系结构的第二层,它不仅为应用层提供API,而且是一种重要的机制。这种机制为应用层提供了可以复用的组件,提供了应用层开发的规范,屏蔽了应用层与底层交互的复杂性。应用框架层提供的API并不完全对第三方应用程序开放,有一部分API是隐藏的。开发第三方应用程序需要依赖Android SDK提供的API,它只是应用框架层API的一个子集。

本层主要是使用Java和JNI实现的,位于该层的主要组件如表1-2所示。

image

3.Android运行环境和系统运行库层

Android运行环境和系统运行库层位于Android体系结构的第三层。本层相当于中间件层,为应用框架层提供服务,它分成两个部分:一部分是系统运行库,包含各种系统库和第三方库;另一部分是Android 运行环境,这里主要是使用C++和C实现的。

应用框架层为应用层提供的功能,在底层大多是由系统运行库实现的。Android应用层使用的多媒体、浏览器、数据库、图形引擎等,其功能实现均位于该层。

Android应用层的Java程序运行在虚拟机中。Android提供了Dalvik虚拟机以支持Java运行环境。

系统运行库的主要组件如表1-3所示。

image

Android运行环境的主要组件如表1-4所示。

image

4.Linux内核层

Android 自ICS开始基于Linux 3.0内核,充分利用了Linux内核基于权限的安全模型、内存管理、进程管理、网络协议栈和驱动模型等优点,并在Low Memory Killer、进程间通信(Binder)、电源管理以及日志系统(Logger)等方面引入了不同于标准Linux的全新实现。Android对标准Linux内核做了大量剪裁和优化,其修改主要集中在以下方面:

弃用标准Linux的GUI系统。

采用更有效率的Bionic Libc库代替glibc库。

基于ARM架构增加了Gold-Fish平台。

专有的驱动程序:Binder、Logger、PowerManager、Timed GPIO、Alarm、Ashmem、RAM Console。

Android对标准Linux内核做了很多修改,有兴趣的读者可以自行比较这两部分源代码的区别。

Linux Kernel遵守GPL license,Android遵守Apache license。为了避开GPL license完全开放源码的规定,保护硬件厂商的驱动程序,Android把控制硬件的操作放到了Android HAL(Hardware Abstraction Layer,硬件抽象层)中,在内核驱动中只有简单的读写寄存器的操作。遵守Apache license,硬件厂商可以只提供二进制代码,而不需要提供源码。HAL层并没有在官方的体系结构图中体现出来,实际上它位于Linux内核层和Android运行环境和系统运行库层之间。

Patrick Brady 在2008年Google I/O大会上发表了题为“Anatomy & Physiology of an Android”的演讲,他在演讲中提出了HAL层的概念,如图1-2所示。

image

注意 引入HAL层,可以使Android与Linux的耦合度更低,减少Android对Linux内核和驱动的依赖,方便系统移植和接口开发。

熟悉了Android的四层体系结构后,有必要对一些容易混淆的概念加以界定和区分。这里涉及的概念有应用框架层、框架层和frameworks。

应用框架层:特指Android四层体系结构中的Application Framework。应用框架层不仅为应用层提供API和UI控件,而且为应用层提供了一套代码设计的模式。引入应用框架层后,应用层被浓缩为Activity、Service、Content Provider和Broadcast Receiver四大组件。

框架层:严格意义上讲,并没有一个明确的界限去定义框架层。从Android体系结构的视角,可以把应用框架层、Android运行环境和系统运行库层以及Binder都归入框架层的范畴。从源代码的视角,可以把dalvik、frameworks、external、libcore、system这几个包的内容归入框架层的范畴。本书中框架层的概念便基于上述定义。

frameworks:一般指Android源码中的frameworks包。

1.2.2 动态视角的体系结构

静态的体系结构是从横向分层的角度诠释Android是什么。如果静态的体系结构不足以让读者理解Android的运行机制,我们可以看看Google工程师Sans Serif是怎么描述Android体系结构的,如图1-3所示。

image

注意 这里内容来源于Sans Serif的一篇博文,原文网址如下: www.tbray.org/ ongoing/When/201x/ 2010/11/14/What-Android-Is。

在图1-3中,将Android划分为两个交互的空间:用户空间和内核空间。

1.用户空间

用户空间分为两个交互的子系统:Native子系统和Java子系统。两个子系统通过JNI技术连接在一起,建立在内核空间之上。

Native子系统主要由NDK开发的App、应用框架层Native部分和标准库C/C++部分组成。

Java子系统主要由SDK开发的App、系统内置App、应用程序框架层Java部分、标准库的Java接口组成。

运行时,Java应用程序调用应用框架层的接口使用标准库提供的服务。整个系统的运行环境和进程管理便由Dalvik和Linux Kernel负责。

2.内核空间

内核空间分为两部分:Linux内核和Android扩展支持,用于完成操作系统运行支持。其中Android扩展部分包括Binder、Logger、OOM等机制。

熟悉了Android的体系结构,接下来我们就要下载Android源码看个究竟。

转载地址:http://zjxbx.baihongyu.com/

你可能感兴趣的文章
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
IntPtr 转 string
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>
【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
查看>>
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
查看>>
七大关键数据 移动安全迎来历史转折点
查看>>
在AngularJS中学习javascript的new function意义及this作用域的生成过程
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
1、下载安装scala编译器(可以理解为scala的jdk),地址:http://www.scala
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>