《Android的设计与实现:卷I》——第1章 1.2Android体系结构

简介: 本节书摘来自华章出版社《Android的设计与实现:卷I》——第1章,第1.2节。作者: 杨云君著.更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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的一篇博文,原文网址如下:http:// 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源码看个究竟。

相关文章
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
Java Linux API
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
#1,Android 体系结构 2000字简介 入门Android(Studio)开发
|
安全 Java 编译器
Android逆向 | 基础知识篇 - 03 - 关于 Android 体系结构的学习
Android逆向 | 基础知识篇 - 03 - 关于 Android 体系结构的学习
|
缓存 JSON Java
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
438 1
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
534 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
242 0
android 多级下拉菜单实现教程 greendao使用
|
存储 API Android开发
深入剖析Android四大组件(四)——Messenger实现Android IPC
深入剖析Android四大组件(四)——Messenger实现Android IPC
146 2
|
监控 前端开发 Java
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
452 0