HarmonyOS 鸿蒙Next如何调用另一个har Module里的Native方法

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何调用另一个har Module里的Native方法

我现在有一个ModuleA,现在又创建了一个har类型的ModuleB,并且ModuleB enable native。

ModuleB里面有两个NAPI方法add和sub,我现在想在ModuleA里面使用ModuleB的add和sub方法,请问要如何调用呢?

目前的实现方案是直接在ModuleA的oh-package.json5里面依赖ModuleA的这两个方法,发现调用出现崩溃,请问是什么原因呢?

cke_11859.png


更多关于HarmonyOS 鸿蒙Next如何调用另一个har Module里的Native方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

1、先将被调用的so库的头文件放在该so所在模块的cpp/include文件夹下,接着在该模块的build-profile.json5中配置C++头文件的目录。

{
  "apiType": "stageMode",
  "buildOption": {
    "nativeLib": {
      "headerPath": "src/main/cpp/include"
    },
    "externalNativeOptions": {...},
  },
  "buildOptionSet": [...],
  "targets": [...]
}

2、在cmakelist中,将该头文件对应的.cpp文件打包:add_library(srcHar SHARED Summation.cpp)。

3、在调用方模块的oh-package.json5中声明依赖 “myHar”: “file:…/srcHar”。

4、在调用方的cmakelist中申明要调用的so库的依赖target_link_libraries(deshar PUBLIC libace_napi.z.so myhar::srchar)。

5、在调用方的.cpp文件添加要调用的so的头文件。

更多关于HarmonyOS 鸿蒙Next如何调用另一个har Module里的Native方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,调用另一个har(HarmonyOS Archive)模块中的Native方法,通常涉及以下步骤:

  1. 确保模块间依赖正确:首先,在你的项目的build.gradle文件中,需要确保你已经正确添加了对目标har模块的依赖。这通常通过dependencies块来实现,例如:

    dependencies {
        implementation project(':targetHarModuleName')
    }
    
  2. 使用JNI或NDK接口:鸿蒙系统中,Native方法通常通过JNI(Java Native Interface)或NDK(Native Development Kit)进行调用。如果目标har模块提供了JNI接口,你可以在Java代码中直接使用System.loadLibrary加载库,并通过声明为native的Java方法调用Native代码。

  3. 直接调用Native方法:如果har模块中的Native方法是公开的(例如,通过某种形式的导出机制,比如共享库中的符号),你可以通过加载该共享库并获取函数指针来调用它。这通常涉及到更底层的操作,如使用dlopendlsym等POSIX函数。

  4. 确保编译和链接正确:确保所有Native代码都已正确编译,并且生成的共享库(如.so文件)可以被正确加载和链接。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部