gpt4 book ai didi

android - 不用ndk写一个android gui象棋界面

转载 作者:行者123 更新时间:2023-11-30 05:08:16 25 4
gpt4 key购买 nike

我正在寻找一种无需使用 NDK 和 JNI 即可执行国际象棋引擎(例如 Stockfish)的方法。

我遇到的主要问题是,如何执行软件(如在提示中)并在它向我发送输出时保持运行。

第二个也是更具体的问题是如何在设备上获取已安装的国际象棋引擎,如果可能的话(以及是否有办法使用它们)。

下面我详细说说我要实现的目标

我不知道我想做的事情是否可行,所以我会解释:当你安装国际象棋引擎应用程序时,比如 KomodoStockfish ,当你执行它们时,你会看到一条消息,通知你必须下载一个 GUI 应用程序,以便它作为一个完整的国际象棋程序工作。任何人都可以从这些消息中推断出 GUI 应用程序可以利用设备中安装的引擎。

有没有办法查看设备上安装的引擎以显示在选择框上,并从应用程序中“提取”这些引擎,或者找到它们在设备中的位置,或者通过另一个执行应用程序方式类似于 Intent ?

问题在于,国际象棋引擎是一种必须保持运行才能占据一席之地的软件;您向他们发送您希望他们利用的职位,当他们分析时,他们会不断向您发送他们的评估,他们会一直这样做,直到您向他们发送停止命令。

如果你在Windows的提示符下执行Stockfish,你就可以清楚我在说什么了。当它执行时,它等待命令;你向他们发送命令和“uci”;然后你发送一个像“position fen”这样的命令,然后你发送“go infinite”,他们开始计算并不断发送关于他们计算的输出。

所以,我想创建一个应用程序,利用设备中安装的引擎。

直到现在我还没有发现如何做到这一点。我不得不下载 DoidFish 应用程序源代码并分析他们做了什么......他们获得了 stockfish 的源代码并使用 JNI 执行它。

但那样的话,我的应用程序中就会有一个固定且有限的引擎列表,而且我会省去没有开源的引擎,例如 Komodo 和 Houdini。我看到 Chessbase应用程序可以使用多个引擎,如您在应用程序页面的屏幕截图中所见。他们还在列表中显示了 Komodo 引擎(正如我购买该应用程序所看到的)...我安装了 Komodo...所以他们不得不以其他方式进行...

由于无法解开谜团,我下载了stockfish的编译arm版本,并尝试使用Runtime的exec方法执行它,如:

Runtime rt = Runtime.getRuntime();
String[] commands = {enginePath, "uci"};

Process proc = rt.exec(commands);

然而引擎是一个你必须执行的软件,它必须在你向它发送命令时保持运行,就像我之前解释的那样,但是我以这种方式执行了引擎,然后它向我发送了一个输出(我得到了 BufferedReader) 然后停止执行。

对不起,这么长的文字,你能帮我弄清楚吗?

最佳答案

Playstore 规则 阻止使用引擎编译 GUI;但您可以在线托管引擎,使用 Yandex.Disk 或 bubble.io 和 googledrive 创建 PWA,或者为 F-Droid 创建 APK 应用程序; (更多内容见下文)。

这消除了您的编译问题并将它们换成其他问题。

Android使用OEX开放交换协议(protocol); GUI 必须支持这一点。 (比如 droidfish 支持这个,还有一个名为“Harmon Honey App”的 droidfish 的 git 分支);

Android NDK 用于将 c++ 编译成可安装的 apk (Gradle);
这就是您获得“启动画面”的原因。使用 NDK,引擎在设计上被视为 Java 应用程序;当开发人员在 android studio 中编译引擎时,他们选择了该模板。 2021年可以打开Android studio --> File--> New --> C++ Native --> 之前这个选项是不存在的,NDK是旁加载的。您别无选择,只能创建一个模板。

OEX 应用的发布者不是开发者。我给 Karl Schreiner 发了邮件,他在 Playstore 上发布了很多引擎;他迅速回复了我并且知识渊博,但表示他不会编译它们或不知道如何编译。我联系了 Acid-Ape-Studio 的开发人员;他们拒绝回答,但很好地指出了 Android NDK 作为首选方法的方向。 (我想交叉编译比从 C 代码转换为 Kotlin 更容易)
如果可能,请使用 Linter、Inspector 和智能语法 AI。

国际象棋 GUI(在本例中为 Droidfish)调用引擎。

问题 1:这不能保证引擎是为您的 ARM7、ARM8、移动硬件等编译的...

问题 2:这也不保证 UCI 功能会起作用,例如 SYZGZY Probe、Opening Book、Novelty bitboard (Scorpio)、winboard、MCTS、Frutility 或其他分析技巧;以及最重要的 NN-Classic 选项(神经网络位置和类型)。

问题 3:Play 商店规则!您不能预编译 GUI 和引擎。不确定规则是否阻止使用引擎预编译 EGTB。

你最好的选择;创建 PWA 或 PWA 类似服务,如 Yandex.disk 或 Web2Android;甚至让用户发布他们的引擎。编辑 PWA 功能以使用 Lichess API 调用 EGTB、机器人和其他东西。在 PWA 中创建一个下拉列表以下载离线表库、离线 NNUE、培训 FEN、培训 EPD 套件等。

(为什么 LiChess 不做个人机器人,或者托管带有用于 UCI 设置的 cookie 的老式引擎?或者个性机器人?好吧,他们做“Kindof”;你可以发布你的机器人,但它们需要由你以某种方式托管......然后就是作弊者)。

主要是技术性的解决方法;您可以使用 Banksai-GUI 和 Lichess BOT API 帐户轻松托管您自己的机器人。然后启动您的 Android 平板电脑并向 BOT 发起游戏挑战。

从技术上讲,您可以随心所欲地托管此机器人;即使在 Docker、GoogleDrive 和 Droidfish 上也有“网络引擎”功能。

我尝试在 Fivver 上聘请开发人员为我编译。我没有成功。

如果你成功了;请将您的引擎发布到其他人可以享受它的地方,例如 GITHUB 和国际象棋引擎论坛。

关于android - 不用ndk写一个android gui象棋界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com