Android 系统知识博大精深,了解下android系统的整体架构,来自google 官方文档Platform Architecture:
Android 是一个基于 Linux 的开源软件栈,适用于各种类型的android 设备。 下图显示了 Android 平台的主要组件。
Linux Kernel
Android 平台的基础是 Linux 内核。 例如,Android Runtime(ART) 依赖于 Linux 内核来实现线程和低级内存管理等底层功能。
使用 Linux 内核使 Android 能够利用关键的安全功能,而且能让设备制造商在熟悉的内核上开发硬件驱动程序。
Hardware Abstraction Layer (HAL)
硬件抽象层 (HAL) 提供标准接口,将设备硬件功能暴露给更高级别的 Java API 框架。 HAL 由多个库模块组成,每个库模块都为特定类型的硬件组件(例如摄像头或蓝牙模块)实现一个接口。 当Framework API 调用或访问设备硬件时,Android 系统会加载该硬件组件的库模块。
Android Runtime
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用程序都在自己的进程中运行,并使用自己的 Android 运行时 (ART) 实例。 ART 旨在通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX是一种专为 Android 设计的字节码格式,已针对最小内存占用进行了优化。构建工具,例如 d8,将 Java 源代码编译成 DEX 字节码,就可以在 Android 平台上运行。
ART 的一些主要功能包括:
- 提前 (AOT) 和即时 (JIT) 编译
- 优化的垃圾收集 (GC)
- 在 Android 9(API 级别 28)及更高版本上,将应用程序包的 Dalvik 可执行格式 (DEX) 文件转换为更紧凑的机器代码。
- 更好的调试支持,包括专用的采样分析器、详细的诊断异常和崩溃报告,以及设置观察点以监控特定字段的能力
在 Android 5.0(API 级别 21)之前,Dalvik 是 Android 运行时。如果您的应用程序在 ART 上运行良好,那么它应该也可以在 Dalvik 上运行,但反之可能并非如此。
Android 还包括一组核心运行时库,它们提供 Java 编程语言的大部分功能,包括 Java API 框架使用的一些 Java 8 语言特性。
Native C/C++ Libraries
许多Android 系统核心组件和服务,例如 ART 和 HAL,都是由native 代码(c/c++)构建的, 这些native 代码依赖由C 和 C++ 编写的native 库。 Android 平台提供的 Java Framework API 将其中一些native库的功能公开给应用程序。 例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,在应用程序中支持绘制和操作 2D 和 3D 图形。
如果您的应用程序是基于C 或 C++ 代码,您可以使用 Android NDK 直接从您的native代码访问其中一些native 平台库。
Java API Framework
您可以通过调用 Java API 来使用 Android 操作系统的整个功能集。 这些 API 通过简化核心、模块化系统组件和服务的重用,构成了您创建 Android 应用程序所需的构建块,其中包括:
- View System: 丰富且可扩展的View系统,可用于构建应用程序的 UI,包括列表、网格、文本框、按钮,甚至是可嵌入的 Web 浏览器
- Resource Manager 资源管理器,提供对非代码资源的访问,例如本地化字符串、图形和布局文件
- Notificatioin Manager 一个通知管理器,使所有应用程序都可以在状态栏中显示自定义通知
- Activity Manager 一个管理应用程序生命周期并提供通用导航回栈的Activity 管理器
- Content Provider 使应用程序能够访问来自其他应用程序(例如联系人应用程序)的数据或共享自己的数据的content provider 提供程序
Android 系统程序使用的 Framework API, 开发人员也可以完全访问。
System Apps
Android 自带的核心应用程序: 电子邮件、短信、日历、互联网浏览、联系人等。 平台附带的应用程序与用户选择安装的应用程序相比没有特殊地位。 因此,第三方应用程序可以成为用户的默认网络浏览器、SMS Messenger,甚至是默认键盘(某些例外情况适用,例如系统的设置应用程序)。
系统应用程序既可以作为用户应用程序,也可以作为关键功能供开发人员从他们自己的应用程序访问。 例如,如果您的应用程序想要发送 SMS 消息时,您不需要自己构建该功能 - 您可以调用已安装的任何 SMS 应用程序,来向指定的收件人发送消息。
网友评论