我试图找出如何将鳕鱼(或任何UCI兼容引擎)集成到我的Android应用程序中。
我从这里下载了鱿鱼Android拉链: Download Stockfish Engine
在zip的Android目录下有两个文件:
我有两个问题:
谢谢!
答案 0 :(得分:8)
Stockfish是用C ++编写的,用Java编写的常规Android应用程序来调用它,你需要
在您学习如何使用JNI编译Stockfish之后,您可以通过 UCI协议与引擎进行交互:以下是UCI Specification。
然后您可以调用特定方法(例如,评估一个位置,或建议最佳移动)。这一切都始于发送引擎isready
。如果你得到了答案,那么你就走在了正确的轨道上。
修改像Droidfish这样的现有项目而不是从头开始会容易得多。
答案 1 :(得分:4)
在搜索了许多天后,我找到了解决方案:
add_executable(
stockfish
benchmark.cpp evaluate.h ...(and the rest of the copied files)
)
targets "stockfish"
,如下所示:externalNativeBuild {
cmake {
targets "stockfish"
cppFlags ""
}
}
lib_stockfish.so
一样重命名每个文件夹中的每个stockfish文件,现在这些文件夹应如下所示:...
-libs
-arm64-v8a
-lib_stockfish.so
-armeabi-v7a
-lib_stockfish.so
and so on...
...
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
implementation fileTree(dir: "libs", include: ["*.jar", "*.so"])
android:extractNativeLibs="true"
String path = getApplicationContext().getApplicationInfo().nativeLibraryDir+"/lib_stockfish.so";
File file = new File(path);
try {
process = Runtime.getRuntime().exec(file.getPath());
} catch (IOException e) {
e.printStackTrace();
}
Thread outThread = new Thread(new Runnable() {
@Override
public void run() {
Process processOut = process;
if(processOut == null){
return;
}
BufferedReader out = new BufferedReader(new InputStreamReader(processOut.getInputStream()));
String data;
try{
while( (data = out.readLine()) != null ){
//do something with data
}
} catch(IOException e){
}
}
});
outThread.start();
///to give commands
String command = "uci";//or other command
command += "\n";
try {
Process ep = process;
if (ep != null) {
ep.getOutputStream().write(command.getBytes());
ep.getOutputStream().flush();
}
} catch (IOException e) {
}