HarmonyOS 如何在ArkTS中使用so库?

有一块原生功能迁移,希望使用rust来实现逻辑层通知,将rust编译成so文件,在HarmonyOS里去调用实现,但是在将so复制至libs 下不同架构的目录下,并且cpp/types下添加对应用index.d.ts和oh-package.json5,并在 “libuim.so”: "file:./src/main/cpp/types/uim"添加引用,但是在ArkTS中还是无法加载,官方的nativerawfile的demo里提供的实现方式是需要在C++ 层去加载so并添加libnativerawfileapi这个中间去加载调用so, 是必须要这么做吗?是否能在工程里直接加载so的api? 另外一个问题rust的代码是否可以在harmonyos 里开发像现在C++的代码一样。

阅读 1.1k
avatarAI BotBETA

HarmonyOS 中在 ArkTS 使用 so 库

在 HarmonyOS 中,ArkTS(ArkUI TypeScript)主要用于构建前端界面,而涉及到原生代码(如 Rust 或 C++ 编译的 so 库)的调用,通常需要通过原生模块桥接。对于你的需求,确实有一些特定的步骤和考虑因素。

1. 加载 so 库

在 HarmonyOS 中,如果你希望直接在 ArkTS 中加载和使用 so 库,通常这不是直接支持的。ArkTS 主要用于 UI 层的开发,而与原生库的交互需要通过原生模块(如 Java/Kotlin 或 C++/C)来实现。

解决方案

  • 使用 Native API Bridge:如你提到的,通过 C++ 层来加载和调用 so 库是一个常见的做法。你可以创建一个 C++ 的桥接层,该层负责加载 so 库并暴露必要的接口给 ArkTS。这通常涉及到在 C++ 中使用 dlopendlsym 等函数来加载和调用 so 库中的函数。
  • 使用 HarmonyOS 的 Native API:HarmonyOS 提供了一些原生 API 来帮助开发者与原生代码交互,但具体实现可能依赖于你的项目结构和 HarmonyOS 的版本。

2. Rust 代码在 HarmonyOS 中的使用

Rust 代码可以在 HarmonyOS 中使用,但通常也是通过编译成 so 库,并通过原生模块桥接的方式与 ArkTS 交互。HarmonyOS 官方文档和社区可能还没有详尽的关于直接使用 Rust 开发 HarmonyOS 应用的指南,但你可以参考 C++ 的开发方式,因为 Rust 和 C++ 在很多方面都有相似之处。

步骤

  • 编写 Rust 代码:编写你的 Rust 代码,并编译成 so 库。
  • 创建 C++ 桥接层:在 C++ 中创建一个桥接层,用于加载 Rust 编译的 so 库,并暴露必要的接口。
  • 在 ArkTS 中调用:通过 HarmonyOS 的原生 API 或你自定义的 C++ 接口,在 ArkTS 中调用这些功能。

3. 注意事项

  • 架构兼容性:确保你的 so 库与 HarmonyOS 设备的 CPU 架构兼容。
  • 权限问题:在 Android 或 HarmonyOS 上加载和使用 so 库时,可能需要处理相关的权限问题。
  • 调试和测试:由于涉及到原生代码和 TypeScript 的交互,调试和测试可能会更加复杂。

总之,虽然 HarmonyOS 不直接支持在 ArkTS 中加载和使用 so 库,但你可以通过创建原生模块桥接层来实现这一功能。同时,Rust 代码也可以在 HarmonyOS 中使用,但同样需要通过原生模块桥接的方式与 ArkTS 交互。

1 个回答

在HarmonyOS中使用Rust来编写并编译成SO库(动态链接库),然后在ArkTS(或Java/JS等)环境中调用这个SO库,确实涉及一些特定的步骤和考虑因素。

在HarmonyOS中,您确实可以通过几种方式来加载和使用SO库。您提到的libnativerawfileapi是一个例子,它通常用于提供对原生文件操作的封装,但这不是加载任意SO库的唯一方式。

直接加载SO库:
您可以在ArkTS(或Java/JS)中直接使用系统提供的API来加载SO库。在ArkTS(如果它支持类似Java的System.loadLibrary或JS的Native.load之类的API)或Java中,这通常是通过System.loadLibrary("yourlibraryname")完成的,其中yourlibraryname是不带.so后缀的库名。然而,ArkTS的具体API可能有所不同,需要参考ArkTS的文档。

目前官方集成rust开发的方案可能还没有,但是下面有一些参考链接您看看是否能帮助到您:
https://rustcc.cn/article?id=568d35d6-b782-49e9-b9b1-5d870d28...
https://github.com/ohos-rs/ohos-rs
https://doc.rust-lang.org/rustc/platform-support/openharmony....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题