我想将一个用 Rust 编写的 macos 原生控制台程序捆绑到 Flutter 应用程序中。
Flutter 应用程序需要从 Dart 调用此程序,如下所示:
Process.runSync("./myconsoleapp", ["argument1", "argument2"]);
Flutter 应用程序似乎找不到
myconsoleapp
。
有没有办法将
myconsoleapp
嵌入到Flutter应用程序中,并使其可执行?我尝试手动添加,但没有成功。
史蒂夫
Flutter for windows 只需将 project.exe 与一堆其他文件捆绑到 (
build\windows\runner\debug\
) 中的目录中。没有人可以阻止您将文件添加到该目录。
在您的 dart 代码中,只需从新添加的文件启动一个新进程即可:
var exePath =
p.join(p.dirname(Platform.resolvedExecutable), 'myFile.exe');
var result = await Process.run(exePath);
它找不到您的可执行文件,因为
./
(您的应用程序启动环境中的当前目录)与您的应用程序位置之间没有关系。如果您想访问应用程序中捆绑的某些内容,您应该使用 NSBundle
的 pathForResource:ofType:
来获取它的路径(通过方法通道或 FFI)。
有没有办法将 myconsoleapp 嵌入到 Flutter 应用程序中,
您可以通过 Xcode 将其添加为捆绑资源。 (这一步没有任何特定于 Flutter 的内容。)
并使其可执行?
大概您的 Rust 构建过程的产物已经是可执行的。
我正在尝试解决我的 flutter mac 应用程序中的类似问题。你找到解决办法了吗?