Flutter / Android:从资产启动可执行文件

问题描述 投票:0回答:1

在我的 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时,例外是“文本文件忙”。

我有点没有主意......有人有提示吗?

谢谢并致以最诚挚的问候, 托比亚斯

android flutter dart process
1个回答
0
投票

在这种情况下,可以通过以下方式启动该过程:

Process p2 = await Process.start(name, [], runInShell: true);

在 shell 中运行该进程似乎是允许的。

最诚挚的问候, 托比亚斯

© www.soinside.com 2019 - 2024. All rights reserved.