HarmonyOS 鸿蒙Next ArkTS 如何加载 so 文件?
HarmonyOS 鸿蒙Next ArkTS 如何加载 so 文件?
<markdown _ngcontent-cud-c237="" class="markdownPreContainer">
几个问题:
- ArkTS 如何加载已有的 so(无 native 源码),有没有类似 Java System.loadLibrary 的方式?
- 鸿蒙的项目,如果 liba.so 依赖了 libb.so,假设 liba.so 是我们自己的,我们调用到 libb.so 提供的 export 出来的 .h 文件的时候,是不是就已经把 libb.so 加载起来了,还用在 liba.so 里面使用 dlopen 吗?
- 通过 index.d.ts 那一套固定写法加载的 libb.so 文件,和假设在一个 liba.so 里 dlopen 的 libb.so 文件,有什么不同吗?
更多关于HarmonyOS 鸿蒙Next ArkTS 如何加载 so 文件?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next ArkTS 如何加载 so 文件?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我试了下,是可以的,但是前提要知道 so里的方法才能调用。如果我单纯只是想加载 so 呢(不调用任何方法)?
HarmonyOS 鸿蒙Next ArkTS学习:https://www.bilibili.com/video/BV1fw2ZYSEk2
配套课件及涉及源码网盘下载地址:http://bbs.itying.com/topic/6568836e6a4621002b88a6f6
放在libs里面默认就可以加载。然后印象中系统应该把dlopen禁掉了,如果有在native加载包的需求 提供了 napi_load_module
在HarmonyOS鸿蒙Next ArkTS中加载so文件,可以通过以下几种方式实现:
一、动态Import方式
ArkTS支持使用动态import来加载so文件。具体代码如下:
@Entry @Component struct Index {
@State message: string = 'Hello World';
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(async () => {
let module = await import("libentry.so");
console.log(module.default.someFunction());
})
}
.width('100%')
}
.height('100%')
}
}
其中,"libentry.so"是你要加载的so文件名,someFunction()是so文件中导出的函数。
二、Native层dlopen方式
在Native层,可以使用dlopen等标准库函数来加载so文件。首先,需要将so文件放置到正确的目录,如工程的libs目录下,并在CMakeLists.txt中配置好链接路径。然后,在Native代码中通过dlopen打开so文件,并使用dlsym获取需要的函数指针,最后调用该函数。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。