Android代码结构图

Android架构

AOSP 的软件堆栈包含以下层,如图:
在这里插入图片描述

  • Android app:系统原生一些应用,位于system/app,像图库、文件管理器等
  • Privileged app:系统原生一些高特权应用,位于system/priv-app,像SettingsProvider、TelephonyProvider等
  • Device manufacturer app:厂商定制的应用,一般厂商定制的内容位于vendor目录下
  • Android API:供开发者使用的api, 在Android Studio中下载的Android SDK Platform
  • Android framework:Android fwk,像AMS,WMS等都属于fwk层
  • System services:系统服务,像system_server、SurfaceFlinger 和 MediaService等,Android 框架 API 提供的功能可以与系统服务进行通信,以访问底层硬件
  • Android Runtime:AOSP 提供的 Java 运行时环境。 ART 会将应用的字节码转换为由设备运行时环境执行的处理器专有指令
  • Hardware abstraction layer :HAL 是一个抽象层,其中包含硬件供应商要实现的标准接口。HAL 让 Android 无需关注较低级别的驱动程序实现。借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统
  • Native daemons and libraries:原生守护程序包括 init、healthd、logd 和 storaged,这些守护程序直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现。原生库包括 libc、liblog、libutils、libbinder 和 libselinux,这些原生库直接与内核或其他接口进行交互,并且不依赖于基于用户空间的 HAL 实现
  • Kernel:内核是操作系统的核心部分,与设备上的底层硬件进行通信

源码代码结构

~/source$ tree -d -L 1
├── art:全新的ART运行环境,Android5.0之后java虚拟机就使用ART
├── bionic :提供了一个简化的 C 库实现,用于 Android 操作系统  
├── bootable:包含引导加载程序代码和系统映像  
├── build:构建系统脚本和工具
├── cts:Android 兼容性测试套件
├── dalvik:提供了 Dalvik 虚拟机的实现,是 Android 早期的基于堆栈的 Java 执行环境
├── developers:提供示例、文档和工具,以帮助开发者开发 Android 应用
├── development:应用程序开发相关 提供应用开发的工具, 应用例子,monkey命令,shell脚本和python脚本
├── device:设备相关配置 设备产品定制目录, 该目录是厂商和产品公司定制文件比较多的地方
├── external:开源模组相关文件 外部第三方开源的库和工具,比如ppp, wpa_supplicant, libz, libcurl等
├── frameworks:应用程序框架,Android系统核心部分,由Java和C++编写, 包括各种系统资源, 后台服务、子系统的native代码
├── hardware:主要是硬件抽象层的代码, 如gps, wifi, viberate
├── kernel:主要是硬件抽象层的代码, 如gps, wifi, viberate
├── libcore:核心库相关文件 Android 系统中支持众多 Java 标准的库,例如 java.lang 包,libart库,JSON库
├── libnativehelper:核心库相关文件 Android 系统中支持众多 Java 标准的库,例如 java.lang 包,libart库,JSON库
├── 
├── out:编译完成后代码输出在此目录
├── packages:系统内置的app源码
├── pdk:Platform Development Kit 的缩写,平台开发套件, PDK的目标是帮助芯片组供应商和原始设备制造商迁移到新的版本
├── platform_testing:Android平台测试程序
├── prebuilts:预编译文件夹, x86和arm架构下预编译的一些资源,如ndk工具包, gcc编译器等
├── sdk:sdk和模拟器,编译sdk规则目录, Android的SDK包含该平台为应用程序开发人员提供的开发工具,主要是所有公开API的集合,应用程序开发人员可以借助SDK中的API快速的进行应用的开发.
├── system:Android底层文件系统库、应用和组件,如busybox, init进程
├── test:Android Vendor测试框架,如vts(vendor test suit) ,Mainline Test Suite (MTS)
├── toolchain:工具链文件,一些python测试脚本
├── tools:工具文件,一些特殊命令, 如acloud命令用于连接谷歌云端工作站的,apkzlib用于apk打包的
└── vendor:厂商定制目录

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

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

相关文章

深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例

深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例 摘要 本文将详细探讨一种利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,并通过分析给定代码示例,揭示其工作原理和潜在风险。我们将重点讨论如何在靶机上实现调用计算器…

ansible的流程控制

Ansible 剧本的流程控制通过任务的顺序执行、条件语句(when)、循环(with_items 等)、错误处理(ignore_errors 和 block)、以及任务标签和角色来实现。可以根据条件动态控制任务执行,使用循环处理…

CAD图纸加密措施有哪些,CAD图纸加密禁止复制打印工具

CAD图纸加密措施有哪些,CAD图纸加密禁止复制打印工具 CAD图纸作为核心的设计成果,其安全性和保密性至关重要。 为了有效防止图纸数据泄露,企业需采取一系列加密措施,并借助专业的加密工具来实现这一目标。 域智盾软件&#xff0…

laya游戏引擎中打包之后图片模糊

