文档管理中心
FAQ应用框架开发NDK开发NDK开发如何在一个模块中使用另一个模块中编译出来的so

如何在一个模块中使用另一个模块中编译出来的so

问题场景

在a module的Native侧集成b module编译出来的so,可以按照以下步骤操作:

1. 确保b module中的so文件已经成功编译,并且路径正确。

2. 在a module的`CMakeLists.txt`,添加对b module中so文件的引用。

例如,在CMakeLists.txt中添加如下内容:

收起
自动换行
深色代码主题
复制
  1. cmake
  2. add_library(b SHARED IMPORTED)
  3. set_target_properties(b PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/path/to/b/libb.so)
  4. target_link_libraries(a b)

3. 确保a module的构建脚本能够正确找到并链接b module的so文件。

通过以上步骤,a module就可以在Native侧成功集成b module编译出来的so文件。

解决措施

  1. 纯CPP部分使用NDK编译成.so或.a文件,并放置在HAR或HSP中。
  2. 依赖上述的HAR或HSP后,使用已链接的头文件方式,在链接时直接写库文件名即可。这样,纯C++的SO库实现了多模块共享。需要通过NAPI使用的模块,只需单独编写NAPI代码。NAPI封装后的功能也可以通过模块依赖的方式被其他模块使用。

操作步骤

  1. 在HAR/HSP模块的build-profile.json5中,指定buildOption/nativeLib/headerPath为接口文件目录。
    收起
    自动换行
    深色代码主题
    复制
    1. buildOption: { nativeLib: { headerPath: "src/main/cpp/include" } }
  2. 调用方依赖HAR或HSP包。
    收起
    自动换行
    深色代码主题
    复制
    1. // oh-package.json dependencies: { curl: "1.0.0" }
  3. 调用方配置CMake链接SO,格式为 packageName::soName。
    收起
    自动换行
    深色代码主题
    复制
    1. target_link_libraries(entry PUBLIC curl::curl)
在 FAQ 中进行搜索
请输入您想要搜索的关键词