安卓进阶之android系统架构

article/2025/10/25 16:20:50

安卓进阶之android架构

安卓进阶躲不开阅读源码和深入了解安卓的底层,这是一篇入门级别的文章,可以对安卓架构有个大体的认识。

AOSP与Android系统架构

首先要理解andriod和AOSP的关系,我们日常开发的安卓跟市面上的安卓不是一个意思,我们开发的是安卓app,市面上的安卓其实是安卓系统。

维基百科:Android是基于Linux 内核和其他开源软件的修改版本的移动操作系统,主要为智能手机和平板电脑等触摸屏移动设备设计。

官方文档:**Android 开放系统平台 (Android open source project AOSP)**是公开可用且可修改的 Android 源代码。任何人都可以为他们的设备下载和修改 AOSP。 AOSP 提供完整且功能齐全的 Android 移动平台实现。

五层的安卓架构(下图左边),一些书籍或者博客上常见的这张图;最新版可看官方文档(回头看这篇文章的时候可能也会过时)。以下介绍会结合两个图进行说明。

最新的AOSP软件堆栈架构如下图右边,即我们说的android系统架构:

在这里插入图片描述

详细介绍如下:

应用层(System apps)

包括Android appPrivileged appDevice manufacture app等应用程序,system apps的意思就是手机系统中的apps,两个版本在这一层是一样的。

  • 安卓应用(Android app):仅使用 Android SDK 中的 Android API 创建的应用程序。
  • 特权应用程序(Privileged app):结合使用 Android 和系统 API 创建的应用程序。这些应用程序必须作为特权应用程序预安装在设备上。
  • 设备制造应用程序(Device manufacture app):使用 Android API、系统 API 和直接访问 Android 框架实现的组合创建的应用程序。

应用框架层(Java API Framework)

我们平时开发都是用到这一层提供的API,而这一层是java编写的,所以称为Java API。Android 4大组件,6大布局,view等系统定义的原生组件都在这层。

由于Framkwork层和Android SDK 是有交集的(或者是包含关系),旧版本中其实是把Framework层和Android SDK合并作为一层去介绍了。

  • Framework层

    又称安卓框架。一组 Java 类、接口和其他构建应用程序的预编译代码。该框架的某些部分可通过使用 Android SDK 的 Android API 公开访问。Android 框架代码在应用进程中运行。

  • Android SDK = Android API + System API

    又称安卓开发工具包。一个软件开发工具包,用于创建与 Android 框架交互的应用程序。 Android SDK 由适用于所有应用程序的 Android API 和仅适用于特权应用程序的系统 API 组成。

后续的源码阅读会经常看到ActivityManagerService(AMS)、WindowManagerService(WMS)这些,这些都是FrameWork层的源码。

名称功能描述
Activity Manager(活动管理器)管理各个应用程序生命周期,以及常用的导航回退功能
Location Manager(位置管理器)提供地理位置及定位功能服务
Package Manager(包管理器)管理所有安装在Android系统中的应用程序
Notification Manager(通知管理器)使得应用程序可以在状态栏中显示自定义的提示信息
Resource Manager(资源管理器)提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
Telephony Manager(电话管理器)管理所有的移动设备功能
Window Manager(窗口管理器)管理所有开启的窗口程序
Content Provider(内容提供者)使得不同应用程序之间可以共享数据
View System(视图系统)构建应用程序的基本组件

系统服务(System services)

这个是五层架构中没有提及的部分,是在新版中单独分离出来的一层。

系统服务是模块化的、集中的组件,例如system_server 、SurfaceFlinger 和 MediaService。

**Android 框架 API 公开的功能与系统服务通信以访问底层硬件。**所以它夹在应用框架层和运行库层之间。

系统运行库层

旧版中系统运行库包括native库和ART库。

新版中两者是分开的,而且并不在同一层,旧版中的本机C/C++库,在新版中扩展为本机的进程和库。

  • ART库:Android run time是 AOSP提供的Java应用运行环境。所以我们的程序采用java语言编写, 程序在Android运行时中执行。ART 将应用程序的字节码转换为特定于处理器的指令,这些指令由设备的运行时环境执行。

    运行时库包括核心库和ART(Android5.0后,Dalvik被ART取代),其中核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。

  • Native daemons and libraries:本机守护进程和库。

    • 该层中的本机守护进程包括inithealthdlogdstoraged 。这些守护进程直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。
    • 该层中的本机库包括libclibloglibutilslibbinderlibselinux 。这些本机库直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。

硬件抽象层(HAL)

HAL 是一个抽象层,具有供硬件供应商实现的标准接口。 HAL 允许 Android 不了解较低级别的驱动程序实现。使用 HAL 允许在不影响或修改更高级别系统的情况下实现功能。

Linux 内核层(Linux Kernel)

作为任何操作系统的核心部分,内核与设备上的底层硬件进行对话。在可能的情况下,AOSP 内核被拆分为与硬件无关的模块和特定于供应商的模块。

andriod内核是基于Linux内核的,在此基础上添加了关于安卓的驱动。

系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。

