我尝试访问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。可能的解决方案是执行以下操作:
- 使用
Process p = Runtime.getRuntime().exec(...)
获取 exec() 的进程
。 - 使用
p.getInputStream();
获取进程输入流。 - 运行第二个命令。
另请注意,您正在尝试访问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);
- 使用以下方法获取 exec() 的进程:进程 p = Runtime.getRuntime().exec(...)。
- 使用 p.getInputStream();获取进程输入流。
- 运行第二个命令。
我会把它作为对MByD答案的评论发布,但我还没有50的声誉,所以StackOverflow不会让我。
对于第二步,您应该使用 DataOutputStream
而不是 DataInputStream
将命令写入 shell。 InsputDataStream
实际上是为了读取输出的相反目的。
如果听起来令人困惑,那么可以这样想:您通过 Android 调试桥 (ADB) 将命令输出到 shell,因此使用 DataOutputStream
.另一方面,您通过 ADB 从外壳获得结果,因此使用 DataInputStream
.