安卓进阶之android系统架构
安卓进阶之android架构
安卓进阶躲不开阅读源码和深入了解安卓的底层,这是一篇入门级别的文章,可以对安卓架构有个大体的认识。
AOSP与Android系统架构
首先要理解andriod和AOSP的关系,我们日常开发的安卓跟市面上的安卓不是一个意思,我们开发的是安卓app,市面上的安卓其实是安卓系统。
维基百科:Android是基于Linux 内核和其他开源软件的修改版本的移动操作系统,主要为智能手机和平板电脑等触摸屏移动设备设计。
官方文档:**Android 开放系统平台 (Android open source project AOSP)**是公开可用且可修改的 Android 源代码。任何人都可以为他们的设备下载和修改 AOSP。 AOSP 提供完整且功能齐全的 Android 移动平台实现。
五层的安卓架构(下图左边),一些书籍或者博客上常见的这张图;最新版可看官方文档(回头看这篇文章的时候可能也会过时)。以下介绍会结合两个图进行说明。
最新的AOSP软件堆栈架构如下图右边,即我们说的android系统架构:
详细介绍如下:
应用层(System apps)
包括Android app、Privileged app、Device 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:本机守护进程和库。
- 该层中的本机守护进程包括
init
、healthd
、logd
和storaged
。这些守护进程直接与内核或其他接口交互,不依赖于基于用户空间的 HAL 实现。 - 该层中的本机库包括
libc
、liblog
、libutils
、libbinder
和libselinux
。这些本机库直接与内核或其他接口交互,不依赖于基于用户空间的 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源码根目录 | 描述 |
---|---|
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目录对应着系统应用层。它的目录结构如下:
packages目录 | 描述 |
---|---|
apps | 核心应用程序 |
experimental | 第三方应用程序 |
inputmethods | 输入法目录 |
providers | 内容提供者目录 |
screensavers | 屏幕保护 |
services | 通信服务 |
wallpapers | 墙纸 |
应用框架层
应用框架层一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。
应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:
/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系统基础架构
安卓进阶之android系统架构相关推荐
- 安卓linux层,Android 系统架构各层介绍
android的系统架构采用了分层架构的思想,作为android开发猿还是有必要大概了解一下的,先看一下系统架构图 20190626110750560.png Linux 内核 Android 平台的 ...
- linux与安卓系统目录,android系统架构及源码目录结构
1. android系统架构: android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层.应用程序框架层.系统库和android运行时层.linux内核层. 每层功能 ...
- Android系统架构及生态链
目录 一.Android系统架构 二.Android生态链 一.Android系统架构 最底层是 Linux Kernel 层.Android OS 的基石是 Linux Kernel Android ...
- Android零基础入门第2节:Android 系统架构和应用组件那些事
继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统. ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- Android系统架构图及简单的系统架构介绍
2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...
- Android系统架构基本模式解析
Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...
- android phone驱动_一文带你掌握 Android 系统架构
引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...
- Android系统架构开篇
Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...
最新文章
- VS2008中vss的设置
- sgu 207 Robbers
- css实现一级下拉菜单
- 飞鸽传书2011真正把用户利益放在股东的利益
- 计算机二级矿大考点哪个校区,计算机二级考点哪个近一点555
- oracle起定时任务,每隔1秒执行一次
- php 判断 pc 移动设备,PHP判断是移动设备还是PC设备
- 第五章 字符串字面量---一个特殊的数组
- jupyter notebook输出表格
- Foxit PDF SDK ActiveX 5.9.1 Crack
- 洛谷P1317 低洼地(凹点 坡)
- 霍夫变换提取圆心坐标,并拟合直线
- 腾讯bugly接入详解
- flac转mp3的方法
- 【动手学MVG】ICP算法原理和代码实现
- 360度全景图片怎么拍摄?
- maven 打包错误:Please refer to xxx\target\surefire-reports for the individual test results.
- 基于Arduino Uno开发板的红外遥控开发
- IBM云对象存储 - Linux主机通过rclone和COS API上传大文件
- NVT 66X增加WIFI命令