【Android】Android系统性学习——Android系统架构

前言

部分内容参考《Android进阶解密》 – 刘望舒

1. Android版本

官方链接:https://developer.android.com/studio/releases/platforms
里面有各个版本的官方文档,有些新功能的用法在这里面。
现在做安卓11,有时候需要向下兼容

2. AOSP 和 ATV

Android系统根据是否需要认证分为AOSP系统和ATV系统。

  • AOSP: Android开源系统,全称为Android Open Source Project
  • ATV: 产品依照 Android TV 制式标准提供统一的操作体验,并且通过Google 认证。

2.1 AOSP

定义:AOSP是指Android开源项目,它是由Google发起并维护的一个开源软件项目,旨在提供一个开放、自由、可定制的移动操作系统。
特点:AOSP是Android的原始代码库,包括Android操作系统的核心代码、应用程序框架、系统应用和工具等。它是开放源代码的,任何人都可以访问、查看和下载AOSP的源代码,并根据需要进行修改和定制。
用途:AOSP作为Android操作系统的基础,被广泛用于移动设备、平板电脑、智能手表、智能电视、汽车娱乐系统等各种设备。开发者可以基于AOSP构建自己的Android发行版,或者为特定设备进行定制开发。
更多解释:

  1. AOSP是安卓开源项目,是一个由Google收购并开源的手机操作系统项目(主要协议是Apache 2.0),基于Linux内核核心代码,截至目前大量安卓阵型的手机厂商以及上下游供应商参与了安卓项目的开发,主要包括华为、索尼、三星、Intel、高通等,其中华为是安卓项目代码贡献全球前三名的厂商。
  2. AOSP是手机操作系统的核心代码,但不是全部。手机操作系统需要在AOSP基础上,增加各种硬件驱动、软件框架层、以及各类系统应用,才能成为我们通常所说的手机操作系统。所以,AOSP通常是指安卓手机操作系统的“内核”。在安卓手机的系统描述中,通常有一个“内核版本”,即为AOSP。
  3. 安卓系统通常即为AOSP,安卓手机描述的Powered by Android,这里的Android即是AOSP。由谷歌定期牵头发布的安卓大版本也是指AOSP。AOSP是免费提供给所有手机厂商使用的。
  4. 目前安卓阵营各厂商(除了华为)并不只是使用了免费的AOSP,还使用了谷 歌发布的收费的GMS(谷歌服务框架)以及谷歌的各类APP(等等)。虽然国内手机可以不使用谷歌app,但是由于早期GMS属于AOSP,因此大量的安卓App依赖了GMS的许多功能接口,随着后期谷歌把大批GMS代码从AOSP项目移出转为收费GMS(这段历史也是促使华为启动自研鸿蒙的重要原因之一),所以谷歌几乎控制了整个安卓生态。这也是为什么安卓标榜是免费开源项目而所有厂商都离不开谷歌的核心原因。
  5. 所以,一般意义上的“安卓”是指:AOSP + GMS,这两者构成了安卓开发者使用的基础SDK,也是几乎所有安卓App的基础。其中,AOSP开源免费,GMS商用收费。
  6. 鸿蒙(HarmonyOS)是由华为开发的开源手机操作系统项目,对标的是AOSP,同样基于Linux内核核心库,并使用了AOSP部分开源代码用于安卓app兼容(符合Apache开源协议)。由于鸿蒙并没有直接使用AOSP软件,因此这是一个独立开源项目,最直接而言不需要Powered by Android。类比Linux也使用了Minix的部分代码,AOSP也使用了Linux部分代码,但他们都是一个新的独立项目一个道理。
  7. 华为手机操作系统包括HarmonyOS + HMS,后者是对标谷歌GMS的商业产品,用于支持开发者为华为手机开发App。由于HMS是后来者,因此HMS许多接口设计也是尽量兼容GMS,跟鸿蒙兼容AOSP一个道理。如果鸿蒙只是Fork AOSP,拉个分支的话,在开源圈子里就没有前途了。鸿蒙目前主打的是整体架构上与AOSP不同(是微内核架构,AOSP是宏内核),以及集成了分布式计算框架(用于手机与其他设备的互联,典型如手表、车、家电、耳机等),这也是鸿蒙1+8+N大生态的技术基础。而谷歌也在研发一个类似的终端操作系统(内部被称为安卓第二)Fushia。
  8. 由于手机应用生态很大程度依赖GMS,为了海外市场,所以小米、OPPO、Vivo、一加等厂不大可能全部使用HMS,很大一部分可能,中低端使用鸿蒙系统,高端继续使用安卓,差异化竞争。当然,如果鸿蒙用户反馈很好的话,不排除高端机也使用鸿蒙的可能性。毕竟鸿蒙的目标主要是在“万物互联”的智慧生活。所以,家电、车、可穿戴设备、运动健康等方面才是鸿蒙系统的目标。鸿蒙不只是个手机操作系统,而是个“大终端”操作系统。是未来的大趋势。

