OpenHarmony 编译资源复用指南

回答常见疑问:编译每个产品时,prebuilts_download.shohos-sdk 都要重新执行吗?

简短回答

不需要 。两者都是项目级/版本级的一次性准备工作,不是产品级的。

资源 作用域 需要重复执行吗
prebuilts_download.sh 整个 OpenHarmony 大版本 不需要,一次准备永久复用
ohos-sdk 编译 同一 API 版本所有标准系统产品 不需要,一次编译所有标准系统产品复用

1. prebuilts_download.sh

1.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、ohpm

1.2 内部机制

脚本会校验文件是否已存在 + sha256 是否匹配,匹配则跳过:

bash 复制代码
if [ -d "prebuilts/clang/ohos/linux-x86_64/clang-xxx" ]; then
    skip
fi

所以重复执行是安全的,已下载的自动跳过。

1.3 何时需要执行

场景 是否需要
首次拉取代码 需要
大版本升级(6.1 → 7.0) 需要
删除了 prebuilts/ 目录 需要
prebuilts_download.sh 自身被更新(manifest 变化) 需要
编译新产品(rk3568 → hispark_taurus) 不需要
切换同版本内的不同分支 不需要
重新编译已编译过的产品 不需要

1.4 验证 prebuilts 是否就绪

bash 复制代码
ls v6.1-release/prebuilts/clang/ohod/linux-x86_64/        # 应有 clang-xxx
ls v6.1-release/prebuilts/build-tools/linux-x86/bin/   # 应有 gn、ninja
ls v6.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 是否就绪

bash 复制代码
ls v6.1-release/prebuilts/ohos-sdk/linux/23/
# 应输出:ets  js  native  previewer  toolchains

五个目录都存在则直接复用,无需重新编译。

2.5 编译并部署 SDK

bash 复制代码
cd v6.1-release

# 1. 编译 SDK(约 1.5 小时)
./build.sh --product-name ohos-sdk --ccache

# 2. 部署到 prebuilts
mkdir -p prebuilts/ohos-sdk/linux/23
unzip out/sdk/packages/ohos-sdk/linux/native-linux-x64-*.zip      -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/toolchains-linux-x64-*.zip  -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/ets-linux-x64-*.zip         -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/js-linux-x64-*.zip          -d prebuilts/ohos-sdk/linux/23/
unzip out/sdk/packages/ohos-sdk/linux/previewer-linux-x64-*.zip   -d prebuilts/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.sh

4. 典型场景示例

场景 A:第一次拉代码,要编译 rk3568

bash 复制代码
cd v6.1-release

# 步骤 1:下载预编译工具链
bash build/prebuilts_download.sh

# 步骤 2:编译 SDK
./build.sh --product-name ohos-sdk --ccache

# 步骤 3:部署 SDK
mkdir -p prebuilts/ohos-sdk/linux/23
unzip out/sdk/packages/ohos-sdk/linux/*.zip -d prebuilts/ohos-sdk/linux/23/

# 步骤 4:编译产品
./build.sh --product-name rk3568 --ccache

场景 B:已编译过 rk3568,现在要编译 hispark_taurus

bash 复制代码
cd v6.1-release

# prebuilts/ 和 ohos-sdk/ 都已就绪,直接编译
./build.sh --product-name hispark_taurus --ccache

场景 C:已编译过 rk3568,现在要编译 qemu_arm_virt(小型系统)

bash 复制代码
cd v6.1-release

# prebuilts/ 已就绪,小型系统不需要 ohos-sdk
./build.sh --product-name qemu_arm_virt --ccache

场景 D:升级到 OpenHarmony 7.0

bash 复制代码
cd v7.0-release

# 大版本升级,重新准备所有资源
bash build/prebuilts_download.sh
./build.sh --product-name ohos-sdk --ccache
unzip out/sdk/packages/ohos-sdk/linux/*.zip -d prebuilts/ohos-sdk/linux/24/  # API 版本可能变化
./build.sh --product-name <product> --ccache

5. 资源层级关系

复制代码
全局共享(一次准备)
├── /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 参数即可
相关推荐
花椒技术2 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
一维Ace2 天前
HarmonyOS ArkTS 按钮组件全解:Button、Toggle 状态交互实战
harmonyos
anyup3 天前
来简单聊聊鸿蒙开发,万元奖金的事~
前端·华为·harmonyos
Georgewu3 天前
【无测试机别害怕】华为云鸿蒙云手机南:从零到联调全流程详解
harmonyos
Georgewu4 天前
【HarmonyOS 7】DevEco Code安装与使用
harmonyos
Georgewu4 天前
【HarmonyOS 7】鸿蒙应用开发如何屏蔽剪切板
harmonyos
谷子在生长5 天前
纯血鸿蒙自定义弹窗最佳实践:从「到处复制」到「一行调用」
前端·harmonyos
小魔女千千鱼5 天前
把 Go 塞进鸿蒙PC:windows上用 c-shared 跑 2048
harmonyos
TrisighT5 天前
Electron 跑在鸿蒙 PC 上,单窗口和多窗口内存差 800MB?我抓了 5 组数据
性能优化·electron·harmonyos