文档介绍:Android 的 Camera 架构介绍 Camera 概述 Android 的 Camera 包含取景器( viewfinder )和拍摄照片的功能。目前 Android 发布版的 Camera 程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在 Android 的进程间通讯 Binder 的结构上。以开源的 Android 为例, Camera 的代码主要在以下的目录中: Camera 的 JAVA 程序的路径: packages/apps/Camera//android/camera/ 在其中 是主要实现的文件 frameworks/base/core/java/android/hardware/ 这个类是和 JNI 中定义的类是一个,有些方法通过 JNI 的方式调用本地代码得到,有些方法自己实现。 Camera 的 JAVA 本地调用部分( JNI ): frameworks/base/core/jni/ 这部分内容编译成为目标是 。主要的头文件在以下的目录中: frameworks/base/include/ui/ Camera 底层库在以下的目录中: frameworks/base/libs/ui/ 这部分的内容被编译成库 。 Camera 服务部分: frameworks/base/camera/libcameraservice/ 这部分内容被编译成库 。为了实现一个具体功能的 Camera ,在最底层还需要一个硬件相关的 Camer 库(例如通过调用 video for linux 驱动程序和 Jpeg 编码程序实现) 。这个库将被 Camera 的服务库 调用。 Camera 的接口与架构 Camera 的整体框架图 Camera 的各个库之间的结构可以用下图的表示: 在 Camera 系统的各个库中, 位于核心的位置,它对上层的提供的接口主要是 Camera 类,类 通过调用 Camera 类提供对 JAVA 的接口,并且实现了 类。 是 Camera 的服务器程序,它通过继承 的类实现服务器的功能,并且与 中的另外一部分内容则通过进程间通讯(即 Binder 机制)的方式进行通讯。 o和 o 两个库是公用的, 其中除了 Camer a 还有其他方面的功能。 Camera 部分的头文件在 frameworks/base/include/ui/ 目录中,这个目录是和 库源文件的目录 frameworks/base/libs/ui/ 相对应的。 Camera 主要的头文件有以下几个: 在这些头文件 提供了对上层的接口, 而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类) ,这些接口类必须被实现类继承才能够使用。整个 Camera 在运行的时候,可以大致上分成 Client 和 Server 两个部分,它们分别在两个进程中运行, 它们之间使用 Binder 机制实现进程间通讯。这样在客户端调用接口, 功能则在服务器中实现,但是在客户端中调用就好像直接调用服务器中的功能,进程间通讯的部分对上层程序不可见。从框架结构上来看, 、 和 三个类定义了 camera 的接口和架构, 和 两个文件用于 Camera 架构的实现, Camera 的具体功能在下层调用硬件相关的接口来实现。从 Camera 的整体结构上,类 Camera 是整个系统核心, ICamera 类提供了 Camera 主要功能的接口,在客户端方面调用, CameraService 是 Camera 服务,它通过调用实际的 Camera 硬件接口来实现功能。事实上,图中红色虚线框的部分都是 Camera 程序的框架部分,它主要利用了 Android 的系统的 Binder 机制来完成通讯