HarmonyOS SDK for OpenHarmony 实战指南:让 OpenHarmony 用上 HarmonyOS 的八个 Kit
HarmonyOS SDK for OpenHarmony 实战指南:让 OpenHarmony 用上 HarmonyOS 的八个 Kit
适用读者:① 想在 OpenHarmony 应用里调 Preview Kit(文件预览)、Share Kit(分享)、Scan Kit(扫码)、Push Kit(推送)、Core Speech/Vision Kit(语音/视觉 AI)、Remote Communication Kit(HTTP)、Desktop Extension Kit(状态栏/快捷栏)的应用开发者;② 需要把这些 Kit 的系统侧实现编进自己产品镜像的设备开发者。
一、它是什么,和普通 HarmonyOS SDK 有什么区别
HarmonyOS SDK for OpenHarmony 是华为 2026 年 8 月首次发布的开源 Kit 合集,托管在 GitCode 组织 harmonyos-sdk-for-openharmony 下。一句话定位:
HarmonyOS SDK 的开源实现,接口定义与 HarmonyOS 保持一致,用来扩展 OpenHarmony SDK 的能力。
它分两个视角,这也是本文的两条主线:
| 视角 | 你拿到的东西 | 形态 |
|---|---|---|
| 应用开发 | 8 类 API 接口(SDK 包) | 一个 526KB 的 harmonyos_sdk_for_openharmony.har |
| 设备开发 | 8 类 API 的系统侧实现(Framework) | 一堆源码仓,编进 OH 6.1 LTS 镜像 |
为什么需要它?因为 @ohos.file.preview、@kit.ShareKit 这类接口不在开源 OpenHarmony SDK 里(笔者在 DevEco Studio 6.1 内置 SDK 中逐一确认过)。以前想在 OH 设备上用这些能力只有两条歪路:自己逆向闭源 hap,或者从 HarmonyOS NEXT 设备提取(会被签名校验拒绝)。现在华为把接口定义和参考实现都开源了。
网上流传的旧方案(如 CSDN 上的《OpenHarmony 替换 Full SDK 全攻略》系列)解决的是另一个问题——把 OH 公版 SDK 换成带系统 API 的 full-SDK;而本文的方案不动 SDK 本体,只往工程里挂一个 HAR、往编译器插件里加一行路径,干净且可逆。
二、应用开发者:三步接入
2.1 下载 HAR 包
从 release-assets 仓库的 Release 附件下载(当前 6.1.0 Release):
https://gitcode.com/harmonyos-sdk-for-openharmony/release-assets/releases/download/HarmonyOS_SDK_for_OpenHarmony_6.1.0_Release/harmonyos_sdk_for_openharmony.har
(配套 DevEco Studio 6.1.0 Release,OpenHarmony 6.1 LTS / API 23)
2.2 把 HAR 挂进工程
- 在项目根目录新建
lib/目录,把 har 放进去; - 修改根目录
oh-package.json5:
"dependencies": {
"harmonyos_sdk_for_openharmony": "file:lib/harmonyos_sdk_for_openharmony.har"
},
- 点 Sync Now。看到
oh_modules/harmonyos_sdk_for_openharmony出现即导入成功。
2.3 让编译器认识这些 API(关键一步)
HAR 里的 d.ts 不会被自动纳入 ArkTS 编译的 API 搜索路径,需要给 DevEco 的 hvigor 插件加一行配置。
文件位置:DevEco Studio\tools\hvigor\hvigor-ohos-plugin\src\tasks\abstract\abstract-compile-node.js
在 getExternalApiPaths() 方法里 push 你的 ets 路径:
getExternalApiPaths() {
this.externalApiPaths.push("E:/YourProject/oh_modules/harmonyos_sdk_for_openharmony/ets"); // 换成你的实际路径
return this.compileApiVersion > sdk_const_js_1.ApiVersion.API_VERSION_9 && this.targetData.isHarmonyOS() && this.sdkInfo.getHmsArkDir() && this.externalApiPaths.push(this.sdkInfo.getHmsArkDir()),
this.externalApiPaths
}
注意事项(官方文档特别强调):
- 路径用左斜杠
/; - 只加
this.externalApiPaths.push(...)这一行,不要把整个方法抄进去; - 如果
oh_modules/.ohpm/下出现harmonyos_sdk_for_openharmony@pctqlw9...这样的长哈希目录名,属正常现象(版本哈希标识),路径直接照抄即可; - 改完 File → Invalidate Caches 重启 DevEco,然后 BUILD → Clean Project → Rebuild Project。
如果工程里有 Native C++ 代码,还要在 entry/src/main/cpp/CMakeLists.txt 里把 SDK 的工具链文件指给 PACKAGE_FIND_FILE:
# 在 include(${PACKAGE_FIND_FILE}) 之前
set(PACKAGE_FIND_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../../../oh_modules/harmonyos_sdk_for_openharmony/native/build/cmake/ohos.toolchain.cmake)
2.4 代码调用(以 Preview Kit 为例)
import { filePreview } from '@kit.PreviewKit';
// 两个核心 API(@since 11)
filePreview.canPreview(context, uri).then((supported: boolean) => { /* ... */ });
filePreview.openPreview(context, previewInfo, displayInfo?).then(() => { /* ... */ });
官方样例仓:preview-kit_sample-code(每个 Kit 都有对应的 xxx_sample-code 仓)。
2.5 应用侧的两个坑
- 设备镜像必须已包含 Kit 的系统侧实现。
filePreview.openPreview()这类 API 只是壳,真正干活的是系统里预置的服务和应用——Preview Kit 对应的就是预置应用com.ohos.preview_system_app(开源仓 filemanagement_preview_app)。镜像里没有它,API 调用必然失败。开发板可以直接刷官方提供的 P7885 标准系统 ROM 包(已集成全部 Kit,见 release-notes);自制镜像走第三章。可以用官方 HCTS 包做兼容性测试。 - IDE 飘红"缺少 syscap 能力"不影响编译和功能(官方 FAQ 原话),忽略即可。
三、设备开发者:把 Kit 编进自己的镜像
以 Preview Kit + Wukong100(RK 方案参考板)为例,完整走一遍。前置条件:Ubuntu 22.04 环境,已按OpenHarmony 设备开发指导拉取 OH 6.1 LTS 源码并成功编出镜像。
3.1 用 repo manifests 拉取 Kit 源码
在 .repo/manifests/ohos/ 下创建 extension_kits.xml:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="https://gitcode.com/harmonyos-sdk-for-openharmony" name="harmonyos-sdk-for-openharmony"/>
<!-- Preview Kit:框架仓 + openFileBoost 仓 -->
<project groups="default,ohos:standard,ohos:system" name="filemanagement_preview"
path="foundation/filemanagement/file_preview" remote="harmonyos-sdk-for-openharmony" revision="master"/>
<project groups="default,ohos:standard,ohos:system" name="filemanagement_open_file_boost"
path="foundation/filemanagement/open_file_boost" remote="harmonyos-sdk-for-openharmony" revision="master"/>
</manifest>
在 .repo/manifests/default.xml 中引入:
<include name="ohos/extension_kits.xml"/>
然后同步:
repo sync -c
各 Kit 的仓配置(依赖关系)官方文档已列全。几个要点:
- PDF Kit 依赖最重:要拉
filemanagement_pdf_service+third_party/pdfium+ pdfium 的 9 个三方子仓(freetype/zlib/libpng/libopenjpeg/libjpeg_turbo/lcms/icu/agg23/abseil-cpp),并把这一串 GN 目标加入build/compile_standard_whitelist.json的third_deps_bundle_not_add白名单; - Core Vision Kit 和 Scan Kit 都依赖 opencv,同时集成只需配置一次;
- Remote Communication Kit 依赖带补丁的 curl,需要屏蔽底座 ohos.xml 里原有的 third_party_curl 避免冲突。
3.2 集成配置四步(Preview Kit)
① 产品配置 —— vendor/<厂商>/<产品>/config.json,在 subsystems 里加组件:
"subsystems": [
{
"subsystem": "filemanagement",
"components": [
{ "component": "hipreview", "features": [] },
{ "component": "open_file_boost", "features": [] }
]
}
]
(component 名必须与仓内 bundle.json 的 name 一致)
② 子系统配置 —— build/subsystem_config.json(已有 filemanagement 则跳过):
"filemanagement": {
"path": "foundation/filemanagement",
"name": "filemanagement"
},
③ 系统能力(syscap)配置 —— developtools/syscap_codec/include/codec_config/syscap_define.h,两处各加两条:
SystemCapabilityNum {
// ...
FILEMANAGEMENT_FILEPREVIEW_CORE,
PCSERVICE_OPENFILEBOOST,
}
SyscapWithNum{
// ...
{"SystemCapability.FileManagement.FilePreview.Core", FILEMANAGEMENT_FILEPREVIEW_CORE},
{"SystemCapability.PCService.OpenFileBoost", PCSERVICE_OPENFILEBOOST},
}
④ 系统应用配置 —— Preview Kit 的用户可见载体是预置应用 PreviewSystemApp,流程:
- 单独用 DevEco 编译 filemanagement_preview_app 仓(签名材料在仓内
signature/目录,产物命名PreviewSystemApp.hap)。因为用了系统 API,DevEco 的 OpenHarmony SDK 要先换成 ohos-sdk-full 6.1-LTS,并按第二章配好 harmonyos_sdk_for_openharmony(它 import 了@kit.ShareKit); - 把 hap 放进
applications/standard/hap/,在BUILD.gn挂上:
ohos_prebuilt_etc("preview_hap") {
source = "PreviewSystemApp.hap"
module_install_dir = "app/com.ohos.preview_system_app"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}
group("hap") {
deps = [
"//applications/standard/hap:preview_hap",
]
}
- 产品
preinstall-config/下两个文件:
// install_list.json —— 预安装
{ "app_dir": "/system/app/com.ohos.preview_system_app", "removable": true }
// install_list_capability.json —— 特权(系统应用校验、隐藏图标、关联唤醒)
{
"bundleName": "com.ohos.preview_system_app",
"app_signature": ["8E93863FC32EE238060BF69A9B37E2608FFFB21F93C862DD511CBAC9F30024B5"],
"allowAppUsePrivilegeExtension": true,
"allowAppDesktopIconHide": true,
"associatedWakeUp": true
}
⚠️ 签名指纹必须和你实际签名 hap 的证书一致。官方两处文档给的 app_signature 就不一样(集成文档
8E93863F...、仓 README9EC7BA34...,对应不同签名证书),照抄大概率翻车——预览器内部有 checkIsSysApp 校验,指纹不匹配时特权不生效、系统应用调用方会被拒。用hdc shell bm dump -n com.ohos.preview_system_app可查已装应用的 appSignatures 做核对。
3.3 编译与烧录
# 下载预编译工具链
./build/prebuilts_download.sh
# 编译镜像(以 wukong100 为例)
./build.sh --product-name wukong100 --ccache --gn-args make_pac_format_image=true
产物在 out/wukong100/packages/phone/images,按开发板烧录指南刷机。已有设备不想重编的话,直接刷官方 P7885 ROM 包(集成 HMOS SDK for OH 的 OH 6.1.0.35 二进制)也行。
四、能力边界:以 Preview Kit 为例的避坑提示
接入只是开始,实际能力取决于系统侧实现版本。笔者逆向分析过 RT80 设备上的 PreviewSystemApp(v1.0.0)并与开源 master 版逐行比对,几个值得知道的边界:
- 应用 API 是壳,能力看系统:
filePreview.openPreview()最终拉起的就是com.ohos.preview_system_app,它内部再路由到图片/文本/PDF/音视频/网页等查看器; - 开源 master 版比厂商集成版更弱:开源版
SingalFilePreview.loadPreviewPage里LOAD_STATE_PDF分支直接跳失败页(pdfView 被剥离,要 PDF 得再集成 PDF Kit 的 PdfView),而 RT80 厂商版 PDF 预览完整可用(注释/搜索/打印); - Office 全系(doc/docx/xls/xlsx/ppt/pptx/rtf/csv/WPS/OFD)在两版里都是死代码:
officeUTDSet白名单(35 项 UTD)构建后没有任何查询点,Office 文件一律落"不支持"页。想支持 Office,得自己在getOpenType里接上这个集合并实现渲染; .ts文件会被当视频打开(源码注释:“默认把.ts文件当作视频文件处理”)——TypeScript 源码和 MPEG-TS 视频撞了后缀,系统选择了后者。
所以"能不能用 Preview Kit"要拆成两问:镜像里有没有装(第三章解决)→ 装的版本支持你要的格式吗(看实现,别只看 API)。
五、总结
| 你是谁 | 你要做的事 |
|---|---|
| 应用开发者 | 下载 HAR → 挂依赖 → 改 hvigor 插件一行路径 → 调 @kit.PreviewKit 等 API → 确认设备镜像含 Kit 实现 |
| 设备开发者 | repo 拉 Kit 源码 → 产品/子系统/syscap/预置应用四步配置 → build.sh 编镜像烧录 |
| 只想在开发板上体验 | 直接刷官方 P7885 ROM(已集成全部 Kit) |
整体设计比社区旧的"替换 Full SDK"方案优雅:SDK 本体零侵入,系统侧以可选部件(component)形式按需集成,符合 OpenHarmony 的部件化架构。当前版本(6.1.0 Release)的主要短板是个别 Kit 的开源实现落后于商业版(如 Preview Kit 的 PDF/Office),选型时务必按第四章的思路核对能力边界,而不是只看接口文档。
参考
更多推荐
所有评论(0)