From 3acf6be119719a016f9eba4a7428750dfd241132 Mon Sep 17 00:00:00 2001 From: ych <2416006706@qq.com> Date: Mon, 8 Dec 2025 11:18:16 +0000 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9sharebuild-aosp14=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/compile/sharebuild-aosp14.md | 135 ++++++++++++++++++++++--------- 1 file changed, 96 insertions(+), 39 deletions(-) diff --git a/src/compile/sharebuild-aosp14.md b/src/compile/sharebuild-aosp14.md index 6dcb6a4..a8d4314 100644 --- a/src/compile/sharebuild-aosp14.md +++ b/src/compile/sharebuild-aosp14.md @@ -1,66 +1,123 @@ # 以AOSP14项目为例ShareBuild分布式编译详细配置方法 -## ShareBuild的适用场景 +## 编译环境准备 -在同一局域网内工作的小型团队,ShareBuild以P2P共享架构将空闲算力贡献给团队其他成员,从而为每个团队成员提供编译加速效果。 - -## ShareBuild QuickStart - -* 同一个局域网内的A、B、C等所有节点上安装ninja2: +### 安装 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 ``` -* 启用ShareBuild的前置要求 +* 确保所有节点上均安装配置好了项目的编译环境,即所有节点上均能采用ninja成功单机编译项目。 - 1. 所有节点上均安装配置好了项目的编译环境,即所有节点上均能采用ninja成功单机编译项目。 - +[19:20:05.430], pending/wanted: 4, ready: 1, running: 0 -* 选择任一节点上作为项目开发环境,开启ShareBuild模式,然后进行分布式编译。 +#### 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 ``` -这时使用ninja编译将自动进入ShareBuild模式分布式编译项目。 -> 如果直接使用ninja命令编译项目,也可以加上-s参数表示启用ShareBuild模式,示例如下: +* 在项目根目录下执行分布式编译 + +```bash +su # 切换到 root 关闭沙箱 +source build/envsetup.sh # 初始化环境 +lunch aosp_arm-eng # 选择目标配置 +make # 执行分布式编译,编译成功后可以看到: ``` -ninja -s -r `realpath ../` #启动分布式编译,注意-r 指定项目根目录 -ninja -t clean #清除编译产物 -```` - -* 对一些特殊项目的补充说明 - -除以上常规的ShareBuild配置外,对于一些特殊项目需要做一些额外的配置,补充说明如下: - -## 使用ShareBuild编译Android开源项目(AOSP) - -除按照以上方法准备好编译环境和开启ShareBuild模式外,以AOSP14项目为例,还需要替换ninja和准备.sharebuild.yml来过滤掉一些无法远程编译的命令,具体操作如下: - +* 客户端节点: ``` -cp /usr/bin/android_ninja prebuilts/build-tools/linux-x86/bin/ninja -cp /etc/ninja2/aosp14/.sharebuild.yml ./ +[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命令来分布式编译Android开源项目(AOSP)。 - +``` +make clean # 清除编译目标文件 +rm -r out # 清除编译产物 +``` ## 版权声明 Copyright @ Mengning Software