OpenHarmony prebuilts 目录详解

概述

prebuilts/ 目录存放所有预编译的工具链和依赖 ,总计约 24GB。这些二进制文件不是从源码编译的,而是由 build/prebuilts_download.sh 脚本从远程仓库下载。它们为 OpenHarmony 构建系统提供编译器、链接器、运行时库、SDK 等基础设施。

核心思想:开发者不需要自己编译 Clang、Rust、Node.js 等工具------直接下载预编译版本,保证所有人使用一致的工具链版本。


目录总览

复制代码
prebuilts/                          总计 ~24GB
├── clang/          (8.2GB)  ← LLVM/Clang 交叉编译工具链(核心)
├── cangjie_sdk/    (5.3GB)  ← 仓颉语言 SDK
├── ohos-sdk/       (3.6GB)  ← OpenHarmony SDK(API 23)
├── ark_tools/      (1.7GB)  ← 方舟编译器预编译工具
├── gcc/            (1.4GB)  ← GCC 交叉编译器(内核编译用)
├── rustc/          (1.2GB)  ← Rust 编译器和标准库
├── build-tools/    (731MB)  ← GN、Ninja、Node.js 等构建工具
├── tool/           (629MB)  ← hvigor、ohpm、SDK 命令行工具
├── mingw-w64/      (459MB)  ← Windows 交叉编译工具链
├── cmake/          (347MB)  ← CMake 构建工具
├── python/         (174MB)  ← Python 3.11 解释器
├── taihe/          (131MB)  ← 泰和(Taihe)跨语言框架
├── python_llvm/    (94MB)   ← LLVM 构建专用 Python
├── develop_tools/  (32MB)   ← BPF 开发工具
└── packing_tool/   (5.6MB)  ← HAP 打包工具(Java)

1. clang/(8.2GB)--- LLVM/Clang 交叉编译工具链

用途:编译 OpenHarmony 用户空间所有 C/C++ 代码的主编译器。

复制代码
clang/ohos/
├── linux-x86_64/          ← 宿主机为 x86_64 Linux 时使用
│   ├── llvm/              ← 完整的 LLVM 工具链
│   │   ├── bin/           ← clang、clang++、lld、llvm-ar 等
│   │   ├── lib/
│   │   │   ├── arm-linux-ohos/        ← ARM32 标准库(libc++、libunwind)
│   │   │   ├── aarch64-linux-ohos/    ← ARM64 标准库
│   │   │   └── clang/15.0.4/lib/      ← compiler-rt 运行时
│   │   │       ├── arm-linux-ohos/    ← ARM32 runtime(builtins、sanitizers)
│   │   │       └── aarch64-linux-ohos/
│   │   └── include/       ← Clang/LLVM 头文件
│   ├── llvm_ndk/          ← NDK 版本的 LLVM(供应用开发者使用)
│   └── libcxx-ndk/        ← NDK 版本的 libc++
├── ohos-arm64/            ← 宿主机为 ARM64 Linux 时使用(如 M1 Mac 上的 Linux VM)
│   ├── llvm/
│   └── libcxx-ndk/
└── windows-x86_64/        ← 宿主机为 Windows 时使用
    └── llvm/

关键版本信息

项目 版本
Clang 15.0.4(OHOS 定制版)
LLD 15.0.4
compiler-rt 15.0.4
libc++ 与 Clang 同版本

为什么有三个宿主平台

  • linux-x86_64:绝大多数开发者使用(Ubuntu x86_64)
  • ohos-arm64:ARM64 Linux 宿主机(如 ARM 服务器或 M 系列 Mac 上的 Linux VM)
  • windows-x86_64:Windows 开发环境

编译器本身运行在宿主机上,但产出的二进制是目标设备架构(ARM/ARM64/x86_64/RISC-V)。


2. cangjie_sdk/(5.3GB)--- 仓颉语言 SDK

用途:仓颉(Cangjie)是华为自研的编程语言,面向 OpenHarmony 应用开发,定位类似 Kotlin 之于 Android。

复制代码
cangjie_sdk/
├── linux-x64/             ← Linux 宿主机版本
│   └── cangjie/           ← 仓颉编译器、标准库、工具链
├── linux-x64-hwasan/      ← 带 HWASan 的调试版本
├── windows-x64/           ← Windows 版本
└── build-tools/           ← 仓颉构建辅助工具

说明

  • 仓颉是 OpenHarmony 6.x 新增的第一方语言支持
  • 与 ArkTS 并列为应用开发语言选项
  • SDK 包含编译器前端、标准库、包管理工具

