从 Java 类调用C++方法?

Call C++ method from Java class?

本文关键字:方法 C++ 调用 Java      更新时间:2023-10-16

我使用生成Xcode或Android项目的引擎制作应用程序,我主要使用Xcode进行项目。但是,我希望第一次使用Android Studio。

在生成的Android Studio项目中,我有一个PTServicesBridge类,我可以在其中添加自己的代码,用于引擎之外的其他功能。(在这种情况下,我需要将分数变量调整为1(。

PTServicesBridge Class:

public class PTServicesBridge
public static PTServicesBridge instance() {
if (sInstance == null)
sInstance = new PTServicesBridge();
return sInstance;
}
public static void initBridge(Cocos2dxActivity activity, String appId){
//some initialisations
}
//...
public static void adjustScoreUp(){
//I need to call a function from here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}

该项目包含一个main.cpp文件,其中包含我需要调用的方法。

主.cpp

#include "screens/PTPScoreController.h"
using namespace cocos2d;
extern "C"
{
jint JNI_OnLoad(JavaVM *vm, void *reserved){
JniHelper::setJavaVM(vm);
return JNI_VERSION_1_4;
}
//...
void adjustScoreUpNow{
PTPScoreController::scores().points.addCurrent(1); //This method <<<<<<<<<<
}

如何从PTServicesBridge班拨打adjustScoreUpNow

编辑: 引擎支持告诉我这样做。我希望有一个简单的解决方案可以从 Java 类调用 .cpp 方法。

PTServicesBridge中定义本机 java 函数。像这样:

private static native void  adjustScoreUpNow();

main.cpp提供以下实现

extern "C" {
JNIEXPORT void JNICALL Java_<full_package_name>_PTServicesBridge_adjustScoreUpNow(JNIEnv *env, jclass clazz) {
//Call native side conterpart 
adjustScoreUpNow();     
}
}

其中<full_package_name>应该是带有_PTServicesBridge的包名,而不是.

有关 JNI 工作原理的更多信息,请查看文档。