Android Camera 模块分析
Android 应用程序编程语言是 JAVA,而 linux 的很多服务程序,包括一些 libraries 都是
用 c 或者 c++写的,应用程序使用什么样的机制去调用这些系统函数的呢?Java 的虚拟
机可以通过 System.loadLibrary 来加载本地库,也可以通过 JNI 函数 RegisterNatives
来注册与类相关联的本地方法。在 Android 中对于一些底层平台相关的 native 函数大多
采用注册关联的方式来调用。
系统启动后两个重要的 process:
1:App_main process: 进程通过 AndroidRuntime 调用 register_jni_procs 向 JNI 注
册模块的 native 函数供 JVM 调用。
2:Mediaserver proces:进程注册了以下几个 server:
AudioFlinger, MediaPlayerServer;CameraService.
Android Camera Application 调用 native 函数流程:
首先 Android Runtime 调用 register_android_hardware_Camera 注册 Camera 相
关 的 navtive 函 数 到 JNI 。 然 后 调 用 android_hardware_Camera_native_setup 为
Application 创 建 一 个 client 通 过 openCameraHardware 打 开 设 备 , 并 连 接 到
CameraServer 。 Application 开 启 preview 的 过 程 与 Application 建 立 到
CameraService 之 间 连 接 相 似 。 这 个 过 程 如 下 图 :
从上面可以看出在 JAVA VM 与 native 之间存在一个非常重要的连接层 JNI 即 JAVA
Native Interface。Android1.0 平台提供了 Camera 相关的 native 接口,如果这些接
口不够的话,通过这种机制我们可以方便的进行扩展,但是我们自己扩展的接口是与我们
的硬件平 台相关的 , 并不是 Android 官 方 支持的。 网上有人 说 Android1.0 不 支持
JNI,Android 无法执行本地JNI调用,但从 Android 源码来看是乎不存在这种情况,
至少是支持注册与类相关联的本地方法。
评论0
最新资源