安卓进阶之android系统架构

这篇具有很好参考价值的文章主要介绍了安卓进阶之android系统架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安卓进阶之android架构

安卓进阶躲不开阅读源码和深入了解安卓的底层,这是一篇入门级别的文章,可以对安卓架构有个大体的认识。

AOSP与Android系统架构

首先要理解andriod和AOSP的关系,我们日常开发的安卓跟市面上的安卓不是一个意思,我们开发的是安卓app,市面上的安卓其实是安卓系统。

维基百科:Android是基于Linux 内核和其他开源软件的修改版本的移动操作系统,主要为智能手机和平板电脑等触摸屏移动设备设计。

官方文档:**Android 开放系统平台 (Android open source project AOSP)**是公开可用且可修改的 Android 源代码。任何人都可以为他们的设备下载和修改 AOSP。 AOSP 提供完整且功能齐全的 Android 移动平台实现。

五层的安卓架构(下图左边),一些书籍或者博客上常见的这张图;最新版可看官方文档(回头看这篇文章的时候可能也会过时)。以下介绍会结合两个图进行说明。

最新的AOSP软件堆栈架构如下图右边,即我们说的android系统架构:

安卓进阶之android系统架构

详细介绍如下:

应用层(System apps)

包括Android appPrivileged appDevice manufacture app等应用程序,system apps的意思就是手机系统中的apps,两个版本在这一层是一样的。

  • 安卓应用(Android app):仅使用 Android SDK 中的 Android API 创建的应用程序。
  • 特权应用程序(Privileged app):结合使用 Android 和系统 API 创建的应用程序。这些应用程序必须作为特权应用程序预安装在设备上。
  • 设备制造应用程序(Device manufacture app):使用 Android API、系统 API 和直接访问 Android 框架实现的组合创建的应用程序。

应用框架层(Java API Framework)

我们平时开发都是用到这一层提供的API,而这一层是java编写的,所以称为Java API。Android 4大组件,6大布局,view等系统定义的原生组件都在这层。

由于Framkwork层和Android SDK 是有交集的(或者是包含关系),旧版本中其实是把Framework层和Android SDK合并作为一层去介绍了。

  • Framework层

    又称安卓框架。一组 Java 类、接口和其他构建应用程序的预编译代码。该框架的某些部分可通过使用 Android SDK 的 Android API 公开访问。Android 框架代码在应用进程中运行。

  • Android SDK = Android API + System API

    又称安卓开发工具包。一个软件开发工具包,用于创建与 Android 框架交互的应用程序。 Android SDK 由适用于所有应用程序的 Android API 和仅适用于特权应用程序的系统 API 组成。

后续的源码阅读会经常看到ActivityManagerService(AMS)、WindowManagerService(WMS)这些,这些都是FrameWork层的源码。

名称 功能描述
Activity Manager(活动管理器) 管理各个应用程序生命周期,以及常用的导航回退功能
Location Manager(位置管理器) 提供地理位置及定位功能服务
Package Manager(包管理器) 管理所有安装在Android系统中的应用程序
Notification Manager(通知管理器) 使得应用程序可以在状态栏中显示自定义的提示信息
Resource Manager(资源管理器) 提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等
Telephony Manager(电话管理器) 管理所有的移动设备功能
Window Manager(窗口管理器) 管理所有开启的窗口程序
Content Provider(内容提供者) 使得不同应用程序之间可以共享数据
View System(视图系统) 构建应用程序的基本组件

系统服务(System services)

这个是五层架构中没有提及的部分,是在新版中单独分离出来的一层。

系统服务是模块化的、集中的组件,例如system_server 、SurfaceFlinger 和 MediaService。

**Android 框架 API 公开的功能与系统服务通信以访问底层硬件。**所以它夹在应用框架层和运行库层之间。

系统运行库层

旧版中系统运行库包括native库和ART库。

新版中两者是分开的,而且并不在同一层,旧版中的本机C/C++库,在新版中扩展为本机的进程和库。

  • ART库:Android run time是 AOSP提供的Java应用运行环境。所以我们的程序采用java语言编写, 程序在Android运行时中执行。ART 将应用程序的字节码转换为特定于处理器的指令,这些指令由设备的运行时环境执行。

    运行时库包括核心库和ART(Android5.0后,Dalvik被ART取代),其中核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。

  • Native daemons and libraries:本机守护进程和库。

    • 该层中的本机守护进程包括inithealthdlogdstoraged 。这些守护进程直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。
    • 该层中的本机库包括libclibloglibutilslibbinderlibselinux 。这些本机库直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。

