第1章 编译环境初始化问题排查
编译环境初始化是AOSP编译的第一步,也是最容易出错的环节。环境变量缺失、依赖库未安装、磁盘空间不足是三大高频原因。本章按“现象→数据采集→原因定位→修复→复测→预防”的实战流程,帮助读者快速定位并修复此类问题。
1.1 现象识别
当执行source build/envsetup.sh或lunch命令时,可能出现以下典型现象:
- 命令未找到:
bash: lunch: command not found - 编译中断:提示
fatal error: xxx.h: No such file or directory - 磁盘写入失败:
No space left on device
1.2 数据采集
通过以下命令收集系统状态:
# 检查环境变量
echo $PATH
echo $ANDROID_BUILD_TOP
echo $ANDROID_HOST_OUT
# 检查磁盘空间
df -h
# 检查系统包管理器是否已安装必要依赖(以Ubuntu为例)
dpkg -l | grep -E "libncurses5|libssl-dev|flex|bison"
# 检查Python版本
python3 --version
将输出结果记录,用于后续对照标准环境。
1.3 原因定位
根据采集到的数据,对照故障树决策表进行定位:
| 现象 | 可能原因 | 验证方法 |
|---|---|---|
command not found | 环境变量未加载或缺失 | 检查build/envsetup.sh是否成功执行 |
| 缺少头文件/库 | 依赖库未安装或版本不匹配 | 检查dpkg -l或apt list --installed |
No space left | 磁盘空间不足 | 检查df -h,特别是out目录挂载分区 |
1.4 修复动作
针对不同原因执行对应修复:
- 环境变量缺失:重新source环境或添加缺失路径到
~/.bashrc:cd /path/to/aosp source build/envsetup.sh lunch aosp_arm-eng - 依赖库未安装:使用包管理器安装缺失项:
sudo apt update sudo apt install -y libncurses5 libssl-dev flex bison python3 - 磁盘空间不足:清理无用文件或扩展分区:
# 清理out目录 make clobber # 或直接删除旧编译产物 rm -rf out/
1.5 复测
执行以下命令验证修复是否生效:
# 验证环境变量
echo $ANDROID_BUILD_TOP
# 验证依赖
dpkg -l | grep libncurses5
# 验证磁盘
df -h /path/to/aosp
# 尝试编译最小目标
make -j$(nproc) droid
如果编译正常启动(至少进入make流程),则环境初始化通过。
1.6 预防措施
最佳实践:使用脚本一键检查环境,并创建环境快照。以下是一个环境自检脚本示例:
#!/bin/bash
echo "=== AOSP Environment Check ==="
[ -z "$ANDROID_BUILD_TOP" ] && echo "ERROR: ANDROID_BUILD_TOP not set"
[ ! -f "$ANDROID_BUILD_TOP/build/envsetup.sh" ] && echo "ERROR: envsetup.sh missing"
df -h . | awk 'NR==2 {if($4 < 50) print "WARNING: disk space <50G"}'
echo "=== Done ==="
- 在开始大型编译前,预留至少100GB可用空间。
- 使用
repo init后立即运行环境检查。 - 建议在Docker容器中配置标准环境,避免污染宿主机。