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/目录下。