OpenHarmony 编译资源复用指南

发布时间:2026/6/6 2:39:58

OpenHarmony 编译资源复用指南 回答常见疑问编译每个产品时prebuilts_download.sh和ohos-sdk都要重新执行吗简短回答不需要。两者都是项目级/版本级的一次性准备工作不是产品级的。资源作用域需要重复执行吗prebuilts_download.sh整个 OpenHarmony 大版本不需要一次准备永久复用ohos-sdk编译同一 API 版本所有标准系统产品不需要一次编译所有标准系统产品复用1. prebuilts_download.sh1.1 它做了什么把openharmony_prebuilts/中的压缩包解压并部署到v6.1-release/prebuilts/v6.1-release/prebuilts/ ├── build-tools/ # GN、Ninja、Node.js ├── clang/ # clang-15 工具链 ├── cmake/ # CMake ├── python3/ # Python 解释器 ├── rustc/ # Rust 工具链 ├── gcc/ # 交叉编译工具链 └── tool/command-line-tools/ # hvigor、ohpm1.2 内部机制脚本会校验文件是否已存在 sha256 是否匹配匹配则跳过if[-dprebuilts/clang/ohos/linux-x86_64/clang-xxx];thenskipfi所以重复执行是安全的已下载的自动跳过。1.3 何时需要执行场景是否需要首次拉取代码需要大版本升级6.1 → 7.0需要删除了prebuilts/目录需要prebuilts_download.sh自身被更新manifest 变化需要编译新产品rk3568 → hispark_taurus不需要切换同版本内的不同分支不需要重新编译已编译过的产品不需要1.4 验证 prebuilts 是否就绪lsv6.1-release/prebuilts/clang/ohod/linux-x86_64/# 应有 clang-xxxlsv6.1-release/prebuilts/build-tools/linux-x86/bin/# 应有 gn、ninjalsv6.1-release/prebuilts/cmake/# 应有 linux-x86三个目录都存在且非空则直接编译产品即可。2. ohos-sdk 编译2.1 它是什么ohos-sdk是一个特殊的产品输出应用开发所需的工具集prebuilts/ohos-sdk/linux/23/ ├── native/ # C/C NDK ├── toolchains/ # hvigor 编译工具链 ├── ets/ # ArkTS 编译器和声明文件 ├── js/ # JavaScript SDK └── previewer/ # 预览器数字23是 API 版本号与 OpenHarmony 大版本对应6.1 API 23。2.2 谁需要 ohos-sdk只有包含 HAP 应用编译的标准系统产品才需要产品是否需要 SDK原因rk3568标准系统需要包含 systemui、settings、launcher 等 HAP 应用hispark_taurus标准系统需要同上ohos-sdk伪产品不需要它就是用来生成 SDK 的qemu_arm_virt小型系统不需要没有 HAP 应用qemu_arm64_linux_min最小系统不需要同上qemu_x86_64_linux_min最小系统不需要同上2.3 何时需要执行场景是否需要首次编译标准系统产品prebuilts/ohos-sdk/ 不存在需要API 版本升级API 23 → API 24需要修改了 SDK 相关代码interface/sdk-js 等需要删除了prebuilts/ohos-sdk/目录需要编译标准系统产品 A → 产品 B同 API 版本不需要编译小型/最小系统产品不需要2.4 验证 ohos-sdk 是否就绪lsv6.1-release/prebuilts/ohos-sdk/linux/23/# 应输出ets js native previewer toolchains五个目录都存在则直接复用无需重新编译。2.5 编译并部署 SDKcdv6.1-release# 1. 编译 SDK约 1.5 小时./build.sh --product-name ohos-sdk--ccache# 2. 部署到 prebuiltsmkdir-pprebuilts/ohos-sdk/linux/23unzipout/sdk/packages/ohos-sdk/linux/native-linux-x64-*.zip-dprebuilts/ohos-sdk/linux/23/unzipout/sdk/packages/ohos-sdk/linux/toolchains-linux-x64-*.zip-dprebuilts/ohos-sdk/linux/23/unzipout/sdk/packages/ohos-sdk/linux/ets-linux-x64-*.zip-dprebuilts/ohos-sdk/linux/23/unzipout/sdk/packages/ohos-sdk/linux/js-linux-x64-*.zip-dprebuilts/ohos-sdk/linux/23/unzipout/sdk/packages/ohos-sdk/linux/previewer-linux-x64-*.zip-dprebuilts/ohos-sdk/linux/23/3. 完整决策树首次接触 OpenHarmony 6.1 源码 ├── 是 → 1) 执行 prebuilts_download.sh │ 2) 编译并部署 ohos-sdk │ 3) 编译目标产品 │ └── 否 → 检查目标产品类型 ├── 标准系统rk3568、hispark_taurus │ ├── prebuilts/ohos-sdk/linux/23/ 完整 │ │ ├── 是 → 直接编译产品 │ │ └── 否 → 编译并部署 ohos-sdk → 编译产品 │ └── prebuilts/ 完整 │ ├── 是 → 继续 │ └── 否 → 重跑 prebuilts_download.sh │ └── 小型/最小系统qemu_* └── prebuilts/ 完整 ├── 是 → 直接编译产品不需要 ohos-sdk └── 否 → 重跑 prebuilts_download.sh4. 典型场景示例场景 A第一次拉代码要编译 rk3568cdv6.1-release# 步骤 1下载预编译工具链bashbuild/prebuilts_download.sh# 步骤 2编译 SDK./build.sh --product-name ohos-sdk--ccache# 步骤 3部署 SDKmkdir-pprebuilts/ohos-sdk/linux/23unzipout/sdk/packages/ohos-sdk/linux/*.zip-dprebuilts/ohos-sdk/linux/23/# 步骤 4编译产品./build.sh --product-name rk3568--ccache场景 B已编译过 rk3568现在要编译 hispark_tauruscdv6.1-release# prebuilts/ 和 ohos-sdk/ 都已就绪直接编译./build.sh --product-name hispark_taurus--ccache场景 C已编译过 rk3568现在要编译 qemu_arm_virt小型系统cdv6.1-release# prebuilts/ 已就绪小型系统不需要 ohos-sdk./build.sh --product-name qemu_arm_virt--ccache场景 D升级到 OpenHarmony 7.0cdv7.0-release# 大版本升级重新准备所有资源bashbuild/prebuilts_download.sh ./build.sh --product-name ohos-sdk--ccacheunzipout/sdk/packages/ohos-sdk/linux/*.zip-dprebuilts/ohos-sdk/linux/24/# API 版本可能变化./build.sh --product-nameproduct--ccache5. 资源层级关系全局共享一次准备 ├── /data/vendor_huawei/OpenHarmony/openharmony_prebuilts/ ← 大版本一次下载 └── /data/vendor_huawei/OpenHarmony/tool/ ← 系统级补丁 大版本共享一次准备 └── v6.1-release/prebuilts/ ├── build-tools/ ← prebuilts_download.sh 部署 ├── clang/ ← prebuilts_download.sh 部署 └── ohos-sdk/ ← 编译 ohos-sdk 产品后部署 API 版本共享一次编译 └── v6.1-release/prebuilts/ohos-sdk/linux/23/ ← 同 API 版本所有标准系统共用 产品独立每个产品独立 └── v6.1-release/out/product/ ← 各产品独立编译输出6. 一句话总结问题答案编译每个产品都要执行 prebuilts_download.sh 吗不需要整个 OpenHarmony 大版本只需执行一次编译每个产品都要重新编译 ohos-sdk 吗不需要同 API 版本下所有标准系统产品共用切换产品时需要做什么只改--product-name参数即可

相关新闻