我尝试访问sdcard中的文件夹并安装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
任何人请有个主意。 提前谢谢。
答案 0 :(得分:7)
我不确定这会解决您的问题,但AFAIK,每次调用exec()
都会创建一个新的shell。可能的解决方案是执行以下操作:
Process p = Runtime.getRuntime().exec(...)
。p.getInputStream();
抓取进程inputStream。另请注意,您尝试访问sdcard,就像在根文件夹和硬编码路径中一样,请考虑以下事项:
Process p = Runtime.getRuntime().exec("cd /sdcard/.yasmin");
甚至更好:
Process p = Runtime.getRuntime().exec("cd " + Environment.getExternalStorageDirectory() + "/.yasmin");
希望它会有所帮助!
答案 1 :(得分:5)
答案 2 :(得分:1)
您可以按如下方式获取使用日志生成的文件:
命令 - “你的命令” 环境 - null 目录 - null
Runtime.getRuntime()。exec(“你的命令”,null,null);
答案 3 :(得分:0)
- 使用以下命令获取exec()的进程:进程p = Runtime.getRuntime()。exec(...)。
- 使用p.getInputStream();获取流程inputStream。
- 运行第二个命令。
我会把它发布为对MByD的回答的评论,但我还没有50的声誉,因此StackOverflow不允许我这样做。
第二步,您应该使用DataOutputStream
而不是DataInputStream
将命令写入外壳。 InsputDataStream
实际上是相反的目的,即读取输出。
如果听起来令人困惑,那么可以这样考虑:
您正在通过Android调试桥(ADB)将命令输出到外壳,因此使用DataOutputStream
。另一方面,您可以使用DataInputStream
从外壳通过ADB获得结果。