Android | Android OS 源码结构

news2024/11/28 23:32:23
  • 参考:AndroidXRef (http://androidxref.com/)
  • 版本:Pie - 9.0.0_r3

在这里插入图片描述

整体结构

对于 Android OS 的源码目录来说,各个版本的结构大同小异,随不同版本特性会有个别目录差异。编译后会额外产生一个 out 文件夹用于存储编译产生的文件。对于 Android 9.0.0 系统来说,其源码根目录结构如下:

  • Android.bp:soong 编译配置文件,使用 soong 编译前会遍历源码目录树并找到所有 .dp 文件
  • art/:ART 运行环境
  • bionic/:针对 Android OS 定制的系统C库
  • bootable/:Android OS 启动引导相关
  • bootstrap.bash
  • build/:Android OS 编译规则存放路径
  • compatibility/:Android OS 兼容性计划
  • cts/:Android OS 兼容性测试套件标准
  • dalvik/:Android Dalvik 虚拟机相关
  • developers/:Android 开发者相关文档
  • development/:Android 应用开发基础设施相关
  • device/:Android OS 设备相关配置
  • external/:Android OS 开源模组相关
  • frameworks/:应用程序框架,Android 系统核心
  • hardware/:HAL 部分相关代码,硬件适配接口
  • kernel/:Linux Kernel,默认不提供,需要自己单独下载导入
  • libcore/:Android Java 核心类库
  • libnativehelper/:Android 动态库,实现 JNI 基础
  • Makefile:全局 Makefile 文件,指定编译规则
  • packages/:应用程序包
  • pdk/:Plug Development Kit,本地开发套件
  • platform_testing/:Android OS 测试程序相关
  • prebuilts/:x86 和 arm 架构下预编译资源
  • sdk/:Android Java 层 SDK 和模拟器
  • system/:Android 底层文件系统库、应用、组件相关
  • test/:Android Vendor 测试框架相关
  • toolchain/:Android 工具链相关
  • tools/:Android 工具文件相关

系统架构实现

Android OS 的系统架构从上(直接与用户交互)到下(直接与硬件交互)分为好几层,其中每层的核心代码位于如下位置:

  • System Apps:系统应用层部分的代码主要位于 package/ 路径下
  • Frameworks:应用框架层部分的代码主要位于 frameworks/ 路径下
  • Native C/C++ Libs:种类繁多,功能全面,并不完全位于同一路径中,常用且重要的 C/C++ 程序库包括:bionic/frameworks/native/external
  • Android Runtime:Android 运行时部分代码位于 art/ 路径下
  • HAL:硬件抽象层的代码主要位于 hardware/ 路径下
  • Linux Kernel:Linux 内核层主要位于 kernel/ 路径下

应用层

应用层在 Android 平台的最上层,是直接与用户交互的部分,包含系统内置应用与三方应用。在源码目录中应用层对应 package 目录,其结构如下:

  • apps/:系统核心应用程序
  • experimental/:第三方应用程序
  • inputmethods/:输入法路径
  • providers/:内容提供者路径
  • screensavers/:屏幕保护服务
  • services/:通信服务
  • wallpapers/:壁纸服务

应用框架

Android OS 核心部分,frameworks 部分。向上给应用层提供接口,向下与 C/C++ 程序库及 HAL 等衔接。应用框架部分的代码主要位于 frameworks/avframeworks/base 路径下。

framework 路径结构如下:

  • av/:多媒体框架相关
  • base/:Android Frameworks 的主要核心目录
  • compile/:编译相关
  • data-binding/:数据绑定相关组件
  • ex/:文件解析器相关
  • hardware/:硬件适配接口相关
  • layoutlib/:布局文件相关
  • minikin/:Android 原生字体效果
  • ml/:机器学习神经网络相关
  • multidex/:多 dex 文件加载相关
  • native/:native 实现相关
  • opt/:基础应用软件相关
  • rs/:Render Script,3D 接口相关
  • support/:frameworks 支持软件
  • wilhelm/:基于 Khronos 的 OpenSL ES 与 OpenMAX AL 的audio 与 multimedia 实现

frameworks/base 路径结构如下:

  • Android.bp
  • Android.mk
  • apct-tests/:性能优化测试
  • api/:Android 应用框架层声明类、属性、资源
  • CleanSpec.mk
  • cmds/:Android OS 启动时命令 commands
  • config/:配置相关
  • core/:frameworks 核心框架组件
  • data/:Android 资源,如字体、文本、音频、视频等数据文件
  • docs/:Android 项目说明文档
  • drm/:权限管理、数字解密等模块
  • graphics/:图像渲染模块
  • keystore/:密钥库
  • libs/:库文件
  • location/:位置信息模块
  • lowpan/:loWPAN 支持模块
  • media/:多媒体管理模块
  • MODULE_LICENSE_APACHE2
  • native/:本地方法模块
  • nfc-extras/:近场通信模块 NFC
  • NOTICE
  • obex/:蓝牙模块
  • opengl/:2D 与 3D 图形绘制
  • packages/:Android 应用层基础应用实现
  • pathmap.mk
  • PREUPLOAD.cfg
  • proto/:协议框架
  • rs/:资源框架
  • samples/:样例程序
  • sax/:XML 解析器模块
  • services/:系统服务程序
  • telecomm/:通信框架
  • telephony/:电话通讯管理相关模块
  • test-base/
  • test-legacy/
  • test-mock/
  • test-runner/
  • tests/:测试相关
  • tools/:工具相关
  • vr/:VR 相关模块
  • wifi/:Wi-Fi 相关模块

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

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

相关文章

Unity使用SteamVR2.0实现基本功能(瞬移,抓取物品,射线点击,UI交互等)

基础设置 把SteamVR的Player预制件拖到一个空场景,删掉场景内原本的相机 一.瞬移 新建一个Plane,当做地板找到SteamVR的人物瞬移控制器 Teleporting ,把它拖到场景里 1. 范围移动 我们需要在可以移动的区域,也就是碰撞器上,挂TeleportArea脚本 这个脚本会自动修改你的材质球…

抖音seo源码--开源,支持二开不加密

抖音seo源码,抖音seo矩阵系统源码技术搭建,抖音seo源码技术开发思路梳理搭建 开发思路: 抖音seo源码如何搭建?抖音seo排名优化系统软件部分源码分析,代码打包中。。。 场景:在 python 中,你可…

windows下修改PyCharm默认terminal 在Git Bash中使用conda

windows下修改PyCharm默认terminal & 在Git Bash中使用conda windows下修改PyCharm默认terminal在Git Bash中使用conda windows下修改PyCharm默认terminal PyCharm的terminal默认使用的是powershell,但是conda环境是通过cmd运行的,因此可以将PyChar…

安捷伦N5182A是德KEYSIGHT N5182B 100KHZ至3G/6G信号发生器

Agilent N5182A、Keysight N5182A MXG 射频矢量信号发生器,100 kHz - 3 GHz 或 6 GHz ​Keysight N5182A (Agilent) MXG 射频矢量信号发生器具有快速频率、幅度和波形切换、带电子衰减器的高功率和高可靠性 – 所有这些都集成在两个机架单元 (2RU) 中。Keysight N5…

H743 USBHOST协议栈 CPU占用率高的问题。

经过查看,是因为USBHOST频繁的进入中断导致,单步执行发现,是因为发生了USB_OTG_HCINT_CHH或者USB_OTG_HCINT_NAK中断了,只在CHH中断服务函数里,给USB主线程发了1个消息,又引起了USBH_Process_OS主线程的频繁…

YOLOV7训练TT100K交通标识符数据集

《临江仙》 作者:缠中说禅 浊水倾波三万里,愀然独坐孤峰。龙潜狮睡候飙风。无情皆竖子,有泪亦英雄。 长剑倚天星斗烂,古今过眼成空。乾坤俯仰任穷通。半轮沧海上,一苇大江东。 一、yolov7环境搭建 参…

【内网穿透】远程访问RabbitMQ服务

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章:无公网IP&…

【C语言】刷题训练营 —— 每日一练

文章目录 前言 BC113 小乐乐定闹钟BC114 小乐乐排电梯BC115 小乐乐与欧几里得BC116 小乐乐改数字BC107 矩阵转置BC117 小乐乐走台阶BC118 小乐乐与序列BC119 小乐乐与字符串BC121 小乐乐学编程BC122 小乐乐算平均分完结 前言 大家好,继续更新专栏 c_牛客&#xff0…

【C++】二叉搜索树Binary Search Tree

Binary Search Tree 二叉搜索树的概念二叉搜索树的操作二叉搜索树的实现查找插入删除 二叉搜索树的应用二叉搜索树的性能分析 二叉搜索树的概念 二叉搜索树又被称为二叉排序树,顾名思义,当我们使用中序遍历时,会得到一个有序的序列。二叉搜索…

进程信号的保存和处理

目录 🏆一、信号的保存 ①信号的捕捉 ②sigset_t ③sigaction 🏆二、不可重入函数 🏆三、volatile 🏆四、SIGCHLD 🏆一、信号的保存 在聊信号保存之前,我们不妨想一个问题,如果把所有信号…

易岸教育:高端篇!公务员面试经验总结!

根据众多应聘者的面试经验,总结出以下几点供应聘者参考: 1、注意着装。 适当提高服装档次。 衣着得体大方,可以提升形象,增强自信。 2、安心。 要以一颗平常心正确对待面试,就要有受挫的心理准备。 即使面试失败了一…

【Python】学习导论:Python 简介

前言:XMind 脑图大纲 一、Python 的发展和演变 1.1 Python 1.0(1994年) 版本:Python 的第 1 个正式版本典型里程碑:包含了基本的语言特性和标准库 1.2 Python 2.0(2000年) 版本:Pyt…

XDP入门--通过用户态程序自动加载与卸载eBPF程序字节码到网卡

本文目录 1、测试环境1、eBPF字节码的源代码实现3、用户态应用程度实现简介4、编译与运行5、运行状态验证 通过文章XDP入门–之hello world 我们知道,可以通过iproute2的ip工具向网卡去加载和卸载eBPF程序的字节码。但这个使用起来不太方便。而且在需要网卡恢复正常…

浅析Java 多线程中的锁

前言 随着互联网技术的快速发展,多线程编程已经成为了现今编程领域中必不可少的知识点之一。Java 是一种广泛使用的编程语言,也是一些底层应用程序和高并发应用程序的首选语言。而 Java 提供的多线程编程机制和相关的锁机制,则成为了 Java 开…

SpringBoot 上传图片-指定目录按照日期存储

SpringBoot 上传图片-指定目录按照日期存储 1. 在配置文件中指定文件保存根目录 我用的yaml,用properties也行 file-save-path: D:/upload/2. 文件上传接口 package com.admin.controller.wechat;import cn.hutool.core.lang.UUID; import com.redic.base.Result; import com…

SpringMVC 程序开发

✏️作者:银河罐头 📋系列专栏:JavaEE 🌲“种一棵树最好的时间是十年前,其次是现在” 目录 什么是 Spring MVCMVC 定义 怎么学 Spring MVCSpring MVC 创建和连接创建 Spring MVC 项目RequestMapping 注解介绍PostMappi…

二叉搜索树的实现(C语言)

目录 前言: 一:准备工作 (1)需要的头文件 (2)树节点结构体描述 (3)初始化 二:指针 三:插入新节点(建树) (1)生成一个新节点 (2)找插入位置 四:查找和遍历 (1)查找 (2)遍历 五:删除节点 六&…

mysql 主从同步

① 修改 master 配置文件② 新建同步账号③ 创建数据库④ 修改 slave 配置文件⑤ 配置主从关系⑥ 检验主从结果 角色ipmaster192.168.233.100slave1192.168.233.101slave2192.168.233.102 禁用 selinux 跟 firewal l情况下: ① 修改 master 配置文件 vim /etc/my…

NEFU linux实验二

在linux中,家目录又称“home目录”、“主目录”,是用户的宿主目录,通常用来保存用户的文件,可以使用“~”来表示。一个用户登录系统,进入后所处的位置就是“/home”,即家目录;root用户的家目录为…

路径规划算法:基于鸡群优化的路径规划算法- 附代码

路径规划算法:基于鸡群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于鸡群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法鸡群…