2. Camera HAL开发环境搭建:Android源码下载、Camera HAL模块编译、adb调试环境配置
搭建稳定、可复现的Camera HAL开发环境是进行参数配置与调试工作的前提。本章将系统讲解从Android源码获取、Camera HAL模块独立编译,到adb调试链路验证的完整流程,帮助开发者建立高效的本地开发闭环。
环境概览: 推荐使用Ubuntu 20.04 LTS或22.04 LTS作为宿主系统,磁盘剩余空间至少250GB(含源码与编译产物),内存建议16GB以上。
2.1 Android源码下载与版本选择
Camera HAL作为Android系统的一部分,其源码随AOSP(Android Open Source Project)一起发布。选择正确的源码分支是后续编译与调试的基础。
2.1.1 分支选择策略
| Android版本 | API Level | Camera HAL主要变更 | 推荐场景 |
|---|---|---|---|
| Android 12 (S) | 31 | HAL3强制、CameraX集成 | 中端设备调试 |
| Android 13 (T) | 33 | HIDL转AIDL、多摄框架增强 | 主流开发学习 |
| Android 14 (U) | 34 | Ultra HDR、Camera HAL V4 | 最新特性验证 |
2.1.2 使用repo工具下载源码
AOSP采用多仓库管理,必须使用repo工具进行同步。以下为完整操作步骤:
- 安装repo工具:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
- 初始化指定分支(以android-13.0.0_r41为例):
mkdir ~/aosp-13
cd ~/aosp-13
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
repo sync -c -j8 # -c仅下载当前分支,-j8并行任务数
网络注意事项: 国内开发者建议使用清华或中科大AOSP镜像源。将
repo init中的URL替换为https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest,可显著提升下载速度。
- 验证源码完整性:
cd ~/aosp-13
repo status
# 确认所有仓库均显示为"clean"状态
2.2 Camera HAL模块编译
Camera HAL模块位于hardware/interfaces/camera或hardware/qcom/camera(高通平台)等路径下。掌握独立编译方法可大幅缩短开发迭代周期。
2.2.1 编译环境初始化
cd ~/aosp-13
source build/envsetup.sh
lunch aosp_arm64-userdebug # 选择目标设备
lunch目标选择: 开发调试阶段建议使用
userdebug或eng版本,它们保留root权限与调试工具。user版本会移除adb root等关键功能。
2.2.2 全编译与模块编译对比
| 编译方式 | 命令 | 耗时(参考) | 适用场景 |
|---|---|---|---|
| 全编译 | make -j16 |
2~4小时 | 首次搭建、系统级变更 |
| 模块编译 | make camera.hal -j16 |
5~15分钟 | HAL代码修改、日常调试 |
| 单文件编译 | mm(在模块目录下) |
1~3分钟 | 快速验证语法与逻辑 |
2.2.3 Camera HAL模块独立编译步骤
- 定位模块目录:
cd hardware/interfaces/camera
# 或针对高通平台:
cd hardware/qcom/camera
- 查看模块注册名称:
grep -r "LOCAL_MODULE" Android.bp Android.mk 2>/dev/null
# 输出示例:LOCAL_MODULE := camera.hal
- 执行模块编译:
source build/envsetup.sh
lunch aosp_arm64-userdebug
make camera.hal -j16
- 确认编译产物:
ls -l out/target/product/generic_arm64/vendor/lib/hw/camera.*.so
# 或
ls -l out/target/product/generic_arm64/vendor/lib64/hw/camera.*.so
编译加速技巧: 使用
ccache缓存编译中间文件。在~/.bashrc中添加export USE_CCACHE=1和export CCACHE_DIR=~/.ccache,首次编译后后续增量编译可提速50%以上。
2.3 adb调试环境配置
adb(Android Debug Bridge)是连接开发主机与目标设备的核心工具。Camera HAL调试依赖adb进行文件推送、日志捕获与服务控制。
2.3.1 adb工具安装与版本确认
# 安装adb(Ubuntu)
sudo apt update
sudo apt install android-tools-adb android-tools-fastboot
# 确认版本(建议 ≥ 1.0.41)
adb version
2.3.2 设备连接与权限配置
- USB连接与识别:
adb devices
# 若显示"unauthorized",需在设备上确认USB调试授权
# 若显示"no permissions",需配置udev规则
- 配置udev规则(解决权限问题):
# 创建规则文件
sudo vim /etc/udev/rules.d/51-android.rules
# 添加内容(以Google设备为例)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
- 常用adb调试命令速查:
| 命令 | 功能 | Camera HAL调试用途 |
|---|---|---|
adb root |
以root权限重启adbd | 获取vendor分区写入权限 |
adb remount |
重新挂载分区为可读写 | 替换HAL库文件 |
adb push |
推送文件到设备 | 部署编译好的camera HAL .so |
adb pull |
从设备拉取文件 | 获取HAL日志或dump文件 |
adb logcat -s CameraHAL |
过滤Camera HAL日志 | 实时监控HAL行为 |
adb shell killall cameraserver |
重启cameraserver进程 | 加载新HAL库 |
2.3.3 验证调试链路
完成上述配置后,执行以下命令验证整个调试链路是否畅通:
# 1. 确认设备在线
adb devices
# 输出示例:0123456789ABCDEF device
# 2. 获取root权限
adb root
# 输出:restarting adbd as root
# 3. 重新挂载分区
adb remount
# 输出:remount succeeded
# 4. 推送测试文件
echo "test" > /tmp/test_hal.txt
adb push /tmp/test_hal.txt /vendor/lib/hw/
# 输出:/vendor/lib/hw/test_hal.txt: 1 file pushed
# 5. 验证文件存在
adb shell ls -l /vendor/lib/hw/test_hal.txt
常见问题排查:
- adb devices显示offline: 重新插拔USB线,或执行
adb kill-server && adb start-server。 - adb remount失败: 确认设备已解锁bootloader,且当前为userdebug/eng版本。
- 推送后HAL未生效: 执行
adb shell killall cameraserver强制重启相机服务进程。
2.4 开发环境快速验证清单
完成上述所有步骤后,建议执行以下清单确认环境就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 源码完整性 | repo status |
所有仓库clean |
| 编译环境 | which m && echo $ANDROID_PRODUCT_OUT |
输出有效路径 |
| 模块编译 | make camera.hal -j4 2>&1 | tail -5 |
包含"#### build completed" |
| 设备连接 | adb devices |
显示device状态 |
| root权限 | adb root && adb shell id |
uid=0(root) |
| 分区可写 | adb remount && adb shell touch /vendor/test |
无错误输出 |
环境就绪标志: 当你能在5分钟内完成"修改HAL代码 → 模块编译 → adb push → 重启cameraserver → logcat查看效果"这一完整闭环时,说明开发环境已搭建成功,可以进入下一阶段的参数配置学习。