Android系统架构

Post on Jul 01, 2021 by Wei Lin

概述

Android简介

Android 是由 Google 开发的一种移动操作系统,广泛应用于智能手机、平板电脑、智能电视、智能手表等移动设备和嵌入式系统中。它是基于 Linux 内核的开源操作系统,允许开发者自由定制和开发应用程序。


Android 的特点和优势包括:

(1) 开源性:Android 是一个开源操作系统,其代码完全开放,任何人都可以自由查看、修改和分发。

(2) 多样化:Android 支持多种硬件平台和设备,适用于智能手机、平板电脑、智能电视、汽车导航系统等多种设备类型。

(3) 应用丰富:Android 提供了丰富的应用市场(Google Play),用户可以从中下载和安装各种应用程序,满足各种需求。

(4) 可定制性:开发者可以基于 Android 源代码进行定制开发,以适应不同设备和市场需求。

(5) 强大的开发者支持:Android 提供了丰富的开发者工具和 API,开发者可以使用 Java、Kotlin 等编程语言开发 Android 应用程序。

(6) 多任务处理:Android 支持多任务处理,用户可以同时运行多个应用程序,并实现快速切换。

(7) 社交互动:Android 提供了丰富的社交互动功能,用户可以方便地分享内容、照片、位置等信息。


Android 的版本不断更新和升级,每个版本都引入了新的功能和改进。同时,Android 生态系统非常庞大,吸引了大量开发者和厂商参与,使得 Android 成为全球智能手机市场的主导操作系统。由于其开放性和多样性,Android 为开发者和用户提供了丰富的选择和自由度,成为全球最受欢迎的移动操作系统之一。

Android架构介绍

Android的架构是分层的,每一层都有明确的分工。Android本身是一套软件堆叠(Software Stack),或称为”软件叠层架构”,叠层主要分成三层:操作系统、中间件、应用程序,即从内核驱动到应用级APP。

Android架构1.png

源码目录

Android架构2.png

Android系统目录

Android系统运行时手机中的目录:

Android架构3.png

Android架构

Linux 内核

Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,如线程和内存管理。

Linux Kernel作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。Linux 内核也包含设备制造商的硬件驱动程序。

硬件抽象层 (HAL)

硬件抽象层 (HAL) 提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。

Android Runtime

Android应用程序时采用Java语言编写,程序在Android Runtime中执行,Android Runtime又分为ART虚拟机和Core Libraries(核心库)两部分。

注:Android Runtime位于源码的art目录中。

ART虚拟机

5.0系统之后,Dalvik虚拟机被ART取代。


(1) Dalvik虚拟机

相较于JVM虚拟机,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。


(2) ART虚拟机

而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

核心库

核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如:android.os、android.net、android.media等。这样开发者可以使用Java语言来编写Android应用。

Native C/C++ Libraries

也称作NDK(即Native Development Kit),系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库。


NDK中的工具:

工具 说明
WebKit 一套网页浏览器的软件引擎
OpenMAX AL 一套嵌入式的多媒体应用标准
Libc 从BSD继承来的标准C系统函数库,专门为基于Embedded Linux的设备定制
Media Framework 多媒体库,基于PacketVideo OpenCore,支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM
OpenGL ES 根据OpenGL ES 1.0API标准实现的3D绘图函数库
Surface Manager 执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成
SQLite 小型的关系型数据库引擎
SGL 底层的2D图形渲染引擎
SSL 在Andorid上通信过程中实现握手


NDK与JNI(Java Native Interface,即 Java 本地接口)区别:

  • JNI使得Java与其他类型语言(如 C、C++)交互。也就是在 Java 中调用 C/C++ 代码,或者在 C/C++ 中调用 Java 代码。JNI 是 Java 的,和 Android 无关。
  • 而NDK 不仅实现了JNI中与C/C++的交互,还是一种开发工具集。

Java API Framework

​ 也称作应用框架层、Framework层。

​ 为开发人员提供了可以开发应用程序所需要功能的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。

​ 这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:

组件及服务 作用
ContentProviders 使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据
ActivityManager 管理四大组件生命周期
WindowManager 管理所有的窗口
Package Manage 用来管理 Android系统内的程序
NotificationManager 管理状态栏中显示自定义的提示信息
ResourceManager 提供非代码资源的访问,如本地字符串、图形和布局文件
LocationManager 提供位置服务
TelephonyManager 提供电话相关功能服务
其它

Applications(应用程序)

这里就是普通用户可见的层级。软件开发者通过调用Android SDK实现需要的软件功能。