第3章:开发环境搭建
说实话,做Camera HAL开发,环境搭建这一步就能劝退不少人。我见过太多人卡在AOSP编译上,一搞就是好几天。其实没那么玄乎,今天我把这些年踩过的坑、积累的经验,一次性说清楚。
3.1 Ubuntu环境配置
我个人习惯用Ubuntu 20.04 LTS。为什么?因为Google官方推荐,而且社区支持最好。你非要用22.04也行,但有些依赖包得自己折腾。
3.1.1 基础依赖安装
先更新源,然后装必要的包。我直接给命令,你照着敲就行:
sudo apt-get update
sudo apt-get 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
3.1.2 配置Git和Repo
Git配置是基本功,但很多人忽略。我建议你一开始就配好:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global color.ui auto
然后装Repo工具。Repo是Google用来管理多Git仓库的神器,AOSP全靠它:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3.2 AOSP源码下载与编译
源码下载是整个环节最耗时的部分。我第一次下载时,整整花了两天。嗯,这里要注意网络环境。
3.2.1 选择分支
做Camera HAL开发,我建议选android-13.0.0_r41或android-12.0.0_r32。为什么?这两个版本稳定,而且Camera HAL架构比较成熟。你想想看,选太新的分支,可能遇到未修复的bug;选太老的,又缺乏新特性。
| 分支 | Android版本 | 适用场景 |
|---|---|---|
| android-13.0.0_r41 | 13 | 新项目开发,支持HAL3完整特性 |
| android-12.0.0_r32 | 12 | 兼容性要求高的项目 |
| android-11.0.0_r48 | 11 | 老平台维护,稳定性好 |
3.2.2 下载源码
初始化Repo仓库:
mkdir aosp
cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-13.0.0_r41
然后同步代码。这里我建议用-j参数并行下载,但别太大,否则容易断:
repo sync -j4 -c --no-tags
避坑指南: 我曾经用-j16下载,结果网络波动导致一半仓库没同步完。后来我学乖了,先用-j4跑一遍,再用repo sync -j8补全。稳得很。
3.2.3 编译AOSP
编译前先设置环境变量:
source build/envsetup.sh
lunch aosp_arm64-eng
然后开编。第一次编译建议用make -j4,虽然慢但不容易出错:
make -j4
编译时间取决于机器配置。我自己的工作站(32核,64G内存)大概40分钟。如果你用笔记本,可能得3-4小时。别急,去喝杯咖啡。
make -j8 camera.hal单独编译模块,省时间。
3.3 模拟器与真机调试环境
调试环境这块,我建议模拟器和真机都配好。模拟器方便快速验证,真机用来测实际效果。
3.3.1 模拟器配置
编译完成后,启动模拟器:
emulator -avd Pixel_6_API_33 -gpu host -memory 4096
这里-gpu host很重要,否则Camera预览会卡成PPT。我刚开始没加这个参数,调试Camera时画面一帧一帧跳,还以为是代码写错了。
3.3.2 真机调试
真机调试需要打开开发者选项和USB调试。这个大家都知道,但有个细节:
- 连接后先运行
adb devices确认设备识别 - 如果显示unauthorized,检查手机上的授权弹窗
- 建议用
adb root获取root权限,方便查看系统文件
adb remount重新挂载系统分区。我曾经在一台小米手机上折腾了半天,最后发现是内核没开root权限。
3.4 ADB与Logcat常用技巧
ADB和Logcat是Camera HAL调试的左右手。我每天至少用它们几百次。
3.4.1 ADB常用命令
除了基本的push/pull,这几个命令我几乎天天用:
# 查看Camera HAL进程
adb shell ps -A | grep camera
# 查看Camera HAL日志
adb logcat -s CameraHal
# 重启Camera服务
adb shell killall cameraserver
# 抓取Camera HAL的堆栈
adb shell dumpsys media.camera
3.4.2 Logcat过滤技巧
Logcat默认输出太多,不过滤根本没法看。我一般这样用:
# 只显示Camera相关日志
adb logcat -s CameraHal:V CameraService:V
# 保存日志到文件
adb logcat -v threadtime -s CameraHal:V > camera_log.txt
# 实时过滤,只显示错误
adb logcat -s *:E
个人经验: 调试Camera HAL时,我习惯同时开两个终端。一个跑adb logcat -s CameraHal:V看实时日志,另一个跑adb shell dumpsys media.camera看状态。这样问题定位快很多。
3.4.3 调试小技巧
最后分享几个我常用的调试技巧:
- 抓取Camera HAL的dump信息:
adb shell dumpsys media.camera -v 5,能看到所有Camera设备的详细状态 - 模拟Camera HAL的异常场景: 用
adb shell setprop persist.camera.hal.debug 5开启调试模式,日志会更详细 - 快速重启Camera服务: 改完代码后,不用重启整个手机,
adb shell killall cameraserver就行
嗯,环境搭建这部分就这些。说白了,就是耐心加细心。我第一次搭环境时也踩了不少坑,但后来发现,只要按步骤来,其实没那么难。下一章我们开始真正写Camera HAL代码,到时候你会感谢今天把环境搭好的自己。