3. ohos-sdk/(3.6GB)--- OpenHarmony SDK

用途:为 HAP 应用编译提供 API 定义、工具链和预览器。hvigor 构建 ArkTS/JS 应用时依赖此 SDK。

复制代码
ohos-sdk/linux/23/         ← API 版本 23
├── ets/                   ← ArkTS/ETS 编译工具和声明文件
├── js/                    ← JS 编译工具
├── native/                ← C/C++ NDK(头文件、库)
├── toolchains/            ← 签名工具、hdc 等
└── previewer/             ← UI 预览器(DevEco Studio 用)

说明

  • 数字 23 是 API 版本号(对应 SDK 6.1.0.31)
  • HAP 应用编译(hvigor)会检查此目录是否存在
  • 如果缺失,需要先编译 ohos-sdk 再部署到此处(见编译指南第 4.2 节)

4. ark_tools/(1.7GB)--- 方舟编译器预编译工具

用途:方舟(Ark)编译器的预编译二进制,用于 ArkTS/JS 的 AOT(Ahead-Of-Time)编译和字节码生成。

复制代码
ark_tools/
├── ark_js_prebuilts/      ← 方舟 JS 运行时预编译产物
│   ├── llvm_prebuilts/         ← x86_64 Linux 版 LLVM(AOT 后端)
│   ├── llvm_prebuilts_aarch64/ ← ARM64 版 LLVM
│   └── llvm_prebuilts_windows/ ← Windows 版 LLVM
└── llvm_aot/              ← AOT 编译器各平台版本
    ├── aot_aarch64_debug/
    ├── aot_aarch64_release/
    ├── aot_x86_debug/
    ├── aot_x86_release/
    ├── aot_ohos_release/
    └── aot_gn_ohos/

说明

  • 方舟编译器将 ArkTS/JS 代码编译为机器码(AOT),提升运行性能
  • 这里的 LLVM 是方舟编译器自己的后端,与 clang/ 中的 LLVM 是独立的
  • aot_ohos_release 是在设备上运行的 AOT 编译器

5. gcc/(1.4GB)--- GCC 交叉编译器

用途仅用于编译 Linux 内核。用户空间代码全部使用 Clang。

复制代码
gcc/linux-x86/
├── arm/
│   └── gcc-linaro-7.5.0-arm-linux-gnueabi/    ← ARM32 GCC 7.5
└── aarch64/
    └── gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/  ← ARM64 GCC 7.5

为什么内核用 GCC 而不是 Clang

  • Linux 内核对编译器有严格的版本和行为要求
  • 部分内核代码使用 GCC 特有扩展(__attribute__((naked))、内联汇编语法差异)
  • Linaro GCC 7.5 是经过长期验证的稳定版本
  • 未来版本可能迁移到 Clang 编译内核(上游 Linux 已支持)

版本信息

项目 版本
GCC Linaro 7.5.0
ARM32 target arm-linux-gnueabi
ARM64 target aarch64-linux-gnu

6. rustc/(1.2GB)--- Rust 编译器

用途:编译 OpenHarmony 中的 Rust 代码(部分系统组件使用 Rust 编写)。

复制代码
rustc/
├── linux-x86_64/current/       ← Rust 编译器(rustc + cargo)
├── rust-nightly-x86_64-unknown-linux-gnu/  ← nightly 工具链
├── rust-std-nightly-armv7-unknown-linux-ohos/   ← ARM32 标准库
├── rust-std-nightly-aarch64-unknown-linux-ohos/ ← ARM64 标准库
├── rust-std-nightly-x86_64-unknown-linux-ohos/  ← x86_64 标准库
└── rust-std-nightly-x86_64-pc-windows-gnullvm/  ← Windows 标准库

说明

  • 使用 nightly 版本(OpenHarmony 依赖部分 unstable 特性)
  • rust-std-*-ohos 是为 OpenHarmony 目标编译的标准库
  • Rust 代码最终通过 Clang/LLD 链接,复用同一套 musl sysroot
  • 目标三元组使用 *-unknown-linux-ohos(自定义 OS 标识)

7. build-tools/(731MB)--- 构建基础工具

用途:GN、Ninja、Node.js 等构建系统直接依赖的工具。

