深入理解Android Framework(三)- Farmework概述

703 阅读6分钟

本篇将从架构的角度介绍Android操作系统的系统架构以及Framework层架构,并且给出Farmework层相关的代码结构,以帮助您更好的了解Farmework层的结构及功能。

1、系统架构

31.png

Android架构如上图所示,该系统架构主要分为分为六大模块,从下往上依次为LINUX KERNEL(内核层),HAL(硬件抽象层),Android Runtime(安卓运行时库),LIBRARIES(原生 C/C++共享库),Java API FRAMEWORK(Java API 框架层),APPLICATION(应用程序),由于本文仅关注FARMWORK层相关知识,故仅对这六大模块进行简单介绍。

Linux 内核

Android 平台的基础是 Linux 内核。例如,Android Runtime (ART)依靠 Linux 内核来执行底层功能,例如线程和低层内存管理。

硬件抽象层 (HAL)

硬件抽象层 (HAL) 提供标准界面,向更高级别的Java API框架显示设备硬件功能。由于部分硬件厂商不想把自己的核心代码公开,如果把代码放在内核空间里就需要遵循GUN License,会损害厂家的利益。所以,Google为了响应厂家在Android的架构里提出HAL的概念,把对硬件的支持分为用户空间和内核空间,而HAL层就属于这里面的用户空间,该部分代码遵循Apache License,所以厂家可以把核心的代码实现在HAL层,无需对外开放源代码。

Android Runtime

Android Runtime(ART),是一种在Android操作系统上的运行环境,由Google公司研发,并在2013年作为Android 4.4系统统中的一项测试功能正式对外发布,在Android 5.0及后续Android版本中作为正式的运行时库取代了以往的Dalvik虚拟机。它与Dalvik的主要不同在于:Dalvik采用的是JIT技术,而ART采用Ahead-of-time(AOT)技术。ART同时也改善了性能、垃圾回收(Garbage Collection)、应用程序除错以及性能分析。

原生 C/C++ 库

Android 包含一些C/C++库,许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写的原生库。Android 系统提供 Java 框架 API 以向应用显示其中部分原生库的功能。

Java API 框架

Framework层为我们开发应用程序提供了非常多的API,我们通过调用特殊的API构造我们的APP,满足业务上的需求,比如安卓开发者熟知的Activity,Service,Notification等,都是由framework层提供的。

应用层

应用层用于与用户进行可视化交互,包括系统应用和用户应两个部分。

2、Farmework

32.png

2.1、系统服务

SystemServer是framework中非常重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中,这些服务包括:

  • EntropyService 提供伪随机数
  • PowerManagerService 电源管理服务
  • ActivityManagerService 最核心的服务之一,管理Activity
  • TelephonyRegistry 通过该服务注册电话模块的事件响应,比如重启、关闭、启动等
  • PackageManagerService 程序包管理服务
  • AccountManagerService 账户管理服务,是指联系人账户,而不是Linux系统的账户
  • ContentService ContentProvider服务,提供跨进程数据交换
  • BatteryService 电池管理服务
  • LightsService 自然光强度感应传感器服务
  • VibratorService 震动器服务
  • AlarmManagerService 定时器管理服务,提供定时提醒服务
  • WindowManagerService Framework最核心的服务之一,负责窗口管理
  • BluetoothService 蓝牙服务
  • DevicePolicyManagerService 提供一些系统级别的设置及属性
  • StatusBarManagerService 状态栏管理服务
  • ClipboardService 系统剪切板服务
  • InputMethodManagerService 输入法管理服务
  • NetStatService 网络状态服务
  • NetworkManagementService 网络管理服务
  • ConnectivityService 网络连接管理服务
  • AccessibilityManagerService 辅助管理程序截获所有的用户输入,并根据这些输入给用户一些额外的反馈,起到辅助的效果
  • MountService 挂载服务,可通过该服务调用Linux层面的mount程序
  • NotificationManagerService 通知栏管理服务,Android中的通知栏和状态栏在一起,只是界面上前者在左边,后者在右边
  • DeviceStorageMonitorService 磁盘空间状态检测服务
  • LocationManagerService 地理位置服务
  • SearchManagerService 搜索管理服务
  • DropBoxManagerService 通过该服务访问Linux层面的Dropbox程序
  • WallpaperManagerService 墙纸管理服务,墙纸不等同于桌面背景,在View系统内部,墙纸可以作为任何窗口的背景
  • AudioService 音频管理服务
  • BackupManagerService 系统备份服务
  • AppWidgetService Widget服务
  • RecognitionManagerService 身份识别服务
  • DiskStatsService 磁盘统计服务

2.2、核心服务介绍

2.2.1、ActivityManagerService

ActivityManagerService(以下简称:AMS)是android系统的一个系统服务,是应用进程的管理服务端,直接的控制了应用程序的各个行为,保证了系统中不同的应用程序之间能够和谐的合理的进行调度运行。 AMS是android上层系统最核心的模块之一,其主要的工作是对所有的应用进程及其进程中的四大组件进行管理。(当然这里面也涉及了一些window、电源、权限等内容) 对进程的管理包括:进程的创建与销毁、进程的优先级调整。 对组件的管理包括:Activity的调度管理、Service的管理、Broadcast的分发、以及ContentProvider管理。

2.2.2、 WindowManagerService WindowManagerService对系统中所有窗口进行管理,主要负责窗口的一下管理,主要包括如下:

  • 窗口管理
  • 窗口动画
  • 输入系统的中转站
  • Surface管理

2.2.3、 Surfaceflinger

Surfaceflinger负责Layer合成(composer);创建surface;管理surface。

2.2.4、PackageManagerService

负责Package的管理,应用程序的安装 、卸载、信息查询等,其职责如下图所示:

33.png

2.2.5、 Input系统

android的输入系统主要完成键盘、触屏、鼠标等输入设备的事件输入及向焦点窗口和焦点视图的事件派发,插入,过滤,拦截等功能。 android支持的输入设备主要有:键盘、鼠标、触摸屏、轨迹球、游戏摇杆/手柄、绘图板。

3、Farmework层代码结构

Java API 框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:

|– api (定义API)
|– core (核心库)
|– docs (文档)
|– include (头文件)
|– libs (库)
|– media (多媒体相关库)
|– nfc-extras (NFC相关)
|– opengl 2D/3D (图形API)
|– sax (XML解析器)
|– telephony (电话通讯管理)
|– tests (测试相关)
|– test-runner (测试工具相关)
|– tools (工具)
|– wifi (wifi无线网络)
|– cmds (重要命令:am、app_proce等)
|– data (字体和声音等数据文件)
|– graphics (图形图像相关)
|– keystore (和数据签名证书相关)
|– location (地理位置相关库)
|– native (本地库)
|– obex (蓝牙传输)
|– packages (设置、TTS、v*n程序)
|– services (系统服务)


参考资料

Android 开发者 | Android Developers——Android 架构

Android 开发者 | Android Developers——平台架构