在我的 flutter 应用程序中,我有一个可执行文件,我喜欢将其作为 Android 上的交互式子进程启动。我的测试代码是这样的:
rootBundle.load("assets/engines/stockfish-android-armv8").then((buffer) async {
String name = "${(await getApplicationDocumentsDirectory()).path}/stockfish-android-armv8";
final File file = File(name);
await file.writeAsBytes(buffer.buffer.asUint8List());
ProcessResult p1 = Process.runSync("chmod", ["a+x", name]);
ProcessResult p2 = Process.runSync(name, []);
}
首先将可执行文件从资产复制到文档目录。然后用 a+x (或 u+x,没关系,该进程的退出代码是 0 ——所以看起来没问题)进行 chmodded。
但是当尝试启动该过程时,它会给出
ProcessException: Permission denied Command: /data/user/0/com.example.chess_partner/app_flutter/stockfish-android-armv8
。
当文件没有被chmodded时,例外是“文本文件忙”。
我有点没有主意......有人有提示吗?
谢谢并致以最诚挚的问候, 托比亚斯
在这种情况下,可以通过以下方式启动该过程:
Process p2 = await Process.start(name, [], runInShell: true);
在 shell 中运行该进程似乎是允许的。
最诚挚的问候, 托比亚斯