Skip to content

以AOSP14项目为例ShareBuild分布式编译详细配置方法

编译环境准备

安装 Sharebuild

  • 参与编译的同一个局域网内的A、B、C等所有节点上安装ninja2和sharebuild:
wget -c https://raw.githubusercontent.com/ninja-cloudbuild/ninja2/refs/heads/main/install.sh && chmod +x install.sh && sudo ./install.sh
  • 确保所有节点上均安装配置好了项目的编译环境,即所有节点上均能采用ninja成功单机编译项目。

安装AOSP项目编译环境

  • 参与编译的同一个局域网内的A、B、C等所有节点上安装编译环境依赖:
bash
# 安装核心开发工具和库
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

# 安装Android 14所需的Java环境
sudo apt-get install openjdk-17-jdk

# 确保Python 3环境正确安装
sudo apt-get install python3 python3-pip

下载 AOSP 源码并执行单机编译

  • 选择任一节点作为客户端节点,下载AOSP14源码:
bash
mkdir ~/bin && curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo && chmod a+x ~/bin/repo 
export PATH=~/bin:$PATH

repo init --depth=1 --partial-clone -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r2
repo sync -j16

cd android-14.0.0_r2
source build/envsetup.sh  # 初始化环境
lunch aosp_arm-eng        # 选择目标配置
make                      # 执行单机编译,编译成功后可以看到:
[19:20:05.430], pending/wanted: 4, ready: 1, running: 0


#### build completed successfully (02:26:51 (hh:mm:ss)) ####


real	146m51.385s
user	1327m35.812s
sys	78m2.153s
root@lab1:/home/lab1/android-14.0.0_r2#

配置AOSP项目开启ShareBuild模式

  • 将.sharebuild.yml 复制到 AOSP 根目录
cd android-14.0.0_r2
cp /etc/ninja2/aosp14/.sharebuild.yml ./
  • 进入AOSP14项目根目录,替换 AOSP 内部 ninja 为 android_ninja
cp /usr/bin/android_ninja prebuilts/build-tools/linux-x86/bin/ninja
  • 开启ShareBuild模式,然后进行分布式编译。 项目根目录下创建ninja2.conf 文件如下即可开启ShareBuild模式:
sharebuid:true
  • 在项目根目录下执行分布式编译
bash
su  # 切换到 root 关闭沙箱
source build/envsetup.sh  # 初始化环境
lunch aosp_arm-eng        # 选择目标配置
make                      # 执行分布式编译,编译成功后可以看到:
  • 客户端节点:
[ShareBuild] Command will be executed REMOTELY
[ShareBuild] ----------------------------------------
[100% 130093/130093] Target vbmeta image: out/target/product/generic/vbmeta.img
stdout: , stderr: 

[16:34:34.063], pending/wanted: 5, ready: 2, running: 0


#### build completed successfully (01:42:17 (hh:mm:ss)) ####


real	102m16.362s
user	1074m56.673s
sys	64m22.863s
root@lab1:/home/lab1/android-14.0.0_r2#
  • 服务端节点sharebuild部分日志:
{"severity":"INFO","timestamp":"2025-11-24T16:34:38.988708686+08:00","caller":"service/sharebuild_proxy.go:448","message":"Successfully cl
eared environment on executor","component":"proxy","executor":"id:\"12D3KoowBsw2Lrs7FwKkmgrmRt3MYQgNzLa82vjK8tve8gQ95KTk\"ip:\"192.168.1.
12\" port:39077 "}
{"severity":"INFO","timestamp":"2025-11-24T16:34:38.99059505+08:00","caller":"runner/project_runner.go:463","message":"ProjectRunner free.
.. ","component":"runner", "ReceivedtaskCount":0,"PreemptedTaskCount":33291}
[worker-17]Stopping worker
[worker-24]Stopping worker
make clean                # 清除编译目标文件
rm -r out                 # 清除编译产物

版权声明

Copyright @ Mengning Software

梦宁软件(江苏)有限公司 版权所有