如何在ArkTS中动态加载so?

如题:如何在ArkTS中动态加载so?

阅读 546
1 个回答

参考答复:

1、ArkTS动态加载so可以通过动态import

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(async () => {
            //加载so
            let module = await import("libentry.so")
            //调用so中的方法
            console.log("testTag", module.default.add(1, 2))
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

2、c++动态加载so可以通过dlopen标准库函数。

// path:从ArkTS侧传递so文件的沙箱路径(注意路径要从ArkTS侧传递、不然有可能找不到路径、具体代码后续会列出)
int getb(char *path, int a, int b) {
  void *handle = dlopen(path, RTLD_LAZY); // 打开一个动态链接库.路径为path
  if (!handle) {
    return 0;
  }
  FUNC_SUB sub_func = (FUNC_SUB)dlsym(handle, "sub"); // 获取函数名为sub的函数
  int res = sub_func(a, b);                           // 调用函数
  dlclose(handle);                                    // close动态链接库
  return res;
}
logo
HarmonyOS
子站问答
访问
宣传栏