安卓进阶之android架构

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

AOSP与Android系统架构

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

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

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

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

最新的AOSP软件堆栈架构如下图右边,即我们说的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源码根目录 描述
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系统架构相关推荐

  1. 安卓linux层,Android 系统架构各层介绍

    android的系统架构采用了分层架构的思想,作为android开发猿还是有必要大概了解一下的,先看一下系统架构图 20190626110750560.png Linux 内核 Android 平台的 ...

  2. linux与安卓系统目录,android系统架构及源码目录结构

    1. android系统架构: android系统架构采用了分层架构的思想,如下图所示,从上到下共4层,分别为:应用程序层.应用程序框架层.系统库和android运行时层.linux内核层. 每层功能 ...

  3. Android系统架构及生态链

    目录 一.Android系统架构 二.Android生态链 一.Android系统架构 最底层是 Linux Kernel 层.Android OS 的基石是 Linux Kernel Android ...

  4. Android零基础入门第2节:Android 系统架构和应用组件那些事

    继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android 系统架构 Android系统的底层建立在Linux系统之上,该平台由操作系统. ...

  5. Android系统架构-[Android取经之路]

    摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...

  6. Android系统架构图及简单的系统架构介绍

    2019独角兽企业重金招聘Python工程师标准>>> ndroid的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层. ...

  7. Android系统架构基本模式解析

    Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...

  8. android phone驱动_一文带你掌握 Android 系统架构

    引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制.虽然Android系统非常 ...

  9. Android系统架构开篇

    Android系统庞大且错综复杂,Gityuan带领大家初探Android系统整体架构,一窥其全貌. 一.引言 本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解An ...

最新文章

  1. VS2008中vss的设置
  2. sgu 207 Robbers
  3. css实现一级下拉菜单
  4. 飞鸽传书2011真正把用户利益放在股东的利益
  5. 计算机二级矿大考点哪个校区,计算机二级考点哪个近一点555
  6. oracle起定时任务,每隔1秒执行一次
  7. php 判断 pc 移动设备,PHP判断是移动设备还是PC设备
  8. 第五章 字符串字面量---一个特殊的数组
  9. jupyter notebook输出表格
  10. Foxit PDF SDK ActiveX 5.9.1 Crack
  11. 洛谷P1317 低洼地(凹点 坡)
  12. 霍夫变换提取圆心坐标,并拟合直线
  13. 腾讯bugly接入详解
  14. flac转mp3的方法
  15. 【动手学MVG】ICP算法原理和代码实现
  16. 360度全景图片怎么拍摄?
  17. maven 打包错误:Please refer to xxx\target\surefire-reports for the individual test results.
  18. 基于Arduino Uno开发板的红外遥控开发
  19. IBM云对象存储 - Linux主机通过rclone和COS API上传大文件
  20. NVT 66X增加WIFI命令

热门文章

  1. 借助Writage,将 Word 转换为 Markdown发表csdn博客
  2. Sencha学习笔记2:打包您的第一个Sencha安卓应用apk安装包
  3. Android中如何利用Minui显示PNG格式的图片
  4. 子平真诠释疑笔记(六)
  5. AE 动画的分层与组合
  6. 新手如何成为一名黑客
  7. HTML5期末大作业:仿唯品会购物网站设计——仿唯品会购物商城(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 商城网站设计
  8. 蓝牙篇之蓝牙核心规范学习笔记(V5.3)汇总
  9. 树莓派3b+串口配置
  10. 使用fir im进行内测托管