# 以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 # 执行单机编译 ``` 编译成功后可以看到: ``` [ 99% 130084/130093] out/host/linux-x86/bin/resourceshrinker --output out/soong/.intermediates/frameworks/base/packages/SystemUI/SystemUI Shrunken apk stored in: out/soong/.intermediates/frameworks/base/packages/SystemUI/SystemUI/android_common/SystemUI-unsigned.apk.proto.out.apk [100% 130093/130093] Target vbmeta image: out/target/product/generic/vbmeta.img #### build completed successfully (02:20:12 (hh:mm:ss)) #### ``` ### 配置AOSP项目开启ShareBuild模式 * 到 AOSP 项目根目录下执行 setup_sharebuild_forAOSP14.sh 配置ShareBuild分布式编译 ``` cd android-14.0.0_r2 /etc/ninja2/aosp14/setup_sharebuild_forAOSP14.sh ``` * 在项目根目录下执行分布式编译 ```bash 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 ``` * 服务端节点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 梦宁软件(江苏)有限公司 版权所有