HarmonyOS 鸿蒙Next开发中,如何调用已有so库?

HarmonyOS 鸿蒙Next开发中,如何调用已有so库? 鸿蒙开发应用中,如何调用已有so库?模板生成的工程里没有调用已有so文件 ,只是在add方法中读取了一个参数而已,试了多种方法都没有解决,求协助…

7 回复

可以调用, 将so库放到libs目录下,配置CMakeList.txt后,就可以调用了。

更多关于HarmonyOS 鸿蒙Next开发中,如何调用已有so库?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以贴下调用的demo代码,感谢,最近碰到类似问题,

如果是包含napi的so库,直接import就可以调用了,

可能不能直接调。
先说好我不是很懂这方面的开发。
我建议是实现一个NApi接口类之类的方案,然后在C++工程内部调用这个第三方so(就像普通的C++代码调用so的方法一样)。将so的调用结果,通过这个接口类以NApi的方式传回js。

因为NApi要写胶水代码的,你第三方so没有这个胶水代码,需要你写。胶水代码的写法,你可以参考默认的native模板的hello.cpp里面的写法。不确定有没有专门的教程教怎么写,

这个方式有人试过没 是否可行?

我试了 调用的是android的so库 报错了:Error: dlopen failed: library “libstdc++.so” not found: needed by /data/storage/el1/bundle/libs/arm64/libPPCS_API.so in namespace arkUI_default

在HarmonyOS鸿蒙Next开发中,调用已有so库可以通过以下步骤实现:

  1. 导入so库:将so库文件放置在项目的libs目录下,通常为src/main/libs

  2. 配置CMakeLists.txt:在项目的CMakeLists.txt文件中,添加对so库的引用。例如:

    add_library(my_shared_library SHARED IMPORTED)
    set_target_properties(my_shared_library PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libmy_shared_library.so)
    
  3. 加载so库:在Java或Kotlin代码中,使用System.loadLibrary方法加载so库。例如:

    static {
        System.loadLibrary("my_shared_library");
    }
    
  4. 调用Native方法:在Java或Kotlin中声明Native方法,并在C/C++中实现。例如:

    public native void myNativeMethod();
    
  5. 编译和运行:确保项目正确配置了NDK路径,并编译运行项目。

通过这些步骤,你可以在HarmonyOS鸿蒙Next开发中调用已有的so库。

回到顶部