文档详情

Android-Camera-架构及应用简析.pdf

发布:2018-12-25约2.12万字共16页下载文档
文本预览下载声明
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
显示全部
相似文档