复制代码
build-tools/
├── linux-x86/             ← Linux 宿主机构建工具
│   └── bin/
│       ├── gn             ← GN 元构建系统(版本 2023 d823fd85)
│       └── ninja          ← Ninja 构建执行器(版本 1.12.0)
├── common/                ← 跨平台共用工具
│   ├── nodejs/            ← Node.js 运行时(多版本共存)
│   │   ├── node-v14.21.1-linux-x64/  ← 旧版兼容
│   │   ├── node-v16.20.2-linux-x64/
│   │   ├── node-v18.20.1-linux-x64/  ← 主要使用版本
│   │   └── current → node-v14.21.1   ← 默认指向(构建脚本引用)
│   ├── js-framework/      ← JS 框架依赖(node_modules)
│   └── ts2abc/            ← TypeScript → 方舟字节码转换工具依赖
├── ohos/                  ← OHOS 设备端构建工具
│   └── bin/
└── windows-x86/           ← Windows 版 GN/Ninja

版本信息

工具 版本 说明
GN 2023 (d823fd85) 生成 build.ninja 文件
Ninja 1.12.0 执行实际编译
Node.js 14.21.1 / 16.20.2 / 18.20.1 JS/TS 编译和 hvigor 运行时

为什么有多个 Node.js 版本

  • v14:部分旧脚本和 npm 包依赖
  • v18:hvigor 和新版工具推荐版本
  • current 软链接指向 v14(历史兼容)

8. tool/(629MB)--- SDK 命令行工具和 hvigor

用途:HAP 应用构建工具链(hvigor)、包管理器(ohpm)、SDK 管理工具。

复制代码
tool/command-line-tools/
├── hvigor/                ← HAP 应用构建工具(类似 Gradle)
├── ohpm/                  ← OpenHarmony 包管理器(类似 npm)
├── sdk/                   ← SDK 管理工具
├── bin/                   ← 命令行入口脚本
├── 6.x/                   ← 6.x 版本工具
└── tool/                  ← 辅助工具

说明

  • hvigor:OpenHarmony 的应用构建系统,基于 Node.js,功能类似 Android 的 Gradle
  • ohpm:OpenHarmony Package Manager,管理三方库依赖(类似 npm)
  • 编译 HAP 应用时,hvigor 会调用 ohos-sdk 中的编译器和签名工具

9. mingw-w64/(459MB)--- Windows 交叉编译工具链

用途:在 Linux 宿主机上编译 Windows 可执行文件(如 hdc.exe、previewer.exe)。

复制代码
mingw-w64/ohos/linux-x86_64/
└── clang-mingw/           ← 基于 Clang 的 MinGW 工具链
    ├── bin/               ← x86_64-w64-mingw32-clang 等
    └── lib/               ← Windows 运行时库

说明

  • 用于编译 SDK 中需要在 Windows 上运行的工具
  • 不是传统的 GCC MinGW,而是基于 Clang 的 MinGW 变体
  • 编译 ohos-sdk 时会用到(生成 Windows 版 toolchains)

10. cmake/(347MB)--- CMake 构建工具

用途:部分第三方库(如 OpenSSL、protobuf)使用 CMake 构建,需要此工具。

复制代码
cmake/
├── linux-x86/             ← Linux 版 CMake
├── ohos/                  ← OHOS 平台 CMake 配置
└── windows-x86/           ← Windows 版 CMake

说明

  • OpenHarmony 主构建系统是 GN,但 third_party/ 下部分库原生使用 CMake
  • GN 通过 action() 调用 CMake 编译这些第三方库
  • 提供预编译版本避免依赖系统安装的 CMake 版本

11. python/(174MB)--- Python 解释器

用途 :构建脚本运行时。build.shhb、各种代码生成脚本都依赖 Python。

复制代码
python/linux-x86/
├── 3.11.4/                ← Python 3.11.4 完整安装
└── current → 3.11.4       ← 软链接

说明

  • 版本:Python 3.11.4
  • 构建系统的 hb 工具、代码生成器、测试框架都用 Python
  • 使用预编译版本确保所有开发者环境一致,避免系统 Python 版本差异

12. taihe/(131MB)--- 泰和跨语言框架

用途:泰和(Taihe)是 OpenHarmony 的跨语言互操作框架,支持 C/C++、ArkTS、仓颉之间的无缝调用。

复制代码
taihe/
├── ohos/linux-x86_64/     ← Linux 版工具
└── ohos/windows-x86_64/   ← Windows 版工具

说明

  • OpenHarmony 6.x 新增组件
  • 生成跨语言绑定代码(类似 SWIG 或 pybind11 的角色)
  • 使不同语言编写的模块可以互相调用

13. python_llvm/(94MB)--- LLVM 构建专用 Python

用途:LLVM 工具链自身构建时使用的 Python 环境(与主 Python 隔离)。

