第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容器中配置标准环境,避免污染宿主机。
编译环境初始化故障排查流程 编译环境初始化失败 环境变量缺失 依赖库未安装 磁盘空间不足 重新source环境 安装缺失依赖 清理磁盘空间 复测验证通过 磁盘空间不足时建议预留100GB 可使用df -h监控