Android 的Camera 架构 一 Android Camera 框架 要了解Android Camera 架构,还是得先从Android 本身的架构说起。 图1 Android Architectu re 从Android 框架看,分为四层:应用层、应用框架层、库层、内核层。 应用层主要工作在 Android SDK 之上,利用Android 提供的API 进行开发,生成 APK包。 应用框架层整合了Android 自带各种控件和类,为应用开发提供高效、方便的API 接口。这个对上实现统一的接口,对下也提供统一的标准方便各种库的移入。 库层是Android 与底层硬件通信接口,它封装底层硬件接口实现该模块的具体逻辑,并以服务的形式通过 Binder 通讯机制暴露给应用框架。 内核层则是直接与硬件联系的一层,可以理解为设备驱动。 通过对上面框架的简要说明,我们大致明白一个应用自上而下的各个层起什么作用,这样有助于我们对代码的理解和修改。如果要做基于 Android porting 工作,就要明白在哪个层次的porting,怎么 porting。 Android 的Camera 包含取景器(view finder)和拍摄照片(take picture)的功能。目前Android 原生的Camera 程序虽然功能比较简单,但是其程序的架构分成客户端和服务器两个部分,它们建立在 Android 的进程间通讯 Binder 的结构上。Android 中的Camera 模块同样遵循 Android 的框架,如下图所示。 图 2 Camera Architecture 二 Android Camera 架构分层及代码结构 以开源的 Android 为例,Camera 架构主要分为以下几个层次 2.1 应用层 Camera 的 JAVA 应用程序的路径: packages/apps/Camera/src/com/android/camera/ 在其中 Camera.java 是主要实现的文件 2.2 JNI 层(Camera 的 JAVA 本地调用部分): framew orks/base/core/java/android/hardw are/Camera.java 这个类是和JNI 中定义的类是同一个,有些native 方法通过JNI 的方式调用Native 代码实现具体的功能,比如startPreview 、autoFocus、takePicture 等。 2.3 Camera client 层: 头文件分布以下的目录中: framew orks/base/include/camera/ Camera 底层库在以下的目录中: framew orks/base/libs/camera/ 这部分的内容被编译成库 libcamera_client.so(或者 libui.so),主要实现了以下几个类: Camera---->Camera.cpp/Camera.h CameraParameters---->CameraParameters.cpp/CameraParameters.h ICamera----> ICamera.cpp/ ICam...