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
建议:使用公司邮箱或Google账号关联的邮箱,便于后续提交补丁或参与AOSP社区协作。

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 HAL的接口定义(如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 分支选择决策流程

决策步骤:

  1. 确认目标设备的SoC厂商(Qualcomm / MTK / Exynos / 其他)。
  2. 从SoC厂商获取支持的AOSP分支版本(如LA.UM.9.14.r1对应Android 14)。
  3. 在AOSP官方分支列表中查找对应版本的最新安全补丁分支。
  4. 验证该分支的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开发密切相关的核心目录及其关系。

AOSP Camera HAL 源码目录结构 AOSP Camera HAL 核心目录结构 AOSP 根目录 frameworks/av/ hardware/ system/ camera/ media/ interfaces/ libhardware/ camera_metadata/ CameraService.cpp CameraProvider.cpp CameraDeviceClient.cpp ICameraDevice.hal ICameraProvider.hal types.hal 说明: Camera HAL 开发主要涉及 frameworks/av/camera/(服务端)、hardware/interfaces/camera/(HAL接口定义)和 system/camera_metadata/(元数据定义)。

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.cpp
  • hardware/interfaces/camera/3.4/ICameraDevice.hal
  • system/camera_metadata/camera_metadata_tags.h

至此,AOSP开发环境搭建完成,Camera HAL源码已就绪,可以进入下一阶段的编译配置。