我认为学习任何一个技术,应该先统筹了解各个模块的大致功能,本课主要是来梳理架构与一些源码记录。

1 Android系统架构

目前有5层,从上到下是应用层,应用框架层,系统运行库层,硬件抽象层,内科层。

1.1 应用层

系统内置的一些应用以及一些非系统的应用,都属于这一层,比如内置的相机以及第三方相机(轻颜相机)。一般都是用Java或者Kotlin开发。

1.2 应用框架层

该层也是由java编写的,是为了应用层开发而提供的接口层,一般叫做 java Framework层 ,这一层提供了一些组件,如下所示。

名称

功能描述

Activity Manager(活动管理器)

管理应用程序的生命周期,以及导航,回退等功能。

Location Manager(位置管理器)

提供地理位置与定位功能。

Package Manager(包管理器)

管理所有已经安装的APP。

Notification Manager(通知管理器)

管理消息的组件,比如通知栏提示信息。

Resource Manager(资源管理器)

提供静态资源,图片,字符串,颜色等。

Telephone Manager(电话管理器)

你的电话,短信等功能。

Window Manager(窗口管理器)

管理所有开启的窗口程序。

Content Provider(内容提供者)

在不同APP之间共享数据。

View System(视图系统)

构建APP UI的基本组件。

1.3 系统运行库层

这一部分也叫做Native层,大体分为两部分,C/C++程序库与Android运行库。下面将分别列一些常见的库。

1.3.1 C/C++程序库

名称

功能

OpenGL ES

3D绘图函数库

Libc

为嵌入式Linux设备定制的标准C函数库

Media Framework

多媒体库,各种格式的音频,视频等

SQLite

轻关系型数据库

SGL

底层2D图形渲染引擎

SSL

安全套接字层,为网络提供安全等

FreeType

字体引擎,提供了统一的接口访问多种字体文件

1.3.2 Android运行时库

运行库分为 核心库ART(android5之前是Dalvik)

核心库提供了Java语言核心库的大多数功能。

ART是专门为移动设别定制的虚拟机(特殊的JVM),每个APP启动后都有一个ART,这样可以避免一个应用崩溃不至于整个系统崩溃。之前的Dalvik启动APP的时候都要编译成机器码,在ART中,应用安装的时候就会进行一次编译,并且保存到本地,提高了运行效率。

1.4 硬件抽象层

HAL 层,在硬件与软件之间,提供了一个接口来操作硬件,隐藏了真正的硬件接口,这样既保护了版权,又提供了多平台可移植性。

1.5 内核层

kernel层,android的核心服务都基于Linux内核,并添加了一些Android的专用驱动。比如安全性,内存管理,网络协议等等。

2 Android系统源码目录

本章主要介绍每个目录的大概作用,具体如各表。

2.1 整体结构

源码根目录

描述

art

ART运行环境

bilnic

系统C库

bootable

启动引导相关代码

build

系统编译规则与基础开发包配置

cts

兼容性测试套件标准

dalvik

Dalvik虚拟机

developers

开发者目录

development

与APP开发相关

device

设备相关配置

docs

参考文档目录

external

开源模组文件

Frameworks

应用程序框架,分了两部分,1.3 章节有讲

hardware

硬件抽象层代码

libcore

核心库相关文件

libnativehelper

动态库,实现JNI库(java native)基础

out

存放编译后的代码

pdk

本地开发套件

platform_testing

平台测试

prebuilts

X86和ARM架构下预编译的一些资源

sdk

sdk和模拟器

packages

应用程序包

system

底层文件系统库,应用与组件

toolchain

工具链文件

tools

工具文件

makefile

全局文件,定义编译规则

接下来,我们分析上面的packages包

2.2 应用层部分

不过多赘述了,直接上表格

packages目录

描述

apps

核心应用程序

experimental

第三方应用程序

inputmethods

输入法目录

providers

内容提供者目录

screensavers

屏幕保护

services

通信服务

wallpapers

壁纸

这个包就对应的系统的应用层。

2.3 应用框架层部分

这是个核心部分,一要向上提供接口,另一方面与下层衔接。这一层的代码主要在framework/base和framework/av,其中base目录如下所示。

base目录

描述

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

系统服务

telephone

电话通信管理

test-runnner

测试工具相关

tests

测试相关

tools

工具

vr

与VR相关

wifi

无线网络

2.4 C/C++程序库部分

这个里面的文件很多,并且并不都在一个目录中,下面列出一些重要的目录。

目录位置

描述

bionic

谷歌开发的系统C库,以BSD形式开源

framework/av/media

系统媒体库

framework/native/opengl

第三方图形渲染库

framework/native/services/surfacefinger

图形显示库,负责图形渲染,叠加,绘制等。

external/sqlite

轻量级关系型数据库

Android运行时库的代码在art目录中,硬件抽象层的代码在hardware文件中,这两部分一般是手机厂商改动最大的部分,根据采用的硬件不同,会有不同的实现。

3 总结

本章算是基础中的额基础,希望本文章在你日后学习中能够联想到一些东西,融会贯通!