java.io.IOException: 运行 exec() 时出错.命令: [cd, sdcard/.yasmin]



我尝试访问SD卡中的文件夹并安装myapp.apk,我使用以下代码:

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

但不幸的是,我有这个错误:

05-11 11:09:57.925: WARN/System.err(1399): java.io.IOException: 
Error running exec(). Commands: [cd, sdcard/.yasmin] Working Directory: null    Environment: null

任何人请有一个想法。提前谢谢。

我不确定这是否会解决您的问题,但是 AFAIK,每次调用exec()都会创建一个新的 shell。可能的解决方案是执行以下操作:

  1. 使用 Process p = Runtime.getRuntime().exec(...) 获取 exec() 的进程
  2. 使用 p.getInputStream(); 获取进程输入流。
  3. 运行第二个命令。

另请注意,您正在尝试访问SD卡,因为您在根文件夹和硬编码路径中,请考虑以下事项:

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

甚至更好:

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

希望对您有所帮助!

你应该使用Runtime.getRuntime().exec("sh -c cd/sdcard/.yasmin");

您可以获取使用 log 生成的文件,如下所示:

命令 - "您的命令"环境 - 空目录 - 空

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

  1. 使用以下方法获取 exec() 的进程:进程 p = Runtime.getRuntime().exec(...)。
  2. 使用 p.getInputStream();获取进程输入流。
  3. 运行第二个命令。

我会把它作为对MByD答案的评论发布,但我还没有50的声誉,所以StackOverflow不会让我。

对于第二步,您应该使用 DataOutputStream 而不是 DataInputStream 将命令写入 shell。 InsputDataStream实际上是为了读取输出的相反目的。

如果听起来令人困惑,那么可以这样想:您通过 Android 调试桥 (ADB) 将命令输出到 shell,因此使用 DataOutputStream .另一方面,您通过 ADB 从外壳获得结果,因此使用 DataInputStream .

最新更新