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

2024-06-12 18:20

本文主要是介绍【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

这篇关于【Android】Android系统性学习——Android系统架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054976

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程