2.2 ATV

定义:Android TV是一种Android操作系统的变种,专门设计用于智能电视和媒体播放器。它是AOSP的一个派生版本,经过了针对大屏幕电视的定制和优化。
特点:Android TV保留了Android操作系统的核心特性,如Android应用程序生态系统、多媒体播放功能、网络连接和互联网访问等。但它还具有专门针对电视观看体验的用户界面和交互方式,包括遥控器支持、大屏幕适配、焦点导航等。
用途:Android TV被广泛应用于智能电视、电视机顶盒、媒体播放器和游戏机等娱乐设备。用户可以通过Android TV访问各种应用程序,观看视频内容、播放游戏、浏览互联网等,从而将智能功能引入电视屏幕。

3. Android机顶盒硬件原理框图及Android机顶盒不支持的功能

  • 主控,EMMC,DDR,GPIO,USB,HDMI,Tuner,网口,WiFi,蓝牙,红外等
  • 不支持的功能:触摸屏,电话,相机,NFC,GPS等移动功能

第一章 Android系统架构

1.1 Android平台架构

官方文档:https://developer.android.com/guide/platform
Android系统架构分为五层:从上到下依次是应用层、应用架构层、系统运行库层、硬件抽象层和Linux内核层,如图:
在这里插入图片描述

1.1.1 应用层(System Apps)

系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。

1.1.2 应用框架层(Java API Framework)

API (Application Programming Interface)
应用框架层为开发人员提供了开发应用程序所需要的API,我们平常开发应用程序都是调用这一层所提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要组件:
在这里插入图片描述

1.1.3 系统运行库层

从Android系统框架图上可以看出,系统运行库层分为两部分,分别是 C/C++ 程序库和 Android 运行时库,下面分别进行介绍:

(1)原生C/C++程序库
在这里插入图片描述
(2)Android运行时库
运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

1.1.4 硬件抽象层(HAL / HIDL)

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

1.1.5 Linux内核层

Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。
Android系统的五层架构就讲到这,了解以上的知识对以后分析系统源码有很大的帮助。

1.2 Android系统源码目录

学习Android系统源码,需要掌握系统源码目录。可以访问下面的连接来阅读系统源码
https://android.googlesource.com/
至于Android系统源码目录可以参考:
Android系统五层架构

1.2.1 整体结构

各个版本的源码目录基本是类似的,如果是编译后的源码目录,会多一个out文件夹,用来存储编译产生的文件。Android 11 的系统目录如下:

暂时无法在飞书文档外展示此内容

可以看出,系统源码分类清晰,并且内容庞大且复杂。接下来分析packages中的内容,也就是应用层部分

1.2.2 应用层部分

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都是在应用层。源码根目录中的packages目录对应着系统应用层。它的目录结构如表
暂时无法在飞书文档外展示此内容
从目录结构可以发现,packages目录存放着系统核心应用程序、第三方的应用程序和输入法等等,这些应用都是运行在系统应用层的,因此packages目录对应着系统的应用层。
在这里插入图片描述

