java - 为什么在提供绝对文件名时 ProcessBuilder 无法启动我的可执行文件?

标签 java android processbuilder

我有一个 Android 应用程序正在尝试(但失败)使用 ProcessBuilder 启动 native 进程。 。这是我所拥有的:

String[] args = {"/data/data/com.me.myapp/files/myexec", "param1", "param2"};
Process process = new ProcessBuilder(args)
    .directory(new File("/data/data/com.me.myapp/files/somedir"))
    .start();
process.waitFor();

(注意:出于本示例的目的,我已对路径进行了硬编码。真正的应用程序应使用 Context.getFilesDir() 。)

这里需要注意一些事项:

  • 该可执行文件是使用 NDK 针对 ARMv6 进行交叉编译的。
  • 二进制文件确实设置了可执行位。
  • 我可以从 adb 运行可执行文件外壳。

但是,当运行上面的代码时,出现异常:

Error running exec(). Command: [/data/data/com.me.myapp/files/myexec, param1,
  param2] Working Directory: /data/data/com.me.myapp/files/somedir ...

为什么我的应用程序不能 exec可执行文件?

最佳答案

哇 - 提出问题后只花了大约 2 分钟,我就发现我做错了什么。

问题很简单,在运行 exec 之前工作目录不存在。

关于java - 为什么在提供绝对文件名时 ProcessBuilder 无法启动我的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15596123/

相关文章:

java - 如何使用 unsigned int 才能使用 JNA(Java native 接口(interface))函数?

java - 我如何从另一个类获取字符串?

android - iOS 上的 Material 设计

java - 使用java processbuilder运行bat文件

java - 标准表单例份验证 Java servlet

java - Java 如何为对象的成员构建内存?

android - EditText 和 TextView

java - 等待两个异步任务的结果

java - 从java程序调用C编译器

java - 使用 Java 的进程生成器生成多个进程