我正在为 Android 开发一个国际象棋游戏,并计划使用用 C++ 编写的 AI 引擎。所以,我必须进行从 Java 到 C++ 的本地方法调用。来源如下所示:
计算机.java
class Computer{
public native String dumpMethod();
static{
System.loadLibrary("mylib");
}
public static String makeMove(){
return dumpMethod();
}
和 c++ 文件:mylib.cpp
#include <jni.h>
#include <string>
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_Computer_dumpMethod(JNIEnv *, jobject);
JNIEXPORT void JNICALL Java_Computer_dumpMethod(JNIEnv *env, jobject obj){
...
Engine * engine = new Engine();
engine->setLevel(10);
std::string rsult = engine->generateMove();
...
//return result
...
}
#ifdef __cplusplus
}
#endif
当我从主活动中调用 Computer.makeMove() 时,程序崩溃,logcat 窗口中没有任何错误信息。我不知道这个问题,但似乎是因为 generateMove() 执行。
当级别设置为 10 时,generateMove() 调用需要很长时间(最多 15 秒)才能完成。我认为 Android 活动不能等到它完成并崩溃。
如果 level 设置为 1,则一切正常,这意味着 generateMove() 可以完成并立即返回执行结果。
我想我需要以同步方式拨打电话,但我不知道。有没有办法以同步/异步方式进行本机调用?