2. 编译环境搭建:Ubuntu环境准备、依赖工具安装、Python/Node.js/CCache等工具链配置

好,咱们直接进入正题。搭建编译环境,说白了就是给你的电脑装上能“听懂”鸿蒙源码的工具。这一步要是没弄好,后面编译起来全是坑。我个人习惯用 Ubuntu 20.04 LTS,稳定,社区支持也好。你如果用的是其他版本,问题也不大,但包名可能稍微有点区别。

2.1 Ubuntu 环境准备

我建议你装一个干净的 Ubuntu 系统,别在 Windows 上用 WSL 折腾,虽然也能跑,但文件权限和路径问题会让你怀疑人生。嗯,这里要注意:磁盘空间至少留 100GB,内存 16GB 起步。为什么?因为鸿蒙的源码拉下来就十几个 G,编译中间产物更是能膨胀到 50GB 以上。

核心要点: 使用 Ubuntu 20.04 LTS,确保磁盘分区为 ext4,避免使用 NTFS 或 FAT32 格式。

装好系统后,第一件事就是换源。你想想看,默认的国外源下载速度有多慢?我当年第一次编译时,光装依赖就等了一个多小时。换成清华或中科大的源,速度能快 10 倍。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 替换为清华源(Ubuntu 20.04)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

2.2 依赖工具安装

鸿蒙的编译系统依赖一堆基础工具。说白了,就是一些编译器和脚本解释器。我列个清单,你直接复制命令跑就行。

工具名称 用途 安装命令
build-essential 基础编译工具(gcc、g++、make) sudo apt install build-essential
git 源码版本管理 sudo apt install git
curl & wget 下载工具 sudo apt install curl wget
unzip & zip 解压压缩包 sudo apt install unzip zip
libssl-dev SSL 开发库 sudo apt install libssl-dev
libncurses5-dev 终端界面库 sudo apt install libncurses5-dev

小技巧: 你可以把上面所有包写在一行安装:sudo apt install build-essential git curl wget unzip zip libssl-dev libncurses5-dev -y

我曾经遇到过一个问题:装完所有依赖后,编译时提示找不到 m4 宏处理器。后来才发现,有些依赖是隐式的,不会自动安装。所以建议你再补一个:sudo apt install m4 flex bison。这三个是编译脚本生成器,鸿蒙的 gn 和 ninja 构建系统会用到。

2.3 Python 环境配置

鸿蒙的编译脚本主要用 Python 3 写的。官方要求 Python 3.8 以上。我个人习惯用 pyenv 管理多版本,但如果你只做鸿蒙开发,直接用系统 Python 也行。

# 检查当前 Python 版本
python3 --version

# 如果版本低于 3.8,安装 Python 3.9
sudo apt install python3.9 python3.9-dev python3.9-venv

# 设置默认 Python 3
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1

这里有个坑:Ubuntu 20.04 默认的 Python 3.8 其实够用,但有些工具链需要 python3-distutils 包。我当初没装这个,结果运行 hb build 时直接报错 ModuleNotFoundError: No module named 'distutils'。解决办法很简单:

sudo apt install python3-distutils python3-pip

2.4 Node.js 安装

Node.js 在鸿蒙编译中主要用于前端相关的构建任务,比如 JS 框架的打包。你可能会问:为什么编译系统还要 Node?嗯,因为鸿蒙的 ArkUI 框架有一部分是用 TypeScript 写的,需要 Node 来转译。

我推荐用 nvm 安装 Node,方便切换版本。鸿蒙官方推荐 Node 14.x 或 16.x。

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

# 重新加载终端配置
source ~/.bashrc

# 安装 Node 16 LTS
nvm install 16
nvm use 16

# 验证
node --version
npm --version

警告: 不要用 sudo apt install nodejs 安装,那个版本太旧(通常是 10.x),会导致编译失败。我踩过这个坑,编译到一半报错说 Promise.allSettled 未定义,就是因为 Node 版本太低。

2.5 CCache 配置

CCache 是个好东西。说白了,它是一个编译器缓存工具。你第一次编译时,它会缓存每个 .o 文件。第二次编译时,如果源文件没变,就直接用缓存,速度能快 3-5 倍。

鸿蒙的代码量巨大,全量编译一次要 1-2 小时。有了 CCache,增量编译可能只需要 10 分钟。我建议你从一开始就配好。

# 安装 CCache
sudo apt install ccache

# 配置环境变量(写入 ~/.bashrc)
echo 'export USE_CCACHE=1' >> ~/.bashrc
echo 'export CCACHE_DIR=~/.ccache' >> ~/.bashrc
echo 'export CCACHE_MAXSIZE=50G' >> ~/.bashrc
source ~/.bashrc

# 设置缓存大小(建议 50GB)
ccache -M 50G

# 查看状态
ccache -s

这里有个细节:CCache 默认只缓存 C/C++ 编译。鸿蒙的编译系统用的是 gn + ninja,它们会自动识别 CCache 环境变量。你不需要额外配置。

避坑指南: 我曾经因为 CCache 缓存目录满了,导致编译莫名其妙失败。建议你定期运行 ccache -c 清理缓存,或者设置 CCACHE_MAXSIZE 限制大小。

2.6 知识体系总览

为了让你更直观地理解整个环境搭建的流程,我画了一张图。你可以把它当作一个检查清单,每完成一项就打个勾。

编译环境搭建知识体系 Ubuntu 环境准备 依赖工具安装 Python 环境 Node.js 环境 build-essential / git / curl Python 3.8+ / pip / distutils Node 16 LTS / npm libssl-dev / m4 / flex / bison pyenv(可选) nvm 管理多版本 CCache 缓存配置 设置缓存大小 / 环境变量 / 定期清理 完成以上步骤后,即可开始拉取鸿蒙源码

2.7 验证环境

所有工具装完后,我建议你跑一个简单的验证脚本,确保每个环节都没问题。

# 验证 Python
python3 --version && pip3 --version

# 验证 Node
node --version && npm --version

# 验证 CCache
ccache --version && ccache -s

# 验证编译工具
gcc --version && make --version

如果所有命令都正常输出版本号,恭喜你,环境搭建完成。接下来就可以拉取鸿蒙源码,开始真正的编译之旅了。

最后提醒: 把上面这些配置命令保存成一个 shell 脚本,下次重装系统时直接跑一遍,省时省力。我自己的 setup_harmony_env.sh 脚本已经迭代了 5 个版本,每次踩坑就加一行注释。


专注资料整理