其中的驱动包括:音频(Audio)、android IPC机制(Binder机制)跨进程通讯、显示 (Display)主要是屏幕显示、按键(Keypad) 处理按键的分发等、蓝牙(BlueTooth)、相机(Camera)、内存分配与共享(Shared Memory)、USB、WIFI、电源管理(power management)

Andriod系统源码目录

官方网站:https://cs.android.com/android/platform/superproject

国内网站:https://www.androidos.net.cn/android/10.0.0_r6/xref

整体架构

在这里插入图片描述

Android源码根目录描述
abi应用程序二进制接口
art全新的ART运行环境
bionic系统C库
bootable启动引导相关代码
build存放系统编译规则及generic等基础开发包配置
ctsAndroid兼容性测试套件标准
dalvikdalvik虚拟机
developers开发者目录
development应用程序开发相关
device设备相关配置
docs参考文档目录
external开源模组相关文件
frameworks应用程序框架,Android系统核心部分,由Java和C++编写
hardware主要是硬件抽象层的代码
libcore核心库相关文件
libnativehelper动态库,实现JNI库的基础
ndkNDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码
out编译完成后代码输出在此目录
packages应用程序包
pdkPlug Development Kit 的缩写,本地开发套件
platform_testing平台测试
prebuiltsx86和arm架构下预编译的一些资源
sdksdk和模拟器
system底层文件系统库、应用和组件
toolchain工具链文件
tools工具文件
Makefile全局Makefile文件,用来定义编译规则

应用层部分

应用层位于整个Android系统的最上层,源码根目录中的packages目录对应着系统应用层。它的目录结构如下:

在这里插入图片描述

packages目录描述
apps核心应用程序
experimental第三方应用程序
inputmethods输入法目录
providers内容提供者目录
screensavers屏幕保护
services通信服务
wallpapers墙纸

应用框架层

应用框架层一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。
应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:

在这里插入图片描述

/frameworks/base目录描述
api定义API
cmds重要命令:am、app_proce等
core核心库
data字体和声音等数据文件
docs文档
graphics图形图像相关
include头文件
keystore和数据签名证书相关
libs
location地理位置相关库
media多媒体相关库
native本地库
nfc-extrasNFC相关
obex蓝牙传输
opengl2D/3D 图形API
packages设置、TTS、VPN程序
saxXML解析器
services系统服务
telephony电话通讯管理
test-runner测试工具相关
tests测试相关
tools工具
wifiwifi无线网络

C/C++程序库部分

系统运行库层(Native)中的
C/C++程序库的类型繁多,功能强大,C/C++程序库并不完全在一个目录中,这里给出几个常用且比较重要的C/C++程序库所在的目录位置。

目录位置描述
bionic/Google开发的系统C库,以BSD许可形式开源。
/frameworks/av/media系统媒体库
/frameworks/native/opengl第三方图形渲染库
/frameworks/native/services/surfaceflinger图形显示库,主要负责图形的渲染、叠加和绘制等功能
external/sqlite轻量型关系数据库SQLite的C++实现

Android运行时库的代码放在art/目录中。硬件抽象层的代码在hardware/目录中,这一部分是手机厂商改动最大的一部分,根据手机终端所采用的硬件平台会有不同的实现。

参考文章

安卓操作系统(维基百科)

Android进阶解密第一章

Android系统基础架构


http://chatgpt.dhexx.cn/article/XN6Y9tR0.shtml

相关文章

android开发流程

Step1:安装开发环境 下载安卓studio安装包,安装安卓的开发环境后,配置AVD和测试设备,并通过HelloWorld测试整个平台的各项功能。 Step2:开发阶段 XML文件完成用户界面的组件定义和布局。 Java源程序代码主要实现用户界面的交互功能和数台…

Android系统开发篇(二) —— 建立Android系统开发环境之Ubuntu 20.04.4 LTS

书接上文,上文中我们主要介绍了虚拟机环境的搭建,那么接下来我们继续还是来说说Android系统开发环境的搭建,Ubuntu系统的安装和配置! 上文我们说到虚拟机的新建了且已经搭载了Ubuntu 20.04.4LTS系统,当然你也可以选择…

干货|Android系统定制开发基础篇

一、Android源码目录结构 Android系统源码内容实在太广,其目录结构也实在庞大,每位开发者也无法做到对每一块都弄明白,工作中接触的也只是其中的一小部分。以下只从宏观上对系统源码的一级目录进行介绍,后续再慢慢完善更细致的内…

Android系统开发 ----- 系统服务开发

系列文章目录 Android系统启动 ---- 主要流程类_MrDarly的博客-CSDN博客Android系统启动Zygote关系主要的类https://blog.csdn.net/weixin_68948960/article/details/125310042 前言 Android系统开发之系统服务开发。 问题:用户操作无界面,但是需要An…

安卓开发入门基础

文章目录 一、APP的运行环境:二、APP的开发语言1.java2.Kotlin3.C/C4.XML 三、APP的数据库四、APP的工程结构配置模块级别的build.gradle清单文件 五、APP的界面显示和逻辑处理 一、APP的运行环境: 首先APP运行在Android系统之上,Android系统…