硬件抽象层(HAL)

HAL 是一个抽象层,具有供硬件供应商实现的标准接口。 HAL 允许 Android 不了解较低级别的驱动程序实现。使用 HAL 允许在不影响或修改更高级别系统的情况下实现功能。

Linux 内核层(Linux Kernel)

作为任何操作系统的核心部分,内核与设备上的底层硬件进行对话。在可能的情况下,AOSP 内核被拆分为与硬件无关的模块和特定于供应商的模块。

andriod内核是基于Linux内核的,在此基础上添加了关于安卓的驱动。

系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。

其中的驱动包括:音频(Audio)、android IPC机制(Binder机制)跨进程通讯、显示 (Display)主要是屏幕显示、按键(Keypad) 处理按键的分发等、蓝牙(BlueTooth)、相机(Camera)、内存分配与共享(Shared Memory)、USB、WIFI、电源管理(power management)

Andriod系统源码目录

官方网站:https://cs.android.com/android/platform/superproject

国内网站:https://www.androidos.net.cn/android/10.0.0_r6/xref

整体架构

安卓进阶之android系统架构

Android源码根目录 描述
abi 应用程序二进制接口
art 全新的ART运行环境
bionic 系统C库
bootable 启动引导相关代码
build 存放系统编译规则及generic等基础开发包配置
cts Android兼容性测试套件标准
dalvik dalvik虚拟机
developers 开发者目录
development 应用程序开发相关
device 设备相关配置
docs 参考文档目录
external 开源模组相关文件
frameworks 应用程序框架,Android系统核心部分,由Java和C++编写
hardware 主要是硬件抽象层的代码
libcore 核心库相关文件
libnativehelper 动态库,实现JNI库的基础
ndk NDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码
out 编译完成后代码输出在此目录
packages 应用程序包
pdk Plug Development Kit 的缩写,本地开发套件
platform_testing 平台测试
prebuilts x86和arm架构下预编译的一些资源
sdk sdk和模拟器
system 底层文件系统库、应用和组件
toolchain 工具链文件
tools 工具文件
Makefile 全局Makefile文件,用来定义编译规则

应用层部分

应用层位于整个Android系统的最上层,源码根目录中的packages目录对应着系统应用层。它的目录结构如下:

安卓进阶之android系统架构

packages目录 描述
apps 核心应用程序
experimental 第三方应用程序
inputmethods 输入法目录
providers 内容提供者目录
screensavers 屏幕保护
services 通信服务
wallpapers 墙纸

应用框架层

应用框架层一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。
应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:

安卓进阶之android系统架构

/frameworks/base目录 描述
api 定义API
cmds 重要命令:am、app_proce等
core 核心库
data 字体和声音等数据文件
docs 文档
graphics 图形图像相关
include 头文件
keystore 和数据签名证书相关
libs
location 地理位置相关库
media 多媒体相关库
native 本地库
nfc-extras NFC相关
obex 蓝牙传输
opengl 2D/3D 图形API
packages 设置、TTS、VPN程序
sax XML解析器
services 系统服务
telephony 电话通讯管理
test-runner 测试工具相关
tests 测试相关
tools 工具
wifi wifi无线网络

C/C++程序库部分

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

目录位置 描述
bionic/ Google开发的系统C库,以BSD许可形式开源。
/frameworks/av/media 系统媒体库
/frameworks/native/opengl 第三方图形渲染库
/frameworks/native/services/surfaceflinger 图形显示库,主要负责图形的渲染、叠加和绘制等功能
external/sqlite 轻量型关系数据库SQLite的C++实现

Android运行时库的代码放在art/目录中。硬件抽象层的代码在hardware/目录中,这一部分是手机厂商改动最大的一部分,根据手机终端所采用的硬件平台会有不同的实现。

参考文章

安卓操作系统(维基百科)

Android进阶解密第一章

Android系统基础架构文章来源地址https://www.toymoban.com/news/detail-411523.html