如下图正常运行没问题,打包之后却模糊 纹理类型中的默认类型都是精灵纹理,改为默认值即可。注意:要点击“应用”才可有效。精灵纹理类型会对图片进行渲染处理,而默认值 平面类型不会处理图片。

本地电脑使用命令行上传文件至远程服务器

将本地文件上传到远程服务器,在本地电脑中cmd使用该命令: scp C:/Users/"你的用户名"/Desktop/environment.yml ws:~/environment.yml 其中,C:/Users/“你的用户名”/Desktop/environment.yml是本地文件的路径, ~/en…

每日十题八股-2024年12月19日

1.Bean注入和xml注入最终得到了相同的效果,它们在底层是怎样做的? 2.Spring给我们提供了很多扩展点,这些有了解吗? 3.MVC分层介绍一下? 4.了解SpringMVC的处理流程吗? 5.Handlermapping 和 handleradapter有…

用户体验与SEO的结合:如何优化网站以提升谷歌排名?

在SEO领域,算法、关键词和技术手段固然重要,但归根结底,谷歌的核心理念是提供最优质的用户体验。无论算法如何变化,用户体验始终是影响谷歌排名的重要因素之一。一个友好、直观的网站不仅能留住用户,还能直接提升搜索引…

笔记本重装系统教程【详细教程】

一、装机前说明 各位有装机需求的伙伴,请根据自己的电脑配置选择合适操作系统,可以实现自己装机的伙伴,相信大家这点可以确认好。 ———————————————————————— 我的配置: 我的电脑是联想拯救者lenovoY7000…

【我的 PWN 学习手札】IO_FILE 之 stdin任意地址写

我们知道,stdin会往“缓冲区”先读入数据,如果我们劫持这个所谓“缓冲区”到其他地址呢?是否可以读入数据到任意地址?答案是肯定的。 注意!代码中的“-------”分隔,是为了区分一条调用链上不同代码片段&am…

【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)

本文项目编号 T 018 ,文末自助获取源码 \color{red}{T018,文末自助获取源码} T018,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【AIGC安全】CCF-CV企业交流会直播回顾:探寻AI安全治理,共筑可信AI未来

文章目录 一、活动背景:AI技术快速发展与安全治理需求迫切二、论坛内容金耀辉:智能共生时代:平衡生成式AI的创新与风险何延哲:人工智能安全检测评估的逻辑和要点谢洪涛:面向特定人物深度伪造视频的主动防御与被动检测技…

2024年12月英语六级CET6写作与翻译笔记

目录 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可行的目标 2 翻译 2.1 洋山港(Yangshan Port) 2.2 中国航天事业 2.3 北斗卫星导航系统 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天,在使用Subversion提交代码到服务器时,发现无法提交*.a、*.so等二进制文件,右击这些文件,发现其属性为ignores。     问题原因:SVN的配置文件里,屏蔽了*.a、*.so文件的上传与下载,并把这些…

linux-18 关于shell(十七)file命令

在linux里面是不以后缀名来区分文件类型的,它跟windows不一样,windows里面都会以后缀名来区分文件类型,比如说,.mp3,windows就会把它视为音乐文件,.txt就会视为纯文本文档,.png就会视为图片文档…

品牌控价:守护价值,引领渠道健康发展

在当今竞争激烈且多元化的商业环境中,品牌的发展之路犹如一场充满挑战与机遇的漫长征程。随着品牌影响力的逐步扩大,其销售渠道也日益丰富多样,尤其是电商平台的蓬勃兴起,使得品牌产品的销售链接如繁星般繁多。然而,这…

OpenEuler Linux上怎么测试Nvidia显卡安装情况

当安装好显卡驱动后怎么样知道驱动程序安装好了,这里以T400 OpenEuler 正常情况下,我们只要看一下nvidia-smi 状态就可以确定他已经正常了 如图: 这里就已经确定是可以正常使用了,这里只是没有运行对应的程序,那接来下我们就写一个测试程序来测试一下:以下代码通过AI给出然后…

shell5

字符串运算符 首先我们在终端利用vim打开u.sh str1"hello" str2"hello" if [ "$str1" "$str2" ]; thenecho True elseecho false fi我们把hello改为Hello,看一下大小写是否敏感 str1"Hello" str2"hello…

Linux-ubuntu之主频和时钟配置

Linux-ubuntu之主频和时钟配置 一,主频二,其它时钟配置1.PLL2和PLL3的PFD0-3设置2.AHB_CLK_ROOT3.IPG 和 PERCLK时钟 三,总结 一,主频 24MHz 晶振为内核和其它外设提供时钟源,经电路后到PLL1变为996MHZ,再…

深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业

复杂事件处理(CEP)是一种对事件流进行分析的技术,它能够识别出数据流中的事件序列是否符合特定的模式,并允许用户对这些模式进行处理。Flink CEP 是 CEP 在 Apache Flink 中的具体实现,是 Apache Flink 的一个库&#…

华为数通最新题库 H12-821 HCIP稳定过人中

以下是成绩单和考试人员 HCIP H12-831 HCIP H12-725 安全中级