1.2.3 应用框架层部分

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如表
在这里插入图片描述

1.2.4 C/C++程序库部分

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

讲完 C/C++程序库部分,剩下的部分我们已经给出:Android运行时库的代码放在art/目录中。硬件抽象层的代码在hardware/目录中,这一部分是手机厂商改动最大的一部分,根据手机终端所采用的硬件平台会有不同的实现。

1.3 源码阅读

这里有Android10 的源码:https://www.androidos.net.cn/android/10.0.0_r6/xref
Android 7.1 到 Android 13 的系统源码:http://aospxref.com
下载源码:https://source.android.google.cn/docs/setup/download?hl=zh-cn
源码提交:https://android.googlesource.com/platform/manifest
https://blog.csdn.net/cjohn1994/article/details/127467165

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

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

相关文章

【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题

在 Python 中,warnings 是一个内置模块,用于发出有关程序执行的警告信息,这些警告信息通常是关于程序行为的潜在问题。 不过,这些问题通常不是致命的错误,只不过是展示我们代码中潜在的问题,或不推荐的做法…

软件架构搞好了,还用担心代码可读性差?

目录 一、架构的概念及由来 二、小系统也需要架构思想 三、实现架构的思路 一、架构的概念及由来 嵌入式软件架构是指在嵌入式系统中用于组织和管理软件组件的结构和设计。嵌入式软件架构的出现是为了解决嵌入式系统中软件复杂度和系统要求不断增加的挑战。以下是嵌入式软件架…

【STM32进阶笔记】GPIO端口

前段时间由于其他原因,专栏暂停更新了较长一段时间,现在恢复更新,争取继续为大家创造有价值的内容,期待大家的订阅关注,欢迎互相学习交流。 在STM32速成笔记系列专栏中其实已经对GPIO的一些必要知识进行了介绍&#xf…

GPT4O给Qwen2生成的高考作文打分56分,从“小白”进阶技术大神的开发者基于国产GPU推理模型效果可还行?

OpenI启智社区上线的【芯动开源】首场活动-天数智芯挑战专场即将迎来最后一周的冲刺阶段,自2024年5月27日上线以来,这期间,我们见证了天数智芯通用GPU加速卡在适配AI模型方面的无限可能与开发者们开源精神的璀璨光辉。 在短短的两周时间里&a…

代码随想录算法训练营第二十三天|669. 修剪二叉搜索树、 108.将有序数组转换为二叉搜索树、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 文档讲解:代码随想录 状态:还可以 思路: 如果节点的值在[low, high]之间,则递归修剪它的左子树和右子树。 节点值小于low:如果节点的值小于low&#xff…

智慧工厂自动装车解决方案:H13三维轮廓扫描激光雷达

激光雷达在智慧工厂自动装车的应用场景在智慧工厂的自动装车场景中,激光雷达的应用显得尤为关键。这种技术以其精确的测量和定位能力,助力自动化装车的每一个环节,大大提高了装车的效率和准确性。 首先,激光雷达在车辆定位方面发挥…

[next.js] svgr/webpack

nextjs如何配置svg文件,使其像react组件一样导入? 当前next.js 开发环境我使用了--turbo 来开启turbopack加速文件构建,所以之前的一些webpack loader之类的无法正常工作。通过搜索发现一般都是使用svgr/webpack来处理svg,打开svgr官网发现…

vscode 连接 GitHub

文章目录 连接 GitHub一、通过 SSH 连接 github二、通过 HTTPS 连接 github 连接 GitHub 在 vscode 中首次使用 git push 命令时会要求输入 github 账户的 username 和 password,这种基本身份验证在 2021.8.13 以前还是可以的,之后的话,就会…

Luma AI 推出梦幻机:据说吊打Sora和快手可灵(KLING)|TodayAI

近日,美国初创公司 Luma AI 宣布推出其最新的文本生成视频工具——梦幻机(Dream Machine)。这一消息发布的时间正好在中国科技公司快手推出其文本生成视频模型可灵(KLING)几天之后,标志着视频生成领域的又一…

