Android 系统架构 | 您所在的位置:网站首页 › 安卓的基础架构包括 › Android 系统架构 |
首语 由于工作内容的转变,使得我向Android系统方向转变,对于一个Android系统工程师,了解Android整个系统架构是必然的。本篇是Android系统学习的开篇,Android系统庞大且复杂,但是能对Android的认识更深,更全面。开启Android系统之旅吧! 推荐Android系统干货博主:Gityuan 系统架构Android系统架构分为五层。从上往下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。 ![]() 系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互。 应用框架层(Java API Framework)应用框架层为开发人员提供了开发应用程序所需要的API,我们平成开发应用程序都是调用这一层提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Java Framework。 它所提供的组件如下: 名称 功能描述 Activity Manager(活动管理器) 管理各个应用程序生命周期,以及常用的导航回退功能 Location Manager(位置管理器) 提供地理位置及定位功能服务 Package Manager(包管理器) 管理所有安装在Android系统的应用程序 Notification Manager(通知管理器) 使得应用程序在通知栏显示自定义的提示消息 Resource Manager(资源管理器) 提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等 Telephony Manager(电话管理器) 管理所有的移动设备功能 Window Manager(窗口管理器) 管理所有的窗口程序 Content Provider(内容提供者) Android四大组件之一。使得不同应用程序之间共享数据 View System(视图系统) 构建应用程序的基本组件 系统运行库层(Native)从上图可以看出,系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。 C/C++程序库C/C库被Android系统中的不同组件使用,并通过应用程序框架为开发者提供服务。以下为主要的C/C程序库: 名称 功能描述 OpenGL ES 3D 绘图函数库 Libc 从BSD继承来的标准C系统函数库,专门为嵌入式Linux的设备定制 Media Framework 多媒体库,支持多种常用的音频、视频格式录制和回放 SQLite 轻型的关系型数据引擎 SGL 底层的2D图形渲染引擎 SSL 安全套接层,是一种为网络通信提供安全及数据完整性的安全协议 Free Type 可移植的字体引擎,提供统一的接口来访问多种字体格式文件 Webkit 浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎。 OpenMax AL OpenMax是一个多媒体应用程序的框架标准,OpenMax分为3层:第一层:OpenMax DL(Development Layer,开发层)第二层:OpenMax IL(Integration Layer,集成层)第三层:OpenMax AL(Appliction Layer,应用层) Android运行时库从上图可以看出,运行时库分为核心库和ART。 核心库核心库提供了Java语言核心库的大多数功能,开发者使用Java语言编写应用程序。 ARTAndroid 5.0后,Dalvik虚拟机被ART取代。与JVM相比,Dalvik虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行。这样可以防止虚拟机崩溃的时候所有程序都关闭。ART与DVM的机制有所不同,DVM中的应用每次运行时,字节码都需要通过即时编译器(JIT)转化为机器码,使得应用程序运行效率降低。在ART中,系统安装应用时会进行依次预编译(AOT),将字节码预先编译成机器码并存储在本地,这样不需要每次运行执行编译,提高运行效率。 硬件抽象层(HAL)硬件抽象层是位于操作系统内核与硬件电路之间的接口层,目的在于将硬件抽象化。为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。 Linux内核层(Linux Kernel)Android的核心服务基于Linux内核层,这一层为android设备的各种硬件提供了底层的强大驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。在此基础上添加了部分Android专用的驱动,如Binder、Alarm、Logger等。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型都依赖该内核。 Android版本版本号 代号 API Android 14.0 U 34 Android 13.0 T 33 Android 12.0L S 32 Android 12.0 S 31 Android 11.0 R 30 Android 10.0 Q 29 Android 9.0 Pie 28 Android 8.1 Oreo 27 Android 8.0 Oreo 26 Android 7.1.1 Nougat 25 Android 7.0 Nougat 24 Android 6.0 Marshmallow 23 Android 5.1 Lollipop 22 Android 5.0 Lollipop 21 Android 4.4W KitKat Wear 20 Android 4.4 KitKat 19 Android 4.3 Jelly Bean 18 Android 4.2 Jelly Bean 17 Android 4.1 Jelly Bean 16 Android 4.0.3 IceCreamSandwich 15 Android 4.0 IceCreamSandwich 14 Android 3.2 Honeycomb 13 Android 3.1 Honeycomb 12 Android 3.0 Honeycomb 11 Android 2.3.3 Gingerbread 10 Android 2.3 Gingerbread 9 Android 2.2 Froyo 8 Android 2.1 Eclair 7 系统源码目录关于Android源码下载,可以参考:Windows下安装Ubuntu、图形界面、下载Android源码,看这一篇就够了 目录基于Android13。 整体结构源码根目录 描述 art ART运行环境 bionic 系统C库 bootable 启动引导相关代码 build 系统编译规则及generic等基础开发包配置 cts Android 兼容性测试套件标准 dalvik Dalvik 虚拟机 developers 开发者目录 development 应用程序相关 device 设备相关配置 docs 参考文档 external 开源模组相关 frameworks 应用程序框架,Android系统核心部分 hardware 硬件抽象层代码 kernel 内核层,包括设备驱动、硬件抽象层、系统调用等方面的代码 libcore 核心库相关文件 libnativehelper 动态库,实现JNI库的基础 packages 应用程序包 out 编译代码输出目录,可自定义 pdk Plug Development Kit,本地开发套件 platform_testing 平台测试 prebuilts X86和ARM架构下预编译的一些资源 sdk SDK和模拟器 system 底层文件系统库、应用和组件 test 存放测试代码和测试工具 toolchain 工具链文件 tools 工具文件 还有一个重要的目录vendor,存放厂商定制代码。 应用层(packages)应用层是Android系统的最上层,开发者开发的应用和系统内置的应用都在应用层。源码根目录中的packages目录对应着系统应用层。 packages目录 描述 apps 核心应用程序 modules 独立、可插拔的应用程序模块 inputmethods 输入法目录 providers 内容提供者目录 screensavers 屏幕保护 services 通信服务 wallpapers 壁纸 应用框架层(frameworks/base)应用框架层是系统的核心部分,向上提供接口给应用层调用,向下与C/C++程序库及硬件抽象层进行通信,主要实现代码在frameworks/base和frameworks/av这两个目录下,frameworks的目录结构如下: frameworks/base目录 描述 apct_tests 存放自动化测试相关代码及测试用例 apex APEX(Android Package Executable)模块,一种新的Android应用打包格式,用于将系统组件和服务以及供应商组件和服务封装为单独的模块 api 定义API boot 操作系统的启动代码和基本类库 cmds 重要命令,如am、app_proce等 config 系统的配置文件和数据结构 core 核心库 data 字体、声音等数据文件 docs 文档 drm 数字版权管理(DRM)的代码和类库 errorprone 错误处理和异常处理的代码和类库 graphics 图形图像有关 identity 身份验证和授权的代码和类库 keystore 数据签名证书相关 libs 库 location 地理位置相关库 media 多媒体相关库 mime MIME(多用途互联网邮件扩展)类型的定义和配置信息 mms 短信和多媒体消息服务的代码和类库 native 本地库 nfc-extras NFC相关 obex 蓝牙传输 omapi OMADP(Open Mobile Alliance Device Provider)的API接口和类库 opengl 2D/3D图形API packages 设置、TTS、SystemUI、VPN程序等 proto 系统中的各种协议和数据结构的定义和配置信息 rs RenderScript(渲染脚本)的代码和类库 samples 各种示例代码和演示程序 sax xml解析器 services 系统服务 startop StartOp(启动操作)的代码和类库 telecom Telecom(电话通信)的代码和类库 telephony 电话通信管理 test-runner 测试工具相关 tests 与测试相关 tools 工具 wifi Wi-Fi 无线网络 C/C++程序库部分系统运行库层的C/C程序库的类型繁多,功能强大。以下是比较常用且重要的C/C程序库。 目录位置 描述 bionic Google开发的系统C库,以BSD许可形式开源 frameworks/av/media 系统媒体库 frameworks/native/opengl 第三方图形渲染库 frameworks/native/services/surfaceflinger 图形显示库,负责图形渲染、叠加和绘制功能 external/sqlite 轻量级关系型数据库SQLite的C++实现 源码阅读源码阅读有在线阅读和本地阅读两种方式。在线阅读推荐官方:https://cs.android.com 本地阅读就是将代码下载到本地,然后通过Android Studio去阅读。以下是阅读环境配置: 1.更改内存设置,把内存调整到8GB及以上 2.在源码根目录,编译idegen模块 代码语言:javascript复制source build/envsetup.sh mmm development/tools/idegen/编译成功后在 /out/host/linux-x86/framework 目录下会生成 idegen.jar 文件。 3.执行sh脚本,它将使用这个jar生成所需的 .ipr 文件: 代码语言:javascript复制development/tools/idegen/idegen.sh成功后,源码根目录可以找到 android.iml 和 android.ipr 两个文件,用Android Studio打开 android.ipr文件即可,等待一段时间的扫描就可以了。 总结以上都是学习Android系统源码的必备基础,掌握它们才能更好的深入学习Android系统源码,如有问题欢迎批评指正。后续会学习Android系统启动、AMS、WMS等源码,真正走进Android系统源码的世界。 AOSP 系统架构 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |