android camera开发扫盲

cover

本文为android架构扫盲,主要是为了理清一些android开发中的基本概念

AOSP架构

AOSP架构如下图所示

AOSP 软件堆栈架构。

其中Linux Kernel为纯开源项目,但其他层则包含上下游商业合作

各个部分的作用从命名看都一目了然,这里不再赘述,详细描述见https://source.android.com/docs/core/architecture?hl=zh-cn

Android应用上下游

下面以camera应用为例,来介绍一下整个android开发上下游的合作商,整个上下游合作链条为ARM → 芯片厂(HAL/BSP) → OEM(ROM/硬件) → 算法厂(增强功能) → 用户

整体开发层级以及上下游厂商如下

层级 负责方 示例
硬件层 ARM、台积电(制造)、索尼(传感器) ARM Cortex-X1、IMX789 传感器
内核/BSP 高通、联发科 Linux 内核 + 定制驱动
HAL 层 高通(基础 HAL)、OEM(定制) Camera HAL、Audio HAL
Android 框架层 谷歌(AOSP)、OEM(定制) Activity Manager、MIUI 桌面
应用层 谷歌(GMS)、OEM(预装应用) Play 商店、小米音乐

下面以camera相机算法为例介绍一下深入了解一下各个公司在层级中扮演的角色

1) ARM

当前市面上几乎90%以上的手机芯片均采用arm架构,比如苹果、高通、联发科、紫光展锐的芯片,就连麒麟也是arm架构。当然inter x86架构在某些高性能移动设备中也有应用,但份额过少。

  • 角色:提供 CPU/GPU 指令集架构(ISA)核心设计(如 Cortex-A78、Mali-G78)
  • 开发层
    • 硬件层:定义芯片的底层架构(如 ARMv8-A 指令集)
    • BSP(Board Support Package):提供核心的 CPU/GPU 驱动和固件(如 Mali GPU 驱动)
  • 影响
    • 芯片厂商(如高通、联发科)需获得 ARM 授权,基于其 IP 设计 SoC
    • Android 系统需适配 ARM 指令集(如 AArch64 支持)
  • 产出:它自己不设计芯片,只是卖授权,IP等,然后从全球芯片厂商那里收授权费

2) Qualcomm或 MTK

  • 角色:SoC(系统级芯片)供应商,高通提供 骁龙(Snapdragon) 系列芯片(如 SM8850/骁龙 888),MTK提供天玑系列芯片(如DX-4)。

  • 开发层

    • 硬件层:集成 ARM CPU/GPU、自研 DSP(Hexagon)、ISP(Spectra)、基带等
    • BSP/HAL 层
      • 内核驱动(如 Camera Sensor Driver、Display Driver)
      • 硬件抽象层(HAL):实现 Android 定义的 HAL 接口(如 Camera HALAudio HAL
      • qcom专有库:如 GPU 驱动(Adreno)、AI 引擎(Hexagon NN)、ISP 算法(Spectra ISP 支持 HDR/Remosaic)、CamX架构
    • Android 框架适配:提供芯片相关的优化(如 Power Management、AI 加速)

    注意这里高通采用的是自研的adreno gpu架构,而mtk采用的是arm mali gpu,但两者都支持OpenCL、Vulkan、OpenGL等API调用接口

  • 关键输出

    • SoC 芯片(如骁龙 888)
    • BSP 包(Board Support Package,含内核驱动、HAL 实现、固件)
    • 专有闭源库(如 GPU 驱动、ISP 算法库)
  • 产出:提供高性能soc

3) OEM(小米/华为/苹果等)

  • 角色:设备制造商,负责硬件整合和软件定制

  • 开发层

    • 硬件层:选择传感器(如索尼 IMX766)、屏幕、电池等外围硬件
    • BSP 适配:修改高通/联发科的 BSP 以适配自家硬件(如 Camera Sensor 驱动调优)
    • HAL 层
      • 实现或定制 Vendor HAL(如 Camera HAL 调用高通 ISP 算法)
      • 修改 Camera HAL 以支持自家传感器(如三星 HM3)
      • 开发 设备专属功能(如小米的夜景模式、华为的 RYYB 色彩处理、小米的快充 HAL)
    • Android 框架修改(依赖于Google Android 授权新版):
      • 定制 UI(如 MIUI、EMUI)
      • 添加 OEM 专属 API(如华为的 HMS Core)
    • ROM(Firmware)
      • 包含 Android 系统镜像(基于 AOSP 修改)、内核HAL 实现预装应用
      • 可能锁定 Bootloader(防止用户刷机)
  • 关键输出

    • 设备专属 ROM(如 MIUI for Xiaomi)
    • 闭源 HAL 实现(如华为的相机算法库)

:苹果(Apple)是封闭生态,不使用 Android,但其供应链类似(ARM 指令集 + 自研芯片 + 闭源系统)。

**注:ROM指 OEM 提供的 **设备专属系统镜像,包含:

  • 修改后的 Android 系统(基于 AOSP)
  • 内核(可能打上 OEM 补丁)
  • 预装应用(如小米商店、华为云服务)
  • 闭源 HAL 和驱动

