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