HarmonyOS鸿蒙Next中ndk开发,暴露的接口里怎么调用其他目录下c++文件里的函数

HarmonyOS鸿蒙Next中ndk开发,暴露的接口里怎么调用其他目录下c++文件里的函数 老哥们,我从android项目里把一个第三方库的c++代码复制到鸿蒙项目里了,在暴露的接口里调用c++代码,编译不过去。应该怎么办啊? 没有做过ndk开发,官方那个文档没涉及到我这个情况。有什么比较完整的ndk demo吗

![](data-originwidth=“1928” src=“https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/015/964/372/0000000000015964372.20241029181849.45644673127258102870305045549145:50001231000000:2800:A6C7491B3A81FB49F4667A3E629FFCA039E13F29379FD1AADE2FD7A4E5E215E5.png”)


更多关于HarmonyOS鸿蒙Next中ndk开发,暴露的接口里怎么调用其他目录下c++文件里的函数的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

这个问题的意思是说没找到ConnectionsManager::getInstance()函数实现,你先确认下代码里有没有这个函数实现。如果有的话,看下是不是真的编译进去了:比如这个函数的实现是在另一个文件,但是CMakeLists.txt里边没把这个文件加进去。如果都没问题的话,把build目录缓存删掉,重新sync一下再编译试试

更多关于HarmonyOS鸿蒙Next中ndk开发,暴露的接口里怎么调用其他目录下c++文件里的函数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


确实没加到CMakeList,问题是这个库有几千个cpp文件,我都要加一遍吗。然后你说的加进去是指add_library(entry SHARED napi_init.cpp xxx.cpp)这么加吧,

CMake有语法可以把整个目录的.cpp文件都加进去,比如:

file(GLOB SRC client/*.cpp connection/*.cpp)
# ${SRC}就已经包含了client和connection目录下的所有cpp文件
add_library(hello SHARED ${SRC})

升级HarmonyOS后,发现手机的游戏性能也有了显著提升。

可以把所有的文件放到一个文件夹里面,CMkaeLists统一链接到target,

第三方库是开源的吗,开源的建议交叉编译出so然后再去使用这个库。

参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-ndk-34-V5

在HarmonyOS鸿蒙Next中进行NDK开发时,若要在暴露的接口中调用其他目录下C++文件里的函数,可以通过以下步骤实现:

  1. 头文件引用:确保在需要调用函数的C++文件中包含目标C++文件的头文件。例如,如果目标文件是other.cpp,则需要在当前文件中包含#include "other.h"

  2. 函数声明:在头文件中声明需要调用的函数。例如,在other.h中声明函数void myFunction();

  3. 函数定义:在other.cpp中定义该函数。例如:

    void myFunction() {
        // 函数实现
    }
    
  4. 编译配置:在CMakeLists.txtbuild.gradle中确保other.cpp被正确包含在编译源文件中。例如,在CMakeLists.txt中添加:

    add_library(native-lib SHARED native-lib.cpp other.cpp)
    
  5. 调用函数:在暴露的接口中直接调用myFunction()。例如:

    extern "C"
    JNIEXPORT void JNICALL
    Java_com_example_myapp_MainActivity_callMyFunction(JNIEnv *env, jobject thiz) {
        myFunction();
    }
    

通过以上步骤,可以在鸿蒙Next的NDK开发中调用其他目录下C++文件里的函数。

在HarmonyOS鸿蒙Next中进行NDK开发时,若需调用其他目录下C++文件中的函数,首先确保目标C++文件已编译并链接到项目中。然后,在暴露的接口文件中使用#include指令包含目标C++文件的头文件。接着,在接口实现中直接调用目标函数即可。确保编译配置正确,包含所有必要的源文件和头文件路径。

回到顶部