Android-Camera-架构及应用简析.pdf
文本预览下载声明
Android Camera 架构及应用简析
1. 前言
整体看一下Android Camera 部分的代码,从APP 层的Camera 到Framework 的
Camera 应用框架,再到 Hardware 的Camera HAL ,再到 Kernel 的 Camera
Driver。
2. 架构概述
要了解Android Camera 架构,还是得先从Android 本身的架构说起。
图1 Android 架构图
从Android 框架看,分为四层:应用层、应用框架层、库层、内核层。
应用层主要工作在Android SDK 之上,利用Android 提供的API 进行开发,生成
APK 包。
应用框架层整合了Android 自带各种控件和类,为应用开发提供高效、方便的API 接
口。这个对上实现统一的接口,对下也提供统一的标准方便各种库的移入。
库层是Android 与底层硬件通信接口,它封装底层硬件接口实现该模块的具体逻辑,
并以服务的形式通过Binder 通讯机制暴露给应用框架。
内核层则是直接与硬件联系的一层,可以理解为设备驱动。
3. Camera 层次简析
说完Android 整体框架,我们以Camera 为例来说明一下Camera 在各层是如何实现。
下图是Camera 部分在Android 上各层的分布图
图2 Camera 结构分布图
➢ 3.1 应用层
Camera 的应用层在Android 上表现为直接调用SDK API 开发的一个Camera 应用
APK 包。代码在\android\packages\apps\Camera 下。主要是Java 写的基于
android.hardware.Camera 类调用的封装,并且实现Camera 应用的业务逻辑和UI 显
示。android.hardware.Camera 就是Android 提供给上层调用的Camera 类。这个类
用来连接或断开一个Camera 服务,设置拍摄参数,开始、停止预览,拍照等。它也是
Android Camera 应用框架封装暴露出来的接口。一个Android 应用中若要使用这个类,
需要在Manifest 文件声明Camera 的权限,另外还需要添加一些uses-feature元素
来声明应用中的Camera 特性,如自动对焦等。具体做法可如下:
uses-permission android:name=android.permission.CAMERA /
uses-feature android:name=android.hardware.camera /
uses-feature android:name=android.hardware.camera.autofocus /
➢ 3.2 应用框架层
Camera 框架层将应用与底层的实现隔离开来,实现了一套Android 定义的对上对下
接口规范,方便应用及底层硬件的开发和移植。这一层对上以Java 类的形式包装出
android.hardware.Camera ,提供给应用层调用;对下在
CameraHardwareInterface.h 头文件中定义了Camera 硬件抽象层的接口,这是一个
包含纯虚函数的类,必须被实现类继承才能使用。这个实现类也即是下层中将讲到的用户库
层,它继承CameraHardwareInterface 接口,实例化对底层硬件驱动的封装,最终生成
libcamera.so 供框架的libcameraservice.so 调用。这样做的好处是让Camera 的应用
框架代码独立,不受底层硬件驱动改变的影响,方便在不同平台上porting 驱动代码,而
保持上层的代码不用变化。
从代码上看,这一层包含Java 到JNI 到C++的代码。
\android\frameworks\base\core\java\android\hardware\Camera.java
这个类作为Android SDK Camera 部分提供给上层应用,并通过JNI 的方式调用本地
C++代码。
\android\frameworks\base\core\jni\android_hardware_Camera.cpp
Camera 的JAVA 本地调用部分,是承接JAVA 代码到C++代码的桥梁。编译生成
libandroid_runtime.so
显示全部