Wednesday, 13 April 2022

Android ProcessBuilder says file not found

I am trying to run my own native executable. The code looks like this:

String[] command = {"smoproc"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("/data/local/tmp"));
Process process = builder.start();

But I am getting this exception:

java.io.IOException: Cannot run program "smoproc" (in directory "/data/local/tmp"): error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
    at org.smowsoft.systeminformation.ExampleInstrumentedTest.testRun(ExampleInstrumentedTest.java:113)
    ... 29 trimmed
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
    at java.lang.ProcessImpl.start(ProcessImpl.java:141)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 31 more

I am very sure the file exists. I can run the process using adb shell. Why do I get this exception? Do I need a permission to run the process?

Edit: As @Robert suggested I changed the command to /data/local/tmp/smoproc instead of setting the directory.

I now get this error:

java.io.IOException: Cannot run program "/data/local/tmp/smoproc": error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
    at org.smowsoft.systeminformation.ExampleInstrumentedTest.testRun(ExampleInstrumentedTest.java:113)
    ... 29 trimmed
Caused by: java.io.IOException: error=13, Permission denied
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
    at java.lang.ProcessImpl.start(ProcessImpl.java:141)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 31 more

I have both set /data/local/tmp and /data/local/tmp/smoproc to chmod 0777. Any ideas?



from Android ProcessBuilder says file not found

No comments:

Post a Comment