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

Flutter / Android: Start executable from assets

提问人:tps 提问时间:11/11/2023 更新时间:11/15/2023 访问量:26

问:

在我的 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, []);
}

因此,首先将可执行文件从资产复制到 Documents 目录。然后它用 a+x 修改(或 u+x,没关系,该进程的退出代码是 0 - 所以似乎没问题)。

但是当尝试启动该过程时,它会给出一个 .ProcessException: Permission denied Command: /data/user/0/com.example.chess_partner/app_flutter/stockfish-android-armv8

当文件未修改时,异常是“文本文件繁忙”。

我有点出主意了......有人有提示吗?

谢谢和最诚挚的问候, 托比亚斯

Android Flutter 飞镖 进程

评论


答:

0赞 tps 11/15/2023 #1

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

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

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

此致敬意 托比亚斯