安卓Android开发快速入门

配合天哥视频食用更佳:【天哥】Android开发视频教程最新版 Android Studio开发 UI组件(控件) 布局管理器 LinearLayout(线性布局) 可嵌套 最常用属性 id 起标记布局的作用 layout_width [wrap_content根据内容选…

安卓开发—Android基础

安卓开发—Android基础 移动开发 移动开发也叫做移动互联网开发。是指以手机、PDA、UMPC等便携终端为基础,进行相应的开发工作,由于这些随身设备基本都采用无线上网的方式,业内也称作为无线开发。 移动应用包括早期的WM掌上助理设备&#…

为什么要自建量化交易平台?

量化交易平台概述 量化交易是指借助现代统计学和数学的方法,利用计算机技术来进行交易的投资方式。它从历史数据中选择经数量模型验证的大概率事件制定策略,通过严格执行来获得持续稳定的超额回报。它具有严格的纪律性、完备的系统性、善用套利思想、依靠…

easytrader 量化交易平台连接同花顺软件使用平安证券

参考:https://easytrader.readthedocs.io/zh/master/usage/#_15 https://blog.csdn.net/iycai/article/details/107592462 *** 安装:pip install easytrader import easytraderuser easytrader.use(ths) #其他券商专用同花顺客户端需要提前下载同花…

量化交易平台设计浅谈

“买入前10只现价创一年新高的股票,合计10万元平均分配,限价下单”,这是一个交易策略;运行该交易策略所需要的实时行情、历史行情、事件处理、风控、下单接口、回测统计等模块,就是交易系统平台。 从投资机构的角度考…

Lean — 优秀好用的开源量化交易平台

Lean 是 QuantConnect 开源的一款非常强大的开源量化交易平台,可以回测或运行Python或者C#写的策略,并在代码仓库中内置了上百个C#和Python的策略算法。 这个开源的算法交易引擎,专为让用户方便轻松地进行策略研究、回测和实时交易而构建。它…

基于聚宽量化交易平台实现量化交易策略

一、入门量化策略 JoinQuant聚宽API文档:https://www.joinquant.com/help/api/help?nameapi 1、策略内容 设置股票池为沪深300的所有成分股 如果当前股价小于10元/股且当前不持仓,则买入; 如果当前股价比买入时上涨了25%,则清仓止…

手把手搭建Python量化交易平台-1:系统架构

个人量化交易的系统架构图: 个人量化交易平台特点: 个性化:开源参考设计 自行个性化设计数据化:python数据分析可视化:phthon前台显示智能化:人工智能及机器学习自动化:通过自动化机制&#x…

Python量化交易平台:QMT (日内交易策略示例)

QMT /Ptrade是一款面向个人投资者,尤其是中高净值个人投资者的专业交易系统。系统采用先进的技术框架,具有功能丰富、风控全面、管理灵活、架构精简、高效稳定等核心优势。PTrade终端不仅支持多品种普通交易、日内回转交易、量化交易等场景;还集成了期权组合交易、期权无风险…

量化交易平台Quantopian学习的笔记(一)

最近对量化感兴趣,每周末带孩子上辅导班等候时在星巴克记录的一些笔记,记录一下便于以后查阅,一并分享出来希望对大家有帮助。 Quantopian量化交易平台主要针对美股,国内也有几个针对A股的,对A股感兴趣的可以去网上找…

如何通过量化交易平台接口搭建自己的平台?

市面上其实已经有那么多的可以使用的相对比较完善的量化平台了,但是为什么还是有那么多人选择自己搭平台呢?毕竟重复造轮子,是一件吃力不讨好的事情。因为每个人的选择是不一样的,而且在整个搭建的过程中,也能学习到很…

支持python的量化交易平台

现在支持python的量化平台有很多,其中的“佼佼者”无疑是聚宽量化平台和讯投QMT。 简单介绍下两款量化平台: 迅投QMT量化交易平台:支持VBA、python语言编程,可交易的标的包括股票、ETF、可转债。 优点包括:智能算法行…

主流量化交易与程序化交易平台整理

本文整理了主流的股票、期货与外汇程序化交易的平台与相关资料介绍,部分内容来自网络,图片来自各平台官网截图。 国内大众版 【名称】掘金量化 | MyQquant 【官网】https://www.myquant.cn/ 【简介】成立于2013年,深耕量化投资领域&#xf…

ISE 14.7安装教程——新版(普通安装环境以及难搞的Win10)

对于学习Xilinx系列FPGA的同学们一定少不了和ISE软件的接触,ISE软件最新的版本就是ISE14.7,但是这个版本在win10系统64位的电脑上安装可谓是问题百出,这篇文章的目的是让你会在你的电脑上安装ISE14.7,也是让ISE14.7在64位的win10电…

第2章 Linux操作系统应用入门

嵌入式系统就是一个专用的计算机系统,其上运行的操作系统一般采用Linux系统,既然如此我们就要学会如何使用Linux操作系统。 2.1启动Linux系统 1.在宿主机上启动虚拟机,点击启动Ubuntu系统。 如下图所示: 2、Ubuntu系统启动以后,…