【新手入门】Android基础知识(一):系统架构

目   录

Android 系统架构图

 1. 应用

2. JAVA API 框架

3. 原生 C/C++ 库

4. Android 运行时(Android Runtime)

5. 硬件抽象层 (HAL)

6. Linux 内核

参考资料


Android 系统架构图

    Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、Android运行时、JAVA API框架和应用组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。下图所示为Android系统架构。

Android系统架构

 1. 应用

       应用程序是 android 架构的顶层,包含在Android设备上运行的所有应用(包括系统应用和第三方应用),它们是Android系统中直接面向用户的部分。

        第三方应用都是基于Android提供的SDK(Sofware Development Kit)开发,并受到 SDK接口的约束。系统应用则可以调用整个框架层的接口和模块,其中的很多接口在 SDK 中是隐藏的,因此系统应用具有比第三方应用更多的权利。

2. JAVA API 框架

        Java API 框架是指构建应用所依据的一组 Java 类、接口和其他预编译代码,是 Android 的核心部分,为开发人员提供构建应用程序所需的工具和服务。

        框架层包括几项重要的服务,可以更轻松地构建功能强大且一致的 Android 应用程序,而无需从头开始创建所有内容。服务如下表所示。

关键组件功能
Activity Manager (AM)管理应用生命周期、任务栈、Activity 切换
Window Manager (WM)管理应用界面窗口、布局和绘制
Content Provider (CP)数据访问接口,实现不同应用间的数据共享
Notification Manager管理通知栏消息
Resource Manager管理资源文件,如图片、布局、字符串
Package Manager (PM)管理安装的应用包、权限信息
Telephony Manager / Location Manager提供电话、定位等硬件功能访问
View 系统 / UI 组件提供 Button、TextView、RecyclerView 等界面元素
其他系统服务SensorManager、MediaPlayer、ClipboardManager 等

3. 原生 C/C++ 库

       Native系统库主要基于C\C++实现的一些原生组件,开发者需要通过 Java API 框架层调用这些库。

库名称功能描述
OpenGL ES用于 2D 和 3D 图形渲染,提供高性能的图形处理能力,直接与 GPU 交互,可实现复杂图形效果。
Media Framework基于 PacketVideo OpenCORE,支持多种常用音频、视频格式的回放和录制,以及静态图像文件的处理。
SQLite一个轻量级的关系型数据库引擎,为所有应用程序提供数据存储和管理功能。
Surface Manager对显示子系统进行管理,为多个应用程序提供 2D 和 3D 图层的无缝融合。
Libc标准 C 系统函数库,专门为嵌入式 Linux 设备定制,提供基础的系统调用和功能支持。
OpenMAX AL一个多媒体应用程序的标准框架,用于构建和管理多媒体应用程序。
Webkit用于 WebView 的功能实现,支持网页浏览和渲染。

4. Android 运行时(Android Runtime)

        Android 运行时主要包括以下两个关键部分:

  • 核心库(Core Libraries):提供了一系列的 Java 和 Kotlin 标准库,是 Android 应用开发的基础。
  • 运行时环境(ART):负责运行Android应用程序。

从 Android 5.0(Lollipop)开始,Android 运行时默认使用 ART(Android Runtime),取代早期的 Dalvik 虚拟机。Dalvik 虚拟机采用 JIT(Just-In-Time)的解释器在程序运行时进行编译,而ART 通过预先编译(Ahead-Of-Time, AOT)应用程序代码为机器代码,显著提高了应用程序的运行效率,但同时ART需要更多的存储空间。

5. 硬件抽象层 (HAL)

      硬件抽象层(Hardware Abstraction Layer,HAL)主要提供对Linux内核驱动的封装,这种封装可以向上提供各种设备的编程接口,并且隐藏底层实现细节。HAL 让 Android 无需关注较低级别的驱动程序实现,当框架API请求访问设备硬件时,Android系统将为该硬件加载相应的库模块。

6. Linux 内核

       Android系统基于Linux内核实现,同时在该基础上添加了Android专用的驱动,例如:Binder。由于Linux系统的优秀性,基于Linux在安全性、内存管理、进程管理等都有了很大优势。
Linux内核提供安全性、内存管理、进程管理、网络协议栈和驱动模型等核心系统服务,同时也是系统硬件和软件叠层之间的抽象层。

参考资料:

1.《Android全面分析》

2.《最强Android书:架构大剖析》

3. 架构概览  |  Android Open Source Project

4. Android 架构 - GeeksforGeeks

5.《疯狂Android讲义》

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

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

相关文章

晶振电路的负载电容、电阻参数设计

系列文章目录 文章目录系列文章目录前言一、晶振主要参数二、有源与无源区别三、无源晶振四、有源晶振总结前言 在硬件电路的设计中,晶振电路是必不可少的,它充当了整个电路心脏的作用。在这个晶振电路的设计中负载电容、电阻参数的选型是很重要的&…

电脑上练打字用什么软件最好:10款打字软件评测

现在孩子们在电脑上练打字,软件一搜一大把,可好多家长和老师都犯愁:到底哪个管用?我带200多个小学生练过字,前前后后试了十款软件,今天就掏心窝子说说——有的看着花哨其实没用,有的专业是专业但…

第五天~提取Arxml的模板信息

🌟 ARXML模板信息提取:解锁汽车软件的乐高魔法 在汽车电子的世界里,AUTOSAR(汽车开放系统架构)如同无形的神经系统,而ARXML文件正是承载这套神经系统蓝图的数字载体。当工程师们需要批量创建或修改ECU(电子控制单元)配置时,模板信息提取便成为了一项至关重要的核心技…

react+antd+vite自动引入组件、图标等

