稀有猿诉

十年磨一剑,历炼出锋芒,说话千百句,不如码二行。

Android Camera App开发学习路线

对于智能手机来说相机是非常重要的一个功能,它是影像的生产者,是新时代社交(图片,视频)内容的基础。后面我们将重点学习 一下安卓平台的Camera app开发。

Camera 2 API

学习如何使用新的API,以实例的方式来学习新一套API如何使用,最终成果将会是一个简单的,具有基础功能的Camera App。

有以下文档可供参考:

同时谷歌也有一些官方的样例可供参考:

AOSP源码中的Camera2也是值得学习和参考 的。

Frameworks

在学习完API如何使用以后,还需要深入学习一下API下面的框架层。正所谓知其然,更要知其所以然,看了Demo以及文档后谁都会有API,要想加深理解,就必须继续深挖。

这部分没有什么捷径,只能去啃AOSP的源码了。

CameraService

这是Frameworks层的最后一环,它连接着Java层和HAL层,主要负责camera device的管理,如权限,打开与关闭的管理,在Android M之前并不是独立的进程,是放在media.server一起的,后来独立成为一个单独的系统级别的进程cameraserver,在ServiceManager中的名字是media.camera,可以通过如下命令查看它的状态:

1
adb shell dumpsys media.camera

Jetpack中的CameraX

这是谷歌封装的库,用以简化API的调用,加快app开发进度。

深入了解业务架构与技术栈

AOSP中的文档也值得学习

SnapdragonCamera

相机是技术栈当中最为复杂的一个,SoC平台是至关重要的,所以Qcom的SnapdragonCamera也是值得深入学习的。

相机业务知识学习

封装

相机是非常受硬件限制的,不同的SoC平台,不同的OEM厂商,以及不同的Android版本,API以及具体细节差异巨大,这给Camera app开发带来非常大的适配工作,那么可以把Camera app核心的业务封装成一个库,这样可以简化开发。

架构

如何架构一个Camera app。

扩展功能

除基本的拍照录像功能以外,可以扩展一些功能。

优秀开源项目

react-native-camera

camerakit-android

cameraview

CameraView

Fotoapparat

StickerCamera

CameraView

CainCamera

AndroidCamera

CameraFilter

CameraFragment

Comments