【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

相关推荐
麻花20131 分钟前
WPF学习之路,控件的只读、是否可以、是否可见属性控制
服务器·前端·学习
wywcool4 分钟前
JVM学习之路(5)垃圾回收
java·jvm·后端·学习
醇氧40 分钟前
ab (Apache Bench)的使用
linux·学习·centos·apache
小青头42 分钟前
numpy学习笔记
笔记·学习·numpy
Mephisto.java1 小时前
【大数据学习 | flume】flume的概述与组件的介绍
大数据·学习·flume
V搜xhliang02461 小时前
基于深度学习的地物类型的提取
开发语言·人工智能·python·深度学习·神经网络·学习·conda
豆 腐1 小时前
MySQL【四】
android·数据库·笔记·mysql
VertexGeek2 小时前
Rust学习(四):作用域、所有权和生命周期:
java·学习·rust
抱走江江3 小时前
SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)
学习·spring·spring cloud
想取一个与众不同的名字好难3 小时前
android studio导入OpenCv并改造成.kts版本
android·ide·android studio