开发者

java.io.IOException: Error running exec(). Commands: [cd, sdcard/.yasmin] Working Directory: null Environment: null

I try to access to my folder in sdcard and install myapp.apk, i use this code:

 Runtime.getRuntime().exec("cd sdcard/.yasmin");
 Runtime.getRuntime().exec("adb install tefli.apk");

But unfortunatelly i have this error:

05-11 11:09:57.925: WARN/System.err(1399): java.io.IOException: 
Error running exec(). Commands: [c开发者_如何学Cd, sdcard/.yasmin] Working Directory: null    Environment: null

Anybody please have an idea. thanks in advance.


I am not sure that this will fix your problem, but AFAIK, each call to exec() creates a new shell. A possible solution is to do the following:

  1. Get the process of the exec() using: Process p = Runtime.getRuntime().exec(...).
  2. Grab the process inputStream using p.getInputStream();.
  3. Run the second command.

also note that you are trying to access the sdcard as you were in root folder and in a hardcoded path, consider the following:

Process p = Runtime.getRuntime().exec("cd /sdcard/.yasmin");

Or even better:

Process p = Runtime.getRuntime().exec("cd " + Environment.getExternalStorageDirectory() + "/.yasmin");

Hope it'll help!


you should use Runtime.getRuntime().exec("sh -c cd /sdcard/.yasmin");


You can get the file generated with log as follows:

command - "your command" Environment - null Directory - null

Runtime.getRuntime().exec("your command",null,null);


  1. Get the process of the exec() using: Process p = Runtime.getRuntime().exec(...).
  2. Grab the process inputStream using p.getInputStream();.
  3. Run the second command.

I would have posted it as a comment to MByD's answer but I don't have 50 reputation yet so StackOverflow won't let me.

For the second step you are supposed to use DataOutputStream instead of DataInputStream to write commands to the shell. InsputDataStream is for the opposite purpose in fact that is to read output.

If it sounds confusing then think of it this way: You are outputting the commands through the Android Debug Bridge (ADB) to the shell hence using DataOutputStream. On the other hand you are getting result through the ADB from the shell hence using DataInputStream.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