HarmonyOS鸿蒙Next中如何将自定义组件打包到SO中?

HarmonyOS鸿蒙Next中如何将自定义组件打包到SO中? 比如我创建一个 ets文件,自定义了个组件,如何将这组件编译成SO?

6 回复

开发者您好,abc是ets编译成的二进制,so是c++和仓颉编译的二进制,不可相互转换。

ets不能编译成so,只能编译成abc,C/C++文件和仓颉文件才能编译成so。

更多关于HarmonyOS鸿蒙Next中如何将自定义组件打包到SO中?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


需要使用 Native C++ 才可以吧

不支持。

有方案的, 通过ets得到 js,在通过js得到abc,将abc放入到so. 但是我们找不到一条完整链路的实现。,

在HarmonyOS Next中,将自定义组件打包到SO库中,需要使用ArkTS的C API接口进行封装。首先,将组件的UI逻辑和功能用ArkTS编写,然后通过NAPI(Native API)将组件能力暴露给C++层。在C++层实现组件的原生接口后,使用DevEco Studio的Native C++模板编译生成SO文件。最后,在HAP的配置文件中声明并引用该SO库。

在HarmonyOS Next中,自定义组件(ets文件)无法直接编译为SO(共享库)。SO通常用于包含C/C++编写的本地代码,而ETS组件属于ArkTS声明式UI的一部分,运行在ArkTS运行时环境中。

若希望在应用中使用预编译的UI组件,可考虑以下方案:

  1. 将组件构建为Har包:这是HarmonyOS推荐的UI组件复用方式。通过创建Library模块,将ETS组件及其资源打包为.har文件,供其他应用模块依赖使用。

  2. 使用C++实现渲染逻辑:如果组件涉及高性能图形或复杂计算,可将核心算法用C++实现并编译为SO,再通过NAPI(Native API)在ArkTS中调用。但UI描述(布局、样式)仍需在ETS中定义。

简要步骤(Har包方式):

  • 在工程中新建Library模块。
  • 将自定义组件ets文件置于该模块ets目录下。
  • 配置oh-package.json,声明组件导出。
  • 构建后,在build目录下生成.har文件。
  • 其他模块通过npm install ../library.har依赖使用。

若坚持将UI相关代码放入SO,目前架构不支持,因ETS组件需由ArkUI框架解析和管理。

回到顶部