到了这里,关于安卓进阶之android系统架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android架构进阶之高级UI系列(精编解析,值得收藏)

    public FrameHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DO_FRAME: // 执行doFrame // 如果启用VSYNC机制,当VSYNC信号到来时触发 doFrame(System.nanoTime(), 0); break; case MSG_DO_SCHEDULE_VSYNC: // 申请VSYNC信号,例如当前需要绘制任务时 doScheduleVsync()

    2024年04月14日
    浏览(47)
  • Android架构进阶之高级UI系列(精编解析,值得收藏),Android开发面试技能介绍

    CallbackRecord callbacks; synchronized (mLock) { final long now = System.nanoTime(); // 根据指定的类型CallbackkQueue中查找到达执行时间的CallbackRecord callbacks = mCallbackQueues[callbackType].extractDueCallbacksLocked( now / TimeUtils.NANOS_PER_MS); if (callbacks == null) { return; } mCallbacksRunning = true; if (callbackType == Choreograph

    2024年04月13日
    浏览(33)
  • Android 进阶——Binder IPC之Binder IPC架构及原理概述(九)

    前面几篇文章,为我们学习Binder IPC通信机制提供了扎实的理论基础,接下来将正式进入Binder IPC通信架构及原理的解读。 Binder 是基于 C/S 架构的,由一系列的组件组成,包括 Client进程、Server进程、Service Manager进程、Binder 驱动。其中 Client进程、Server进程、Service Manager进程运行

    2023年04月09日
    浏览(33)
  • 安卓Android类原生系统官网集合

    由于Miui的平板系统一言难尽,所以一直在使用类原生系统,最近在找网络上有人汇总了原生系统的链接,根据自己的理解和网络介绍,整理成以下方便自己和他人使用。 google套件 https://opengapps.org/ 目前有些系统已经删库了,比如像魔趣等,所以链接是否需要自己去验证了,

    2024年02月02日
    浏览(29)
  • Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    开启电脑的虚拟化支持,在控制面板-程序和功能-启用和关闭windows功能。选择 Hyper-V 和 虚拟机平台 ,然后重启电脑即可。 访问 https://store.rg-adguard.net/ 搜索 https://www.microsoft.com/store/productId/9P3395VX91NR 下载最大的一个文件,即安卓子系统文件 下载地址: http://tlu.dl.delivery.mp.mi

    2024年02月03日
    浏览(46)
  • 最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统

    最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统 2022年2月1日 团队技术探索 Android 您是否知道,即使有几个升级版本,如Windows 10和10.1,即使这样,Android应用程序也在不断增长,因为它们使用起来很有趣并且具有非常友好的用户界面?但是如果你没有预先安

    2024年02月05日
    浏览(44)
  • 新鲜出炉的 MVVM 脚手架 —— KtArmor-MVVM,面试安卓系统架构

    } 通过 @BindViewModel 注解viewModel 变量,KtArmor-MVVM 通过 反射 ,自动创建 LoginViewModel 实例, 并赋值给 viewModel 变量。直接使用即可! @BaseUrl(API.BASE_URL) // 看这里!! interface ApiService { @POST(API.LOGIN) suspend fun login(@Query(“username”) username: String, @Query(“password”) password: String): BaseRe

    2024年04月10日
    浏览(36)
  • [架构之路-221]:鸿蒙系统和安卓系统的比较:微内核VS宏内核, 分布式VS单体式

    目录 一、鸿蒙系统和安卓系统的系统架构 1.1 鸿蒙系统的分层架构 1.2 安卓系统的分层架构 1.3 鸿蒙系统和安卓系统是操作系统吗? 二、鸿蒙系统和安卓系统的系统架构比较 2.1 它们与Linux操作系统的关系 2.2 架构比较 三、操作系统基础 3.1 微内核架构 3.2 宏内核架构 3.3 传统

    2024年02月07日
    浏览(32)
  • 五分钟Win11安装安卓(Android)子系统

    十分钟,完成win11安装安卓子系统 Win+i 进入设置页面,选择 时间和语言 - 语言和区域 - 区域-美国 访问如下连接,install即可 安卓子系统 在开始菜单找到子系统,点开,做如下配置: 打开应用商店,安卓APK安装程序 下载应用宝手机版,APK文件,双击,有什么点什么,即可

    2024年02月02日
    浏览(45)
  • 基于安卓android微信小程序的食堂订餐系统

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,食堂订餐小程序被用户普遍使用,为方便用户能够可以随时进行食堂订餐小程序的数据信息管理,特开发了基

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包