This question already has answers here:
Call c function from Java
(11个答案)
去年关闭。
我使用生成Xcode或Android项目的引擎制作应用程序,而我主要将Xcode用于我的项目。但是,我希望第一次使用Android Studio。
在生成的Android Studio项目中,我有一个
PTServicesBridge类:
该项目包括一个
Main.cpp
如何从
编辑:
引擎支持人员告诉我这样做。我希望有一个简单的解决方案,可以从Java类中调用.cpp方法。
在
其中
有关JNI如何工作的更多信息,请查看docs。
(11个答案)
去年关闭。
我使用生成Xcode或Android项目的引擎制作应用程序,而我主要将Xcode用于我的项目。但是,我希望第一次使用Android Studio。
在生成的Android Studio项目中,我有一个
PTServicesBridge
类,在其中我为引擎外的其他功能添加了自己的代码。 (在这种情况下,我需要将得分变量向上调整,但设为1)。PTServicesBridge类:
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
文件,该文件包含我需要调用的方法。Main.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 <<<<<<<<<<
}
如何从
adjustScoreUpNow
类中调用PTServicesBridge
?编辑:
引擎支持人员告诉我这样做。我希望有一个简单的解决方案,可以从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如何工作的更多信息,请查看docs。
09-12 16:45