第一章 Android 系统架构.md

1202

1.1 Android 系统架构

2112282f23f02af5b90de37.png

  1. 应用层 (System Apps)

    系统内置的应用程序,负责与用户直接交互,通常使用 Java (Kotlin) 开发 。

  2. 应用框架层 (Java API Framework)

    为开发人员提供了开发应用程序需要的 API,我们平常开发 APP 都使用这一层提供的 API 。这一层是使用 Java 编写的,以下是主要组件:

    名称功能描述
    Activity Manager管理各个 Activity 的生命周期以及回退等功能
    Location Manager提供地理位置及定位功能服务
    Package Manager管理所有安装在 Android 系统中的应用程序
    Notification Manager使得应用程序可以在状态栏中显示自定义的通知
    Resource Manager提供应用程序使用的各种非代码资源
    Telephony Manager管理所有的移动设备功能
    Window Manager管理所有开启的窗口程序
    Content Provider使得不同应用程序之间可以共享数据
    View System构建应用程序的基本组件
  3. 系统运行库层 (Native)

    分为两部分:

    1. C/C++ 程序库

      名称功能描述
      OpenGL ES3D 绘图函数库
      Libc从 BSD 继承来的标准 C 系统函数库,专门为嵌入式 Linux 设备定制
      Media Framework多媒体库,支持多种常用音频、视频格式录制和回放
      SQLite轻量级的关系型数据库引擎
      SGL底层 2D 图形渲染引擎
      SSL安全套接层
      FreeType可移植的字体引擎,提供统一的接口来访问多种字体格式文件
    2. Android 运行时库

      运行时库分为 核心库 (Core Libraries) 与 ART (Android 5.0 之后,Dalvik 虚拟机被 ART 虚拟机取代)。核心库提供了 Java 语音核心库的绝大多数功能,而 Dalvik 是专门为移动设备设计的虚拟机,其允许在一定内存内运行多个虚拟机的实例,进而运行多个 Java 程序。每个 实例 都运行在不同的 Linux 进程中 。

      Dalvik 每次运行时,字节码都需要通过即时编译器 (Just In Time, JIT) 转换为机器码,而 ART 在安装应用程序时会进行一次预编译 (Ahead Of Time, AOT) ,先将机器码储存在本地,大大提升了运行效率 。

  4. 硬件抽象层 (HAL)

    HAL 位于 操作系统内核与硬件电路之间,是接口层。其目的是将硬件抽象化,保护硬件厂商的知识产权,同时使操作系统具有可移植性。

  5. Linux 内核层 (Linux Kernel)

    基于 Linux 内核,添加了部分 Android 专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都基于该内核。

1.2 Android 系统源码目录

在线阅读网站:http://androidxref.com/

下载源码教程:下载源代码 | Android 开源项目 | Android Open Source Project (google.cn)

Android 源码根目录描述
art全新 ART 运行环境
bioic系统 C 库
bootable启动引导相关代码
build存放系统编译规则 及 generic 等基础开发包配置
ctsAndroid 兼容性测试套件标准
dalvikDalvik 虚拟机
developers开发者目录
development与应用程序开发相关
device设备相关配置
docs参考文档目录
external开源模组相关文件
frameworks应用程序框架,Android 系统核心部分,由 Java 和 C++ 编写
hardware主要是硬件抽象层的代码
libcore核心库相关文件
libnativehelper动态库,实现 JNI 库的基础
out编译完成后代码在此目录输出
pdkPlug Development Kit 的缩写,本地开发套件
platform_testing平台测试
prebuiltsX86 和 ARM 架构下预编译的一些资源
sdkSDK 和 模拟器
packages应用程序包
system底层文件系统库、应用和组件
toolchain工具链文件
tools工具文件
makefile全局 Makefile 文件

1.2.2 应用层部分

应用层位于最上层,开发者开发的应用程序以及系统内置的应用程序都在此层,源码根目录中 packages 目录对应着系统应用层,它的目录结构如下:

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

1.2.3 应用框架层部分

该层主要实现代码位于 frameworks/base 和 frameworks/av 目录下,其中 frameworks/base 结构如下:

frameworks/base 目录描述frameworks/base 目录描述
api定义 APIcmds重要命令:am, app_proce 等
core核心库data字体和声音等数据文件
docs文档graphics图形图像
include头文件keystore数据签名证书
libslocation地理位置
media多媒体native本地
nfc-extrasNFCobex蓝牙传输
opengl2D/3D APIpackages设置、TTS、VPN
saxxml 解析器services系统服务
telephony电话通信管理test-runner测试工具
tests测试tools工具
vrVRwifiWifi

1.2.4 C/C++ 程序库部分

系统运行库层 (Native) 中 C/C++ 程序库类型繁多,功能强大,位于多个目录中,这里只给出几个常用且比较重要的目录

目录位置描述
bionicGoogle 开发的系统 C 库,以 BSD 许可开源
frameworks/av/media系统媒体库
frameworks/native/opengl第三方图形渲染库
frameworks/native/services/surfaceflinger图形显示库,负责图形的渲染、叠加和绘制
external/sqliteSQLite 的 C++ 实现

此外,其它层的代码在跟目录中有给出 。

1.3源码阅读

1.3.1 在线阅读

1.3.2 使用 Source Insight