0

编辑:我已经通过更改以下内容解决了这个问题(并在 JNI 磨难的长线中找到了下一个问题!):

删除 Java 和 C++ 中本机方法的“静态”声明,添加一个 Java 方法来获取我的 SimpleGame 类的实例,然后调用

public static void callCppApiResponse (String result, String token, long context) {
**getInstance()**.cppAndroidApiResponse(token, 200, result, result.length(), context);
}

现在信息成功地从Java 到C++。希望这可以帮助其他有类似问题的人。

原帖:

我正在使用 Cocos2d-x 平台并为跨平台 iOS/Android 应用程序编写 C++ 代码,并且我需要由各自的原生 iOs/Android 系统处理某些方法,因此我需要能够从 C++ 调用 Java,然后从 Java 调用 C++。

我能够加载应用程序的共享库并触发来自 C++ 的 Java 响应,但是当我尝试从 Java 调用 C++ 时,我得到以下 logcat 输出并且应用程序崩溃:

dalvik vm     No implementation found for native Lorg/cocos2dx/simplegame/SimpleGame; cppSideAndroidApiResponse:(Ljava/lang/String;ILJava/lang/String;IJ)V
AndroidRuntime      java.lang.UnsatisfiedLinkError: Native method not found: org.cocos2dx.simplegame.SimpleGame.cppAndroidApiResponse:(Ljava/lang/String;ILJava/lang/String;IJ)V

这是相关的Java代码:

package org.cocos2dx.simplegame;

private static native void cppAndroidApiResponse(String token, int response, String data, int dataLen, long context);

static {
    System.loadLibrary("sb");
}

public static void callCppApiResponse (String result, String token, long context) {
//This is where the error is triggered
    cppAndroidApiResponse(token, 200, result, result.length(), context);
}

在 C++ 文件 cppSide.h 中:

# if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif
# if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JNIEXPORT static void JNICALL 
Java_org_cocos2dx_simplegame_SimpleGame_cppAndroidApiResponse(JNIEnv *, jobject, jstring, jint, jstring, jint, jlong);
#endif
#ifdef __cplusplus
}
#endif

最后是 cppSide.cpp 文件

#include "cppSide.h"

extern "C" {
JNIEXPORT static void JNICALL      
Java_org_cocos2dx_simplegame_SimpleGame_cppAndroidApiResponse(JNIEnv *env, jobject obj, jstring token, jint response, jstring data, jint length, jlong context)
{ ...do stuff...}
}

我知道我的共享库正在加载,因为我获得了基于 C++ 的加载屏幕,并且我知道 JNI 至少部分工作,因为我能够以另一种方法从同一个 cppSide.cpp 文件调用 Java。我一直在研究 JNI 和 Cocos2d-X 文档,但无济于事。

提前致谢!

4

0 回答 0