例如MIUI、ColorOS、EMUI 都是 Vendor ROM

4) Camera Algorithm Provider

  • 角色:提供 图像处理算法(如降噪、HDR、人像模式)
  • 典型厂商
    • 虹软(ArcSoft):提供多帧降噪、夜景算法
    • Morpho:提供虚化、美颜算法
    • OEM 自研:如华为的 XD Fusion、谷歌的 HDR+
  • 开发层
    • 集成到 HAL:算法通常以 闭源库(.so) 形式提供,由 OEM 通过 Camera HAL 调用
    • 依赖硬件:部分算法需特定 ISP 支持(如高通的 Spectra ISP 支持 MFHDR)

Android应用开发语言

讲完了android上下游,再来聊聊android应用开发,上述提到的上下游供应商的语言偏好如下

供应商层级 典型厂商 主要编程语言 说明
芯片厂商 高通(Qualcomm)、联发科(MediaTek) C/C++(主导)、汇编(关键优化) 底层驱动、HAL、ISP/DSP 算法需高性能和硬件直接交互,C/C++ 是首选。
OEM(手机厂商) 小米、华为、三星 Java/Kotlin(框架/应用层)、C++(HAL/驱动) 上层应用用 Java/Kotlin,底层 HAL 和性能敏感模块用 C++(如相机算法调用)。
算法供应商 虹软(ArcSoft)、Morpho C/C++(核心算法)、Python(原型验证) 图像/音频算法需高效计算,通常以 闭源库(.so/.a) 形式提供,C/C++ 是行业标准。
谷歌(AOSP) Google Java/Kotlin(框架)、C++(HAL/底层) Android 框架层用 Java,Native 层(如 Binder、SurfaceFlinger)用 C++。

ArcSoft示例

ArcSoft交付物

  • 开发语言C/C++(占主导),原因包括:
    • 高性能计算需求(如多帧降噪、HDR 合成)
    • 直接调用硬件加速接口(如 DSP/GPU 的 OpenCL/Vulkan)。
    • 跨平台兼容性(可移植到不同 SoC 和 OEM 设备)。
  • 算法交付:通常以 动态库(.so)或 静态库 (.a)的形式向OEM提供算法,例如:
    • libarcsoft_hdr.so(HDR 处理库)
    • libarcsoft_night.so(夜景模式库)

OEM集成方式

  1. HAL层集成(主流方案)

    • 集成方式:

      • OEM 在 Camera HAL 实现(如 QCameraHAL.cpp)中直接加载虹软的库(dlopen)并调用其接口。

      • 封装为 HAL 扩展:部分 OEM 会将虹软算法封装为 自定义 HAL 接口(如 vendor.xiaomi.hardware.camera.arcsoft@1.0),供框架层调用。

    • 数据流:Sensor → HAL(调用虹软库) → ISP → Framework → APK。

    • 优势:

      • 直接访问传感器原始数据(RAW/YUV),处理画质更优。

      • 低延迟,可结合 SoC 的 ISP 硬件加速(如高通 Spectra ISP)

  2. APK层集成

    • 集成方式:
      • 将算法库打包到 相机应用(APK) 中,通过 JNI 调用。
    • 适用场景
      • 轻量级算法(如美颜滤镜)
      • 需要快速迭代(无需升级 HAL 或固件)
    • 数据流:Sensor → HAL → Framework → APK(调用虹软库)
    • 缺点
      • 无法直接处理 RAW 数据,画质受限
      • 性能低于 HAL 层集成(需通过 Android 框架传输数据)

总的来说,集成到HAL层的功能大多数基于c/c++进行开发,来确保高性能处理。而上层APK应用基于AOSP开发,封装应用例如com.camera.xxx,则是通过jni调用高性能C/C++ so库进行集成。如果是性能不敏感的场景,则使用java开发即可。

Android Native 开发介绍

Android Native开发需要基于Android NDK(Native Development Kit),NDK为32 位 ARM、AArch64、x86 及 x86-64 提供 ABI (Android Binary Interface)支持,ABI和支持的指令集如下

ABI 支持的指令集 备注
armeabi-v7a armeabi
Thumb-2
Neon
与 ARMv5/v6 设备不兼容。
arm64-v8a AArch64 仅限 Armv8.0。
x86 (32bit) x86 (IA-32)
MMX
SSE/2/3
SSSE3
不支持 MOVBE 或 SSE4。
x86_64 x86-64
MMX
SSE/2/3
SSSE3
SSE4.1、4.2
POPCNT
CMPXCHG16B
LAHF-SAHF
完整的 x86-64-v2

NDK中提供了LLVM libc++配套的编译工具链,可以让我们使用不同版本版本的C++

扩展阅读

  1. Android AOSP:https://source.android.com/docs/core/architecture?hl=zh-cn
  2. Android ABIs:https://developer.android.com/ndk/guides/abis
  3. Android NDK开发:https://developer.android.com/ndk/guides
  4. 高通camx架构:https://blog.csdn.net/weixin_51178981/article/details/126714490
  5. Android init进程:https://wizzie.top/android/android_android系统启动流程_1_init进程启动流程/
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2025 YuleZhang's Blog
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信