2. 开发环境搭建:AOSP源码下载、Camera HAL模块编译、刷机与调试环境配置
在开始自定义美颜与滤镜算法的Camera HAL开发之前,搭建一套完整、可复现的开发环境是首要任务。本章将引导你完成从AOSP源码下载、Camera HAL模块编译到刷机与调试环境配置的全流程。一个稳定的环境能让你在后续算法集成与调试中事半功倍。
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
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 避免网络拥塞。同步完成后,源码目录结构如下:
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 调试,并配置以下调试工具:
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 进程 |
| 相机功能 | 打开系统相机应用 | 预览画面正常,可拍照 |