Android Compose 十一:常用组件列表 compose自己个的 下拉刷新

列表下拉刷新 material3 还没有下拉刷新功能material:1.3.0 之后 swiperefresh 被弃用 被PullRefresh替代使用PullRefresh 需要添加依赖 implementation ‘androidx.compose.material:material:1.6.8’ 先上代码 var refreshing by remember {mutableStateOf(false)} val…

线性代数|机器学习-P12Ax=b条件下x最小值问题

文章目录 1. Axb下的最值问题-图形转换2. Gram-Schmidt 标准形3. 迭代法-Krylov子空间法 1. Axb下的最值问题-图形转换 假设我们有一个直线方程如下: 3 x 1 4 x 2 1 \begin{equation} 3x_14x_21 \end{equation} 3x1​4x2​1​​ 在二维平面上,各个范…

集成学习 #数据挖掘 #Python

集成学习是一种机器学习方法,它通过结合多个模型的预测结果来提高整体性能和稳定性。这种方法的主要思想是“集合智慧”,通过将多个模型(比如决策树、随机森林、梯度提升机等)的预测集成起来,可以减少单个模型的过拟合…

C# WPF入门学习主线篇(三十一)—— MVVM模式简介

C# WPF入门学习主线篇(三十一)—— MVVM模式简介 MVVM(Model-View-ViewModel)模式是WPF开发中的一种重要架构模式。它通过将用户界面(View)与业务逻辑和数据(Model)分离,…

【文献阅读】一种多波束阵列重构导航抗干扰算法

引言 针对导航信号在近地表的信号十分微弱、抗干扰能力差的问题,文章提出了自适应波束形成技术。 自适应波束形成技术可以分为调零抗干扰算法和多波束抗干扰算法。 调零抗干扰算法主要应用功率倒置技术,充分利用导航信号功率低于环境噪声功率的特点&…

三个pdf工具和浏览软件(pdftk,muppdf,epdfview)

安装pdftk pdftk是一款功能强大的PDF处理工具,主要用于对PDF文件进行各种操作。它提供了丰富的功能,包括但不限于合并、拆分、旋转、加密、解密、添加水印、从PDF文档中解出附件等。pdftk分为图形界面版本和命令行版本,适用于不同的用户需求…

使用ant-design/cssinjs向plasmo浏览器插件的内容脚本content中注入antd的ui组件样式

之前写过一篇文章用来向content内容脚本注入antd的ui:https://xiaoshen.blog.csdn.net/article/details/136418199,但是方法就是比较繁琐,需要将antd的样式拷贝出来,然后贴到一个单独的css样式文件中,然后引入到内容脚…

活动会议发布平台,让你我的距离再近点

随着科技、经济的不断发展,生活水平的不断提高,人们不仅在工作中追求快捷高效的工作工具,生活中对参加各项活动的热情也不断提升。活动会议发布平台以其便捷、高效的使用方式被越来越多人采用。 一. 活动会议发布平台的用户画像 …

博物馆藏品管理的重要性

博物馆是人们了解历史文化、传承文明的重要场所。而博物馆的藏品管理是博物馆的核心工作之一,对于展现博物馆的魅力、吸引观众的眼球有着至关重要的影响。并且博物馆藏品管理是一项复杂且专业的工作,它涉及到多个方面,包括但不限于藏品的收集…

租房项目之并发缺失数据问题

前奏:本项目是一个基于django的租房信息获取项目。本次博客牵扯到两个版本,集中式分布以及分布式部署(两个版本的ui不同,集中式用的是老版ui,分布式使用的是新版ui); 项目链接:http…

Linux2-系统自有服务防火墙与计划任务

一、什么是防火墙 防火墙主要用于防范网络攻击,防火墙一般分为软件防火墙、硬件防火墙 1、Windows中的防护墙设置 2、防火墙的作用 3、Linux中的防火墙分类 Centos6、Centos6>防火墙>iptables防火墙 防火墙系统管理工具 Centos7>防火墙>firewalld防火…