3. 开发环境搭建(二):AOSP源码下载与同步、配置git与repo、选择目标设备与分支
在完成基础工具链安装后,本章进入AOSP(Android Open Source Project)源码获取的核心环节。Camera HAL作为Android系统的一部分,其开发必须基于完整的AOSP源码树。你将掌握git与repo的配置、目标设备与分支的选择策略,以及源码下载与同步的完整流程。
3.1 Git与Repo工具配置
AOSP由数百个Git仓库组成,Google使用Repo(一个基于Python的仓库管理工具)来统一管理这些仓库的版本与分支。正确配置Git和Repo是后续所有操作的前提。
3.1.1 Git全局配置
在开始下载源码前,必须设置Git的用户信息,否则Repo在同步时会报错。
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global color.ui auto
git config --global core.autocrlf input
3.1.2 Repo工具安装与初始化
Repo本身是一个脚本,需要从Google的源代码仓库下载并赋予执行权限。
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=$PATH:~/bin
将export PATH=$PATH:~/bin添加到~/.bashrc或~/.zshrc中,使其永久生效。
3.1.3 Repo配置清单
| 配置项 | 推荐值 | 说明 |
|---|---|---|
REPO_URL |
https://gerrit.googlesource.com/git-repo |
Repo镜像地址,国内用户可替换为清华或中科大镜像 |
--depth |
1 |
浅克隆,只下载最新版本,大幅减少下载量 |
--no-tags |
可选 | 不下载标签,节省存储空间 |
--current-branch |
可选 | 只同步当前分支,避免全部分支数据 |
3.2 选择目标设备与分支
Camera HAL的开发与特定硬件平台和Android版本紧密绑定。选择错误的分支或设备类型,会导致驱动不匹配、HAL接口缺失或编译失败。
3.2.1 分支选择策略
AOSP分支命名遵循android-<版本>_<季度>_<安全补丁>或android-<API等级>_r<修订号>格式。Camera HAL开发者应关注以下分支类型:
- 正式发布分支(如
android-14.0.0_r30):稳定,适合产品开发。 - 季度发布分支(如
android-14-qpr3-release):包含最新功能,适合预研。 - 开发分支(如
main):每日构建,不稳定,仅用于AOSP贡献者。
camera_metadata_tags.h、ICameraDevice.h)在不同分支间可能存在差异。务必确认所选分支与目标设备的HAL实现版本一致。
3.2.2 目标设备类型与对应分支
| 设备类型 | 典型设备 | 推荐分支 | Camera HAL特点 |
|---|---|---|---|
| Pixel手机 | Pixel 8 / 8 Pro | android-14.0.0_r30 |
官方参考实现,HAL3完整支持 |
| 高通平台 | Qualcomm RB5 / SA8295 | android-14.0.0_r30 + 高通BSP |
需集成高通私有HAL扩展 |
| MTK平台 | MTK Dimensity 9200 | android-14.0.0_r30 + MTK BSP |
需适配MTK Camera HAL层 |
| 车载平台 | R-Car V4H / i.MX8 | android-14.0.0_r30 + 车载BSP |
多摄像头、环视、HDR特殊需求 |
3.2.3 分支选择决策流程
决策步骤:
- 确认目标设备的SoC厂商(Qualcomm / MTK / Exynos / 其他)。
- 从SoC厂商获取支持的AOSP分支版本(如LA.UM.9.14.r1对应Android 14)。
- 在AOSP官方分支列表中查找对应版本的最新安全补丁分支。
- 验证该分支的Camera HAL接口版本(HAL3.4 / HAL3.5 / HAL3.6)。
3.3 AOSP源码下载与同步
源码下载分为初始化Repo和同步代码两个阶段。以下以Android 14(API 34)为例,展示完整流程。
3.3.1 初始化Repo工作区
mkdir ~/aosp-android-14
cd ~/aosp-android-14
repo init -u https://android.googlesource.com/platform/manifest \
-b android-14.0.0_r30 \
--depth=1 \
--no-tags \
--current-branch
如果使用国内镜像,将android.googlesource.com替换为mirrors.tuna.tsinghua.edu.cn/git/AOSP或mirrors.ustc.edu.cn/aosp。
3.3.2 同步源码
repo sync -c -j$(nproc --all) --no-tags --current-branch
参数说明:
-c:只同步当前分支。-j$(nproc --all):使用所有CPU核心并行下载,加速同步。--no-tags:不下载标签,节省约30%的传输量。--current-branch:只同步当前分支的引用。
--depth=1浅克隆,后续增量同步时移除--depth参数以获取完整历史。
3.3.3 增量同步与恢复
日常开发中,只需执行repo sync即可获取最新代码。如果同步中断,Repo会自动断点续传。若遇到网络问题,可尝试:
repo sync --force-sync --no-clone-bundle -j4
--force-sync会强制重新同步失败的仓库,--no-clone-bundle避免使用可能损坏的克隆包。
3.4 AOSP源码目录结构(Camera相关)
理解源码目录结构有助于快速定位Camera HAL相关文件。下图展示了AOSP中与Camera开发密切相关的核心目录及其关系。
3.5 常见问题与解决方案
问题1:repo init 报错 "fatal: Cannot get https://gerrit.googlesource.com/git-repo"
原因:网络无法访问Google服务。
解决:使用国内镜像:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r30
问题2:repo sync 过程中断,提示 "error: Exited sync due to fetch errors"
原因:部分仓库网络超时或连接重置。
解决:执行 repo sync --force-sync --no-clone-bundle -j4 重试,或增加 --fail-fast 参数快速定位失败仓库。
问题3:磁盘空间不足
原因:完整AOSP源码约80-120GB(含.git历史)。
解决:使用 --depth=1 浅克隆,或只同步Camera相关仓库:repo sync frameworks/av/ hardware/interfaces/ system/camera_metadata/
3.6 验证源码完整性
同步完成后,执行以下命令验证Camera相关目录是否存在:
ls -la frameworks/av/camera/
ls -la hardware/interfaces/camera/
ls -la system/camera_metadata/
确认存在以下关键文件:
frameworks/av/camera/CameraService.cpphardware/interfaces/camera/3.4/ICameraDevice.halsystem/camera_metadata/camera_metadata_tags.h
至此,AOSP开发环境搭建完成,Camera HAL源码已就绪,可以进入下一阶段的编译配置。