前言:react在使用antd的时候,也是需要每个组件都在界面上按需引入的,那能不能自动生成,按需使用呢?我们这里说一说这个。安装插件,组件按需引入unplugin-antd-resolverunplugin-auto-importnpm install unp…

深度学习与遥感入门(六)|轻量化 MobileNetV2 高光谱分类

系列回顾: (一)CNN 基础:高光谱图像分类可视化全流程 (二)HybridNet(CNNTransformer):提升全局感受野 (三)GCN 入门实战:基于光谱 KNN…

第4节 神经网络从公式简化到卷积神经网络(CNN)的进化之路

🧙 深度学习的"玄学进化史" 从CNN用卷积层池化层处理图片,循环网络RNN如何利用上下文处理序列数据,到注意力机制让Transformer横空出世,现在的大语言模型已经能写能画能决策!每个新技巧都让人惊呼"还能这么玩",难怪说深度学习像玄学——但这玄学,…

最新去水印小程序系统 前端+后端全套源码 多套模版 免授权(源码下载)

最新去水印小程序系统 前端后端全套源码 多套模版 免授权 源码下载:https://download.csdn.net/download/m0_66047725/91669468 更多资源下载:关注我

TCP Socket 编程实战:实现简易英译汉服务

前言:TCP(传输控制协议)是一种面向连接、可靠的流式传输协议,与 UDP 的无连接特性不同,它通过三次握手建立连接、四次挥手断开连接,提供数据确认、重传机制,保证数据有序且完整传输。本文将基于…

CF566C Logistical Questions Solution

Description 给定一棵 nnn 个点的树 TTT,点有点权 aia_iai​,边有边权 www. 定义 dist⁡(u,v)\operatorname{dist}(u,v)dist(u,v) 为 u→vu\to vu→v 的简单路径上的边权和. 找到一个节点 uuu,使得 W∑i1ndist⁡(u,i)32aiW\sum\limits_{i1}^n…

聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)

前言 最近在学习websocket全双工通信,想要做一个联机小游戏,做游戏之前先做一个聊天室练练手。 跟着本篇博客,可以从0搭建一个属于你自己的聊天室。 准备阶段 什么人适合学习本篇文章? 答:前端开发者,有一…

后台管理系统-2-vue3之路由配置和Main组件的初步搭建布局

文章目录1 路由搭建1.1 路由创建(router/index.js)1.2 路由组件(views/Main.vue)1.3 路由引入并注册(main.js)1.4 路由渲染(App.vue)2 element-plus的应用2.1 完整引入并注册(main.js)2.2 示例应用(App.vue)3 ElementPlusIconsVue的应用3.1 图标引入并注册(main.js)3.2 示例应用…

使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期

使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期 目录 使用 Let’s Encrypt 免费申请泛域名 SSL 证书,并实现自动续期 🛠️ 环境准备💡 什么是 Let’s Encrypt?🧠 Let’s Encrypt 证书颁发原…

一键自动化:Kickstart无人值守安装指南

Kickstart文件实现自动安装1. Kickstart文件概述1.1 定义与作用Kickstart文件是Red Hat系Linux发行版(如RHEL、CentOS、Fedora)用于实现自动化安装的配置文件,采用纯文本格式保存。它通过预设安装参数的方式,使系统安装过程无需人…

深度解读 Browser-Use:让 AI 驱动浏览器自动化成为可能

目录 一、什么是 Browser-Use? 二、Browser-Use 的核心功能 1. AI 与浏览器的链接桥梁 2. 无代码 / 低代码操作界面 3. 支持多家 LLM 4. 开发体验简洁 可快速上手 三、核心价值与适用场景 四、与 Playwright 的结合使用 五、总结与展望 https://github.com…

React.memo、useMemo 和 React.PureComponent的区别

useMemo 和 React.memo 都是 React 提供的性能优化工具,但它们的作用和使用场景有显著不同。以下是两者的全面对比: 一、核心区别总结特性useMemoReact.memo类型React Hook高阶组件(HOC)作用对象缓存计算结果缓存组件渲染结果优化目标避免重复计算避免不…

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 组成的系统

Lumerical INTERCONNECT ------ CW Laser 和 OPWM 组成的系统 引言 正文 引言 这里我们来简单介绍一下 CW Laser 与 OSA 组成的简单系统结构的仿真。 正文 我们构建一个如下图所示的仿真结构。 我们将 CWL 中的 power 设置为 1 W。 然后直接运行仿真查看结果如下: 虽然 …

想涨薪30%?别只盯着大厂了!转型AI产品经理的3个通用方法,人人都能学!

在AI产品经理刚成为互联网公司香饽饽的时候,刚做产品1年的月月就规划了自己的转型计划,然后用3个月时间成功更换赛道,转战AI产品经理,涨薪30%。 问及她有什么上岸秘诀?她也复盘总结了3个踩坑经验和正确路径&#xff0c…

基于Hadoop的全国农产品批发价格数据分析与可视化与价格预测研究

文章目录有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主项目介绍每文一语有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍 随着我国农业数字化进程的加快,农产品批发市场每天都会产生海量的价格…

STM32在使用DMA发送和接收时的模式区别

在STM32的DMA传输中,发送使用DMA_Mode_Normal而接收使用DMA_Mode_Circular的设计基于以下关键差异:1. ‌触发机制的本质区别‌‌发送方向(TX)‌:由USART的‌TXE标志(发送寄存器空)触发‌&#x…

【秋招笔试】2025.08.15饿了么秋招机考-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 03. A先生的商贸网络投资 问题描述 A先生是一位精明的商人,他计划在 n n n 个城市之间建立商贸网络。目前有 m m