Android | Android 系统架构

news2024/12/29 10:26:21
  • 参考: Android Developers
  • (https://developer.android.google.cn/)

平台架构

Android 是基于 Linux 的开源软件栈,下图为官网给出的 Android 平台主要组件。

在这里插入图片描述

Android 平台从上(直接与用户交互)到下(直接与硬件交互)包含:

  • 系统应用层 (System Apps)
  • Java API 框架 (Java API Framework)
  • 原生 C/C++ 库 (Native C/C++ Libraries)
  • Android 运行时 (ART, Android Runtime)
  • 硬件抽象层 (HAL, Hardware Abstraction Layer)
  • Linux 内核层 (Linux Kernel)

应用层

系统内置的应用程序以及非系统级的应用程序(即用户安装的程序)都属于应用层,负责与用户进行交互。常见的系统应用包括日历、短信、邮件、默认浏览器、联系人、默认键盘等,这些系统应用与

Java API 框架

为开发人员提供开发应用所需要的 API,开发人员可以通过以 Java 语言编写的 API 使用 Android OS 的整个功能集,可以简化应用开发流程。包括以下组件及服务:

  • 活动管理器 Activity Manager:管理各个 Activity 的生命周期,以及页面导航跳转功能等 Activity 相关操作。
  • 位置管理器 Location Manager:向应用程序提供地理位置及定位功能服务。
  • 包管理器 Package Manager:管理所有安装在 Android OS 中的应用程序。
  • 通知管理器 Notification Manager:向应用程序提供状态栏信息提示的功能。
  • 资源管理器 Resource Manager:管理应用程序使用的非代码资源,如本地文本、图片、布局文件、颜色文件等。
  • 电话管理器 Telephone Manager:管理所有的移动设备功能。
  • 窗口管理器 Window Manager:管理所有已开启的窗口程序。
  • 内容提供器 Content Provider:向应用程序提供不同 App 之间的数据共享服务。
  • 视图系统 View System:构建应用程序的基本组件。

原生 C/C++ 库

许多核心的 Android 系统组件及服务构建自原生代码,需要 C 与 C++ 编写的原生库依赖。如果需要 C 或 C++ 依赖,可以使用 Android NDK 直接从原生代码访问某些原生平台库。 一些常用的库如下所示:

  • OpenGL ES:3D 绘图函数库。
  • SGL:底层的 2D 图形渲染引擎。
  • OpenMAX AL:开放媒体加速库,提供统一的接口,用于加速嵌入式和移动设备上多媒体应用程序中音频、视频和图像的捕获、呈现等操作任务。
  • Libs:从 BSD 继承的标准C系统函数库,专门为基于 嵌入式Linux 的设备制定。
  • Media Framework:多媒体库,支持多种常用音视频格式的常用操作。
  • SQLite:轻量级关系型数据库引擎。
  • SSL:安全套阶层,为网络通信提供安全及数据完整性的安全协议。
  • WebkitWeb 浏览器引擎,为 Android OSWebView 提供支持。

Android 运行时

对于运行 Android 5.0(API 21) 及更高版本的设备中,每个应用都在其自己的进程中运行,并拥有自己的 Android Runtime(ART) 实例。ART 通过执行 DEX(Delvik Executable) 文件在有限的内存中运行多个虚拟机,DEX 文件是一种专门为 Android 设计的字节码格式。在开发时,通过工具链将 Java 源代码编译为 DEX 字节码,使其可以在 Android OS 上运行。

对于 Android 5.0(API 21) 之前的版本中,DalvikAndroid Runtime

ART 的部分主要功能有:

  • 预编译(AOT, Ahead of Time)与即时编译(JIT, Just in Time
  • 垃圾回收(GC)
  • 调试支持

Android 还包含一套核心运行时库,可提供 Java API 框架所使用的 Java 编程语言中的大部分功能。

硬件抽象层

位于 Linux 内核与硬件电路之间的接口层,目的在于将硬件接口抽象化,隐藏特定平台的硬件接口细节。由于 Linux 采用了 GPL 协议,源代码是开放且可供修改的,如果硬件提供厂商不希望公开这部分,可以将其放在 HAL 中。HAL 包含多个库模块,其中每个模块都实现了特定类型硬件组件的接口,当框架 API 调用访问设备引硬件时,Android OS 就会加载该硬件组件的库模块。
对于开发来说,HAL 很好的屏蔽了软硬件的兼容问题,软件与硬件由于 HAL 的存在变得无关。对于测试来说,软件与硬件的测试也可以并行执行,即通过 HAL 来单独控制硬件,或通过 HAL 对软件部分提供虚拟的硬件接口。

Linux 内核层 (Linux Kernel)

Android 平台的基础是 Linux 内核,在此基础上添加了部分 Android 专用的驱动,例如 ART 依靠 Linux 内核来执行底层功能,包括线程和低层内存管理。Linux 内核向 Android 提供了安全组件、内存管理、进程管理、网络协议、驱动模型等功能,并允许设备制造商为已发布的内核提供硬件驱动程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mastodon 长毛象多租户:自定义域名、自定义账号别名

概念 自定义域名后缀 假设,Mastodon 主节点域名 domain1.com,我在该域名下拥有一个用户 user1domain1.com。 配置自定义域名后缀支持后,也可以通过 user1domain2.com 搜索到。该配置需要在主节点中设置 ALTERNATE_DOMAINS。 自定义账号别…

DOS的常用指令:

DOS的常用指令: DOS【介绍】:磁盘操作系统 cmd是操作DOS的媒介,dos可以操作Windows的目录结构, 基本操作指令: cmd【控制台】->发给dos【解析】->win的目录结构 常用操作指令: 《一》目录操作 &a…

QT学习笔记-QT5.15.2使用qtopcua5.15.2实现与PLC通讯(上)

QT学习笔记-QT5.15.2使用qtopcua5.15.2实现与PLC通讯(上) 环境说明背景思路perl依赖安装qtopcua插件编译解决编译报错问题解决安装mingw32-make install报错问题 环境说明 操作系统:Windows10 专业版 64位 开发工具:Qt 5.15.2 OP…

Python提取PDF文字的10个方法,OCR识别扫描版pdf,图片pdf格式的10种ocr汉字识别方法

Python 读取扫描版 PDF、图片 PDF 并进行 OCR 识别的方法: pytesseract:一种基于 Python 的 OCR 库,可用于识别扫描版 PDF 和图片 PDF 中的文本。 它可以使用 Google 的 OCR 引擎进行识别,也可以使用本地的 OCR 引擎进行识别。使…

阿里云免费ssl证书申请与部署

一、证书申请 1、找到 ssl 证书 2、点击选择SSL 证书 进入其管理控台 3、如果你还没有免费证书,选择购买即可,一个自然年内每个账号可以领取一次数量为20的免费单域名试用证书额度,我的已经购买过来,今年的,所以无法…

网络安全各类WAF绕过技巧

一、WAF绕过 1、脏数据绕过 即传入一段长数据使waf失效,从而实现绕过waf。某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。 例如,当发现某网站存在一个反序列化漏洞时,但是无回显,被waf拦…

MQTT中间件Eclipse Mosquitto安装和使用(.asc文件)MQTT监控命令mosquitto_sub(mosquitto C++库源码编译)

昨天弄的,今天忘了不少。。。 文章目录 参考链接安装MQTT服务中间件安装启动与查询卸载与清理 MQTT C支持库安装(使C能使用相关库函数)离线安装(通过源码)ubuntu官网下载软件包编译mosquitto客户端库 mosquitto Docker…

后端SpringBoot应用向云原生K8S平台迁移

目录 一、引言二、方式1:在K8S上部署Spring Cloud Alibaba三、方式2:在K8S上部署Spring Cloud K8S3.1 第1次优化:移除Spring Cloud K8S DiscoveryClient 四、方式3:在K8S上部署SpringBoot应用4.1 第2次优化:移除Spring…

acwing提高--DFS之剪枝与优化

剪枝与优化的方法 1.优化搜索顺序 大部分情况下,我们应该优先搜索分支较少的节点 2.排除等效冗余 3.可行性剪枝 4.最优性剪枝 5.记忆化搜索(DP) 1.小猫爬山 题目https://www.acwing.com/problem/content/description/167/ 1.优化搜索顺…

《操作系统》期末最全复习题及解析

文章目录 选择题填空题简答题程序题综合题1.银行家算法2.页面置换算法3.进程调度算法4.磁盘调度算法5.求物理/逻辑地址6.分页存储管理7.可变分区分配算法 选择题 若信号量S的初值为2,且有3个进程共享此信号量,则S的取值范围是(B )…

单词长度统计,统计数据放入列表

输入一段英文计算每个单词长度,统计不含非英文字符,列表输出。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址…

AI与税务管理:新技术带来的新机遇和新挑战

本文作者:王伊琳 人工智能(Artificial Intelligence,AI)是指由计算机系统或机器人模拟人类智能的过程和结果,包括感知、理解、学习、推理、决策等能力。近年来,随着计算机技术、互联网平台、大数据分析等的…

AI工具 ChatGPT-4 vs Google Bard , PostgreSQL 开发者会pick谁?

在人工智能 (AI) 进步的快节奏世界中,开发人员正在寻找最高效和突破性的解决方案来加快和提高他们的工作质量。对于 PostgreSQL 开发人员来说,选择理想的 AI 支持的工具以最专业的方式解决他们的查询至关重要。 近年来,人工智能工具的普及率…

Redis如何做到内存高效利用?过期key删除术解析!

大家好,我是小米,一个热衷于分享技术的小伙伴。今天我要和大家探讨一个关于 Redis 的话题:删除过期key。在使用 Redis 进行数据存储和缓存时,我们经常会遇到过期数据的处理问题。接下来,我将为大家介绍为什么要删除过期…

很多人都在考的PMP认证到底有什么用?考试内容难不难?

工作几年之后,很多人都会选择提升自己,从而达到升职加薪的目的,而除了学习专业的技能外,考取一份含金量高的证书,也是非常重要的途径,PMP的证书在业界内的名气很大,该证书是由美国项目管理协会&…

JSP工作原理

一、JSP--一门远古的技术 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大特点在于,写JSP就行html,但是html只能提供静态数据,而Jsp技术可以嵌套…

【C++】容器篇(二)——List的基本概述以及模拟实现

前言: 在上期,我们学习了STL库中的第一个容器--vector ,今天我将给大家介绍的是 库中的另外一个容器--List。其实,有了之前学习 vector 的知识,对于List 的学习成本就很低了。 目录 (一)基本介…

Windows古老Bug损坏SSD/HDD,Win7到Win11全遭殃

去年微软确认了 Windows 12 将在2024年发布,Win11 的更新变为了小的功能更新。 今年3月 Win11 Moment 2 带来了包括任务栏在内的小更新,Moment 3 在这两天就会出来。 Win11 的更新明显放缓,也让用户松了口气。 因为自古以来 Windows 更新大…

5.7 文件I/O(文件IO打开和关闭)

目录 文件描述符 open open-示例1 open-示例2 close 笔记 文件描述符 每个打开的文件都对应一个文件描述符。 文件描述符是一个非负整数。Linux为程序中每个打开的文件分配一个文件描述符。 文件描述符从0开始分配,依次递增。 文件IO操作通过文件描述符来完…