Android源码的层次结构分析

bionic,整个系统的基础类库,Android系统就是基于这个类库开发的,

 

system,Android系统类库,基于bionic类库开发,包含工具类库(libcutils),LOG类库(liblog),压缩类库(libzipfile)类。

主要功能有:

一、完成Android初始化(init)。

解析init.rc并开启系统初始化时需要加载的程序(parser.c),初始化设备(devices.c),开启属性服务(property_service.c)等。

二、开启Android系统的一些基础服务。

1、系统的设备服务(vold)。比如完成SD卡挂载、卸载管理,从内核处接收事件建立设备结点等。

三、SHELL程序及相应的toolbox。

四、ADB程序。

五、logcat系统。

 

可以说,bionic和system两个文件里的东西完成了Android对Linux的封装,在这两个文件夹的基础上构建起了Android系统的两大核心模块:Dalvik和Framework。Dalvik是一个基础纯C的VM,这个网上有比较详细的说明。重点一层层地分析一下Framework。

最底层就是几大模块:

1、utils工具库(frameworks/base/libs/utils/目录下)

这个类库基于bionic编译写,提供了一些对bionic里面的基础C/C++类库中的高层次封装。Framework中的C++程序大量使用这里的类库来封装更高层的系统功能。

2、binder库(framewoks/base/libs/binder/目录下)

这个与OpenBinder开源项目相似,提供了一种进程通信机制。C++和Java层都大量使用了这种机制。它把通信双方分为服务提供者和使用者两种角色。提供者内部有注册的服务接口,使用者去查找调用。

3、ui库(frameworks/base/libs/ui/目录下)

这个库主要提供了UI绘制和视频输出两类接口,整个系统的输出框架都是以这个库为基础,通过它与FrameBuffer通信。

4、surfaceflinger库(frameworks/base/libs/surfaceflinger/目录下)

对ui库的更高层次的封装,通过binder机制对Android系统中的上层模块提供输出服务。

5、audioflinger库(frameworks/base/libs/audioflinger/目录下)

音频输出基础类库,上层模块通过这个库与驱动还有打交导输出声音。

6、大量开源库(external/目录下)

 

这几大模块构成了整个Framework的基础。围绕这几大模块,就可以构建一个真正的操作系统的上层模块,创建应用程序运行环境了。比较典型的有:

多媒休服务,提供给音视频播放和录制服务。

服务管理,维护和管理系统中存在的大量服务提供程序,应用程序通过binder机制通过服务管理中心的servicemanager来访问和使用这些服务,比如电源、蓝牙、Wifi等模块都以服务的形式存在于系统中供应用程序调用。

运行时环境,初始化应用程序的运行环境,并加载第一个应用程序,Launcher。

 

应用程序运行时环境创建完成后,系统就算正式启动起来了。当一个应用程序被加载到系统中时,它和系统打交导最多的就是系统提供的开发API了。主要集中在frameworks/base/core/目录下。

你可能感兴趣的:(android,UI,shell,System,工具)