【Android】基础架构(详细介绍)

目录

前言

一、Android

[1.1 什么是 Android?](#1.1 什么是 Android?)

[1.2 开发优势](#1.2 开发优势)

[1.3 特性](#1.3 特性)

[1.4 Android 应用程序](#1.4 Android 应用程序)

[1.5 Android 的历史](#1.5 Android 的历史)

[二、Android 架构](#二、Android 架构)

[2.1 Linux 内核层 (Linux Kernel)](#2.1 Linux 内核层 (Linux Kernel))

作用

主要组件

示例

[2.2 硬件抽象层(Hardware Abstraction Layer,HAL)](#2.2 硬件抽象层(Hardware Abstraction Layer,HAL))

作用

主要模块

[2.3 库和 Android 运行时层 (Libraries and Android Runtime)](#2.3 库和 Android 运行时层 (Libraries and Android Runtime))

库 (Libraries)

作用

主要库

[Android 运行时 (Android Runtime)](#Android 运行时 (Android Runtime))

组成

作用

示例

[2.4 应用框架 (Application Framework)](#2.4 应用框架 (Application Framework))

主要组件

示例

[2.5 应用程序 (Applications Layer)](#2.5 应用程序 (Applications Layer))

作用

示例

三、工作原理

[3.1 高层次工作原理](#3.1 高层次工作原理)

[3.2 具体流程示例](#3.2 具体流程示例)

四、总结


前言

Android 操作系统是一个复杂的系统,由多层构成,每一层都起着特定的作用。理解这些层次及其作用,有助于全面掌握 Android 的工作原理。

本文将详细介绍 Android 的五大层次,并深入分析每一层次的作用。

一、Android

1.1 什么是 Android?

Android 是一个开源的,基于 Linux 的移动设备操作系统,如智能手机和平板电脑。Android 是由谷歌及其他公司带领的开放手机联盟开发的。

Android 提供了一个统一的应用程序开发方法,这意味着开发人员只需要为 Android 进行开发,这样他们的应用程序就能够运行在不同搭载 Android 的移动设备上。

谷歌在2007年发布了第一个测试版本的 Android 软件开发工具包(SDK),第一个商业版本的 Android 1.0,则发布于2008年9月。

2012年6月27日,在谷歌I/O大会上,谷歌宣布发布了 Android 版本4.1 Jelly Bean。 Jelly Bean 是一个在功能和性能方面的渐进的更新,主要目的是改进用户界面。

Android 源代码是根据自由和开放源码软件许可证。谷歌发布的大部分代码遵循 Apache 许可证2.0版,Linux 内核的变化遵循 GNU 通用公共许可证版本2。

1.2 开发优势

  • 开放源代码
  • 众多开发者及强大的社区
  • 不断增长的市场
  • 国际化的 App 集成
  • 低廉的开发成本
  • 更高的成功几率
  • 丰富的开发环境

1.3 特性

Android 是一款与 Apple 4GS 竞争的功能强大的操作系统,并支持一些伟大的特性。以下列举出部分功能:

1.4 Android 应用程序

Android 应用程序一般使用 Android 软件开发工具包,采用 Java 语言来开发。

一旦开发完成,Android 应用程序可以容易的打包,并在诸如 Google Play 和亚马逊应用商店上出售。

Android 在世界各地190多个国家有数以百万计的移动设备。这是任何移动平台和快速增长的最大的安装基础。全球每天有超过100万个新的 Android 设备被激活。

1.5 Android 的历史

Android 的代码名称现在从 A 排到了 L,分别是 Aestro, Blender, Cupcake, Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice Cream Sandwitch, Jelly Bean, KitKat and Lollipop。让我们按顺序了解 Android 的历史。

  • 纸杯蛋糕 (Cupcake)
  • 甜甜圈 (Donut)
  • 闪电泡芙 (Eclair)
  • 冻酸奶 (Froyo)
  • 姜饼 (Gingerbread)
  • 蜂巢 (Honeycomb)
  • 冰淇淋三明治 (Ice Cream Sandwich)
  • 果冻豆 (Jelly Bean)
  • 奇巧 (KitKat)
  • 棒棒糖 (Lollipop)

二、Android 架构

Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。

2.1 Linux 内核层 (Linux Kernel)

在所有层的最底下,Android平台的基础是Linux内核,Linux 内核是 Android 操作系统的基石,负责底层硬件抽象、内存管理、进程管理、安全性等核心功能。

它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅长的工作,如网络和大量的设备驱动,从而避免兼容大量外围硬件接口带来的不便。

比如ART虚拟机最终调用底层Linux内核来执行功能。Linux内核的安全机制为Android提供相应的保障,也允许设备制造商为内核开发硬件驱动程序。

作用

  1. 硬件驱动: 提供各种设备驱动程序,如显示驱动、音频驱动、相机驱动等。
  2. 内存管理: 管理系统内存,为应用程序分配内存资源。
  3. 进程管理: 负责进程和线程的调度与管理。
  4. 安全机制: 提供基本的安全特性,如文件系统权限、用户权限管理等。
  5. 省电优化: 通过电源管理框架,实现设备省电优化。

主要组件

  • 驱动程序: 设备驱动,用于控制硬件。
  • 电源管理: 管理设备的电源状态,实现节能策略。
  • 安全保卫: SE Linux 安全模块,提供系统安全保护。
  • 输入管理: 处理键盘、触摸屏、传感器等输入设备。

示例

  • 驱动程序: 包括显示驱动、摄像头驱动、Wi-Fi 驱动等,用于操作具体硬件设备。
  • 电源管理: 举例来说,设备进入睡眠模式时,通过电源管理降低能耗。

程序库

在 Linux 内核层的上面是一系列程序库的集合,包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等。

2.2 硬件抽象层(Hardware Abstraction Layer,HAL)

硬件抽象层 (HAL) 提供了一组标准接口,使上层软件能够轻松地与物理硬件进行通信。开发 HAL,硬件制造商与设备的具体操作方法保持一致。

作用

  1. 硬件抽象: 封装硬件细节,通过定义标准接口,提供与硬件通信的抽象方法。
  2. 设备兼容: 允许 Android 操作系统在不同硬件设备上运行而无需改变上层应用。
  3. 模块化设计: 各个硬件模块独立实现,易于维护和升级。

主要模块

  • 摄像头 HAL: 提供摄像头操作接口,实现摄像头预览、拍照、视频录制等功能。
  • 音频 HAL: 提供标准音频接口,实现音频的录制和播放。
  • 蓝牙 HAL: 提供蓝牙设备通信的接口。

2.3 库和 Android 运行时层 (Libraries and Android Runtime)

这是架构中的第三部分,自下而上的第三层。这一层包含了大量的核心库和 Android 运行时。

库为系统提供了基础功能。而 Android 运行时则是驱动应用程序的引擎,同时提供一系列核心的库来为 Android 应用程序开发者使用标准的 Java 语言来编写 Android 应用程序。

这个部分提供名为 Dalvik 虚拟机的关键组件,类似于 Java 虚拟机,但专门为 Android 设计和优化。

  • Dalvik 虚拟机使得可以在 Java 中使用 Linux 核心功能,如内存管理和多线程。
  • Dalvik 虚拟机使得每一个 Android 应用程序运行在自己独立的虚拟机进程。

库 (Libraries)

作用
  1. 核心功能: 提供各种基础功能,如图形渲染、数据库访问、网络连接等。
  2. 性能优化: 提供高效的低层实现,提升应用性能。
主要库
  • Surface Manager: 管理显示子系统和窗口合成。
  • Media Framework: 提供播放和录制音视频的功能。
  • SQLite: 关系数据库,用于本地数据存储。
  • OpenGL ES: 2D 和 3D 图形渲染引擎。
  • WebKit: 浏览器引擎,用于显示网页内容。
  • libc: 标准 C 库,提供基础的系统调用。

Android 运行时 (Android Runtime)

组成
  1. Core Libraries: 提供 Java 编程语言的核心功能。
  2. ART/Dalvik 虚拟机: ART(Android Runtime)和 Dalvik 是 Android 的虚拟机,为应用提供运行环境。
作用
  1. 内存管理: 提供自动内存管理机制,如垃圾回收 (Garbage Collection)。
  2. 性能优化: 提供即时编译 (Just-In-Time, JIT) 和提前编译 (Ahead-Of-Time, AOT),提升应用运行效率。
  3. 多进程支持: 提供独立的进程空间,保证应用之间互不干扰。

示例

  • SQLite: 用于存储应用数据的小型关系型数据库。
  • OpenGL ES: 用于图形渲染的库,让应用能够显示复杂的 2D 和 3D 图形。

2.4 应用框架 (Application Framework)

应用框架层以 Java 类的形式为应用程序提供许多高级的服务,包括提供了可复用的组件和服务。应用程序开发者被允许在应用中使用这些服务来构建他们的应用程序。它是一个丰富的 API 集合,简化了应用开发。作用

  1. 组件重用: 提供了大量的可复用组件,如 Activity、Service、Content Provider、Broadcast Receiver。
  2. 统一接口: 提供统一接口访问系统服务,如视图系统、资源管理、通知管理、位置管理等。
  3. 高效开发: 简化复杂功能的实现,使开发者可以更高效地进行开发。

主要组件

  • Activity Manager 活动管理者**:** 管理应用程序的生命周期和任务栈,控制应用程序生命周期和活动栈的所有方面。
  • Window Manager: 管理窗口显示和布局。
  • Content Providers 内容提供者**:** 管理应用间共享数据,允许应用程序之间发布和分享数据。
  • View System 视图系统**:** 一个可扩展的视图集合,用于构建应用程序用户界面。
  • Notification Manager 通知管理器**:** 显示自定义警告和通知,允许应用程序显示对话框或者通知给用户。
  • Resource Manager 资源管理器**:** 访问非代码资源,如字符串、图形。提供对非代码嵌入资源的访问,如字符串,颜色设置和用户界面布局。

示例

  • Activity: 每一个屏幕或者页面对应一个 Activity,实现用户界面的加载和交互。
  • Service: 用于执行长时间运行操作,或者执行没有用户界面需求的任务。

2.5 应用程序 (Applications Layer)

应用层是 Android 系统的最上层,它包括所有的用户应用程序。

你写的应用程序也将被安装在这层。这些应用程序包括如拨号器、信息、浏览器、相机等。用户可以直接与这些应用程序交互。

作用

  1. 用户交互: 提供用户界面和用户所需的功能。
  2. 功能实现: 框架层之上的功能具体实现,如打电话、发短信、上网等。
  3. 扩展性: 用户可以通过 Google Play 或其他渠道安装第三方应用,扩展设备功能。

示例

  • 系统应用: 拨号器、信息、设置、相机。
  • 第三方应用: WhatsApp、Facebook、Instagram。

三、工作原理

3.1 高层次工作原理

  1. 用户交互: 用户通过应用层进行操作,如打开应用、点击按钮。
  2. 应用框架: 应用层通过调用应用框架提供的 API 完成各种任务,如更新 UI、获取位置信息等。
  3. 运行时和库: 应用框架调用运行时和库提供的功能,如数据库操作、网络请求、图形渲染。
  4. 硬件交互: 通过 HAL 层调用相应的硬件功能,如获取摄像头图像、录制音频等。
  5. 内核支持: Linux 内核层提供基础支持,如硬件驱动、内存管理、进程调度等,确保系统的稳定运行。

3.2 具体流程示例

例如:用户点击应用中的 "拍照" 按钮。

  1. 应用层: 用户点击应用中的 "拍照" 按钮,触发 Activity 的事件回调。
  2. 应用框架层: Activity 调用应用框架的 Camera API,向系统请求开启摄像头。
  3. HAL 层: 摄像头请求被传递到 HAL 层,通过 HAL 接口与具体的摄像头设备通信。
  4. 内核层: 内核层的摄像头驱动程序负责捕捉图像,并将图像数据返回到应用层。
  5. 库和运行时: 图像数据通过运行时和库层处理,如进行图像压缩、存储操作等。
  6. 最终应用: 图像显示在应用的用户界面上,用户可以看到拍摄的照片。

四、总结

理解 Android 操作系统的层次结构以及每一层的作用,对于掌握 Android 开发至关重要。从应用层到 Linux 内核层,每一层都扮演着特定的角色。通过全面了解这些层次及其工作原理,可以更好地开发高效、稳定的 Android 应用。

相关推荐
tracyZhang1 小时前
NativeAllocationRegistry----通过绑定Java对象辅助回收native对象内存的机制
android
vv啊vv1 小时前
使用android studio 开发app笔记
android·笔记·android studio
冯浩(grow up)2 小时前
使用vs code终端访问mysql报错解决
android·数据库·mysql
_一条咸鱼_5 小时前
Android Fresco 框架工具与测试模块源码深度剖析(五)
android
QING6185 小时前
Android Jetpack Security 使用入门指南
android·安全·android jetpack
顾林海5 小时前
Jetpack LiveData 使用与原理解析
android·android jetpack
七郎的小院5 小时前
性能优化ANR系列之-BroadCastReceiver ANR原理
android·性能优化·客户端
QING6185 小时前
Android Jetpack WorkManager 详解
android·kotlin·android jetpack
今阳6 小时前
鸿蒙开发笔记-14-应用上下文Context
android·华为·harmonyos
东莞梦幻科技7 小时前
体育直播系统趣猜功能开发技术实现方案
android