复制代码
python_llvm/
├── linux-x86/             ← Linux 版
├── linux-arm64/           ← ARM64 版
└── windows-x86/           ← Windows 版

说明

  • python/ 目录的区别:这是 LLVM 编译流程专用的,版本和依赖可能不同
  • 隔离避免 LLVM 构建脚本与 OpenHarmony 构建脚本的 Python 依赖冲突

14. develop_tools/(32MB)--- BPF 开发工具

用途:Linux 内核 BPF(Berkeley Packet Filter)相关的开发调试工具。

复制代码
develop_tools/
├── bpftool/               ← BPF 程序管理工具
└── pahole/                ← DWARF 调试信息分析工具(BTF 生成)

说明

  • bpftool:加载、查看、调试 BPF 程序
  • pahole:分析结构体布局,生成 BTF(BPF Type Format)信息
  • 内核编译时需要 pahole 生成 BTF,供 BPF 程序使用

15. packing_tool/(5.6MB)--- HAP 打包工具

用途 :将编译产物打包为 .hap 应用包的 Java 工具。

复制代码
packing_tool/
├── compress/              ← 压缩工具
├── fastjson/              ← JSON 解析库
├── fastjson2/
├── fastjson2ext/
├── fastjson2mid/
└── io/                    ← IO 工具库

说明

  • 基于 Java 实现的打包工具
  • 将 resources、代码、配置文件打包为 HAP 格式
  • 体积最小的预编译组件(仅 5.6MB)

16. .mark 文件的含义

每个目录下都有 .mark 文件,如:

复制代码
804c5820b5f2c68c14834adf96a66ec23087b247f90d74ac7e44d79355d563c1.llvm.mark

这些是 prebuilts_download.sh 脚本的版本标记文件

  • 文件名中的哈希值是对应压缩包的 SHA-256
  • 脚本通过检查 .mark 文件是否存在来判断是否需要重新下载
  • 如果删除 .mark 文件,下次运行 prebuilts_download.sh 会重新下载对应组件

17. 各工具链的使用场景总结

编译对象 使用的工具链 路径
用户空间 C/C++ Clang 15.0.4 clang/ohos/linux-x86_64/llvm/
Linux 内核 GCC Linaro 7.5 gcc/linux-x86/arm/
Rust 组件 rustc nightly rustc/linux-x86_64/current/
ArkTS/JS 应用 hvigor + Node.js build-tools/common/nodejs/ + tool/
仓颉应用 Cangjie SDK cangjie_sdk/linux-x64/
Windows 工具 Clang-MinGW mingw-w64/ohos/linux-x86_64/
第三方 CMake 库 CMake cmake/linux-x86/
AOT 编译 方舟 LLVM ark_tools/llvm_aot/

18. 如何更新 prebuilts

bash 复制代码
cd v6.1-release

# 全量下载/更新所有预编译工具
bash build/prebuilts_download.sh

# 该脚本会:
# 1. 读取 build/prebuilts_config.json 中的下载清单
# 2. 对比本地 .mark 文件与远程哈希
# 3. 仅下载有变更的组件
# 4. 解压到对应目录并写入新的 .mark 文件

首次下载约 10GB,后续增量更新通常很快。

相关推荐
Pocker_Spades_A1 小时前
[鸿蒙PC命令行移植适配]移植rust三方库erdtree到鸿蒙PC的完整实践
华为·rust·harmonyos
禁默1 小时前
[鸿蒙PC命令行移植适配]移植rust三方库starship到鸿蒙PC的完整实践
华为·rust·harmonyos
轻口味1 小时前
小芽英语鸿蒙开发实战 系列1:全栈架构设计与鸿蒙 Navigation 路由深层博弈
华为·harmonyos·鸿蒙
坚果派·白晓明1 小时前
鸿蒙PC三方库使用:使用 AtomCode + Skills 自动完成鸿蒙化三方库11Zip集成
c语言·c++·华为·harmonyos
互联网散修1 小时前
鸿蒙实战:图片编辑器——添加文字的UI适配与键盘避让
ui·编辑器·harmonyos
小菜鸟学开发2 小时前
OpenHarmony 编译加速:ccache 使用指南
harmonyos
●VON2 小时前
AtomGit Flutter鸿蒙客户端:OAuth2认证与登录
flutter·华为·跨平台·harmonyos·鸿蒙
小菜鸟学开发2 小时前
OpenHarmony 编译资源复用指南
harmonyos
互联网散修2 小时前
鸿蒙实战:图片编辑器——涂鸦、撤回与保存功能
编辑器·harmonyos·涂鸦·图片编辑