2. 开发环境搭建:AOSP源码下载、Camera HAL模块编译、刷机与调试环境配置

在开始自定义美颜与滤镜算法的Camera HAL开发之前,搭建一套完整、可复现的开发环境是首要任务。本章将引导你完成从AOSP源码下载、Camera HAL模块编译到刷机与调试环境配置的全流程。一个稳定的环境能让你在后续算法集成与调试中事半功倍。

环境概览:本课程基于 Android 14 (AOSP Tag: android-14.0.0_r30),目标设备为 Pixel 6 Pro (raven)。推荐使用 Ubuntu 22.04 LTS 作为编译主机,配备至少 16GB 内存、500GB 可用磁盘空间(建议 SSD)和稳定的网络连接。

2.1 主机环境准备与依赖安装

编译AOSP需要特定的Linux发行版和工具链。以下是推荐的软件环境清单:

组件 版本/要求 备注
操作系统 Ubuntu 22.04 LTS (x86_64) 官方推荐,兼容性最佳
Python 3.9+ 用于repo工具和构建脚本
Git 2.25+ 版本控制
OpenJDK 17 (Ubuntu 22.04 默认) Android 14 构建所需
磁盘空间 至少 400GB (源码+构建输出) 建议 500GB+ SSD
内存 16GB+ 32GB 可显著提升编译速度

执行以下命令安装核心依赖:

sudo apt update
sudo apt install -y git-core gnupg flex bison build-essential zip curl zlib1g-dev \
  gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev \
  libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
sudo apt install -y python3 python3-pip
pip3 install --upgrade pip
注意:不要使用系统自带的 OpenJDK 11,Android 14 要求 JDK 17。如果系统默认版本不符,请使用 sudo apt install openjdk-17-jdk 安装并设置默认版本。

2.2 AOSP源码下载与分支选择

使用 repo 工具管理AOSP多仓库源码。首先安装并配置 repo:

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

创建一个工作目录并初始化指定分支的源码:

mkdir ~/aosp_14
cd ~/aosp_14
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r30
repo sync -c -j$(nproc --all)

repo sync 过程可能持续数小时,取决于网络速度。建议使用 -j4 或 -j8 避免网络拥塞。同步完成后,源码目录结构如下:

AOSP 源码顶层目录结构 aosp_14/ frameworks/ hardware/ device/ vendor/ av/ native/ interfaces/ libhardware/ google/ google/ 关键路径说明: • frameworks/av/ : 包含 CameraService 和 CameraProvider 实现 • hardware/interfaces/ : 定义 Camera HAL 的 HIDL/AIDL 接口 • device/google/ : 包含 Pixel 设备专属的 HAL 实现和配置 • vendor/google/ : 包含 Google 闭源驱动和专有库

2.3 Camera HAL 模块编译

Camera HAL 模块位于 hardware/interfaces/camera/ 和 device/google/ 目录下。编译前需要设置环境并选择目标设备。

2.3.1 设置编译环境

cd ~/aosp_14
source build/envsetup.sh
lunch aosp_raven-userdebug

lunch 命令会加载目标设备的构建配置。userdebug 版本提供 root 权限和调试工具,适合开发阶段。

2.3.2 编译 Camera HAL 模块

为了加快迭代速度,我们只编译 Camera HAL 相关模块,而非整个系统镜像:

# 编译 Camera HAL 接口和实现
make android.hardware.camera.provider@2.7-service-google
make android.hardware.camera.provider@2.7-impl-google

# 编译 CameraService
make cameraserver

# 编译 HAL 测试工具
make camera2test

编译完成后,输出文件位于 out/target/product/raven/ 目录下:

模块名称 输出路径 说明
camera.provider vendor/bin/hw/android.hardware.camera.provider@2.7-service-google Camera HAL 服务可执行文件
camera.impl vendor/lib64/hw/android.hardware.camera.provider@2.7-impl-google.so HAL 实现共享库
cameraserver system/bin/cameraserver Camera 服务进程
编译加速技巧:使用 make -j$(nproc) 并行编译。如果修改仅涉及单个模块,使用 mma 命令在模块目录内增量编译,速度更快。

2.4 刷机与调试环境配置

将编译好的镜像刷入设备,并配置调试工具。

2.4.1 刷机流程

确保设备已解锁 bootloader 并处于 fastboot 模式:

# 进入 fastboot 模式
adb reboot bootloader

# 刷入完整系统镜像(首次刷机)
fastboot flashall -w

# 仅更新 Camera HAL 模块(增量更新)
fastboot flash vendor vendor.img
fastboot reboot

fastboot flashall -w 会清除用户数据,首次刷机建议执行。后续迭代只需刷写 vendor.img 即可更新 HAL 模块。

2.4.2 调试环境配置

刷机完成后,启用开发者选项和 USB 调试,并配置以下调试工具:

Camera HAL 调试工具链 开发主机 (Ubuntu) Pixel 6 Pro (设备) USB / ADB adb fastboot logcat gdb cameraserver HAL Service dumpsys perfetto 调试命令示例: adb logcat -s CameraService:V CameraHAL:V # 过滤 Camera 相关日志 adb shell dumpsys media.camera # 查看 Camera 服务状态

2.4.3 验证 HAL 模块是否正常加载

刷机重启后,执行以下命令验证 Camera HAL 是否正常工作:

# 检查 HAL 服务进程
adb shell ps -A | grep camera

# 检查 HAL 接口注册状态
adb shell lshal | grep camera

# 测试相机基本功能
adb shell am start -a android.media.action.IMAGE_CAPTURE

如果 HAL 服务未启动,检查 logcat 中的错误信息,常见问题包括 SELinux 权限不足、依赖库缺失或接口版本不匹配。

常见问题排查:
  • SELinux 权限:如果 HAL 服务被 SELinux 阻止,临时执行 adb shell setenforce 0 切换到宽容模式进行调试。
  • 依赖库缺失:使用 adb shell ldd /vendor/bin/hw/android.hardware.camera.provider@2.7-service-google 检查所有依赖是否已正确链接。
  • 接口版本不匹配:确保 hardware/interfaces/camera/ 中的 HIDL 定义与设备上的实现版本一致。

2.5 开发环境验证清单

完成上述步骤后,使用以下清单确认环境就绪:

检查项 验证方法 预期结果
AOSP 源码同步 repo status 所有仓库显示为 clean 或 modified(无错误)
编译环境 lunch aosp_raven-userdebug 成功加载构建配置,无报错
HAL 模块编译 make android.hardware.camera.provider@2.7-service-google 编译成功,生成目标文件
刷机 fastboot flashall -w 设备重启进入系统,无错误提示
HAL 服务运行 adb shell ps -A | grep camera 显示 cameraserver 和 camera.provider 进程
相机功能 打开系统相机应用 预